Regards _Sugesh
> -----Original Message----- > From: ovs-dev-boun...@openvswitch.org [mailto:ovs-dev- > boun...@openvswitch.org] On Behalf Of Yuanhan Liu > Sent: Tuesday, September 5, 2017 10:23 AM > To: d...@openvswitch.org > Subject: [ovs-dev] [PATCH v2 2/8] dpif-netdev: retrieve flow directly from > the flow mark [snip] > > atomic_read_relaxed(&pmd->dp->emc_insert_min, &cur_min); > > DP_PACKET_BATCH_REFILL_FOR_EACH (i, size, packet, packets_) { > struct dp_netdev_flow *flow; > + uint32_t flow_mark; > > if (OVS_UNLIKELY(dp_packet_size(packet) < ETH_HEADER_LEN)) { > dp_packet_delete(packet); > @@ -4972,6 +4974,16 @@ emc_processing(struct dp_netdev_pmd_thread > *pmd, > continue; > } > > + if (dp_packet_has_flow_mark(packet, &flow_mark)) { > + flow = dp_netdev_pmd_find_flow_by_mark(pmd, flow_mark); > + if (flow) { [Sugesh] If the NIC/hardware can match on tcp_flags then this parsing can be avoided? Is that true? > + tcp_flags = parse_tcp_flags(packet); > + dp_netdev_queue_batches(packet, flow, tcp_flags, batches, > + n_batches); > + continue; > + } > + } > + > if (i != size - 1) { > struct dp_packet **packets = packets_->packets; > /* Prefetch next packet data and metadata. */ @@ -4989,7 +5001,8 > @@ emc_processing(struct dp_netdev_pmd_thread *pmd, > /* If EMC is disabled skip emc_lookup */ > flow = (cur_min == 0) ? NULL: emc_lookup(flow_cache, key); > if (OVS_LIKELY(flow)) { > - dp_netdev_queue_batches(packet, flow, &key->mf, batches, > + tcp_flags = miniflow_get_tcp_flags(&key->mf); > + dp_netdev_queue_batches(packet, flow, tcp_flags, batches, > n_batches); > } else { > /* Exact match cache missed. Group missed packets together at @@ > - > 5166,7 +5179,9 @@ fast_path_processing(struct dp_netdev_pmd_thread > *pmd, > flow = dp_netdev_flow_cast(rules[i]); > > emc_probabilistic_insert(pmd, &keys[i], flow); > - dp_netdev_queue_batches(packet, flow, &keys[i].mf, batches, > n_batches); > + dp_netdev_queue_batches(packet, flow, > + miniflow_get_tcp_flags(&keys[i].mf), > + batches, n_batches); > } > > dp_netdev_count_packet(pmd, DP_STAT_MASKED_HIT, cnt - miss_cnt); > diff --git a/lib/flow.c b/lib/flow.c index b2b10aa..912c538 100644 > --- a/lib/flow.c > +++ b/lib/flow.c > @@ -991,6 +991,84 @@ parse_dl_type(const struct eth_header *data_, > size_t size) > return parse_ethertype(&data, &size); } > [Snip] > -- > 2.7.4 > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev