[ovs-dev] [PATCH v2 1/5] dpif-netdev: move pkt metadata init out of emc_processing.
O Mahony, Billy
billy.o.mahony at intel.com
Mon Jul 31 15:32:38 UTC 2017
There is also a reference to md_is_valid is the comments of emc_processing that needs to be removed.
> -----Original Message-----
> From: O Mahony, Billy
> Sent: Monday, July 31, 2017 4:04 PM
> To: 'antonio.fischetti at intel.com' <antonio.fischetti at intel.com>;
> dev at openvswitch.org
> Subject: RE: [ovs-dev] [PATCH v2 1/5] dpif-netdev: move pkt metadata init
> out of emc_processing.
>
> Hi Antionio,
>
> This looks like a reasonable change to me.
>
> Can you add some performance statistics for when dealing with re-circulated
> packets?
>
> /Billy.
>
> > -----Original Message-----
> > From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-
> > bounces at openvswitch.org] On Behalf Of antonio.fischetti at intel.com
> > Sent: Wednesday, July 19, 2017 5:05 PM
> > To: dev at openvswitch.org
> > Subject: [ovs-dev] [PATCH v2 1/5] dpif-netdev: move pkt metadata init
> > out of emc_processing.
> >
> > Packet metadata initialization is moved into dp_netdev_input to
> > improve performance.
> >
> > Signed-off-by: Antonio Fischetti <antonio.fischetti at intel.com>
> > ---
> > In my testbench with the following port to port flow setup:
> > in_port=1,action=output:2
> > in_port=2,action=output:1
> >
> > I measured packet Rx rate (regardless of packet loss) in a
> > Bidirectional test with 64B UDP packets.
> >
> > I saw the following performance improvement
> >
> > Orig: 11.30, 11.54 Mpps
> > Orig + patch: 11.70, 11.76 Mpps
> >
> > lib/dpif-netdev.c | 21 ++++++++++-----------
> > 1 file changed, 10 insertions(+), 11 deletions(-)
> >
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index
> > 98e7765..123e04a
> > 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -4572,8 +4572,7 @@ static inline size_t emc_processing(struct
> > dp_netdev_pmd_thread *pmd,
> > struct dp_packet_batch *packets_,
> > struct netdev_flow_key *keys,
> > - struct packet_batch_per_flow batches[], size_t *n_batches,
> > - bool md_is_valid, odp_port_t port_no)
> > + struct packet_batch_per_flow batches[], size_t
> > + *n_batches)
> > {
> > struct emc_cache *flow_cache = &pmd->flow_cache;
> > struct netdev_flow_key *key = &keys[0]; @@ -4601,9 +4600,6 @@
> > emc_processing(struct dp_netdev_pmd_thread *pmd,
> > pkt_metadata_prefetch_init(&packets[i+1]->md);
> > }
> >
> > - if (!md_is_valid) {
> > - pkt_metadata_init(&packet->md, port_no);
> > - }
> > miniflow_extract(packet, &key->mf);
> > key->len = 0; /* Not computed yet. */
> > key->hash = dpif_netdev_packet_get_rss_hash(packet,
> > &key->mf); @@ -4805,8 +4801,7 @@ fast_path_processing(struct
> > dp_netdev_pmd_thread *pmd,
> > * valid, 'md_is_valid' must be true and 'port_no' will be ignored.
> > */ static void dp_netdev_input__(struct dp_netdev_pmd_thread *pmd,
> > - struct dp_packet_batch *packets,
> > - bool md_is_valid, odp_port_t port_no)
> > + struct dp_packet_batch *packets)
> > {
> > int cnt = packets->count;
> > #if !defined(__CHECKER__) && !defined(_WIN32) @@ -4823,8 +4818,7
> @@
> > dp_netdev_input__(struct dp_netdev_pmd_thread *pmd,
> > odp_port_t in_port;
> >
> > n_batches = 0;
> > - emc_processing(pmd, packets, keys, batches, &n_batches,
> > - md_is_valid, port_no);
> > + emc_processing(pmd, packets, keys, batches, &n_batches);
> > if (!dp_packet_batch_is_empty(packets)) {
> > /* Get ingress port from first packet's metadata. */
> > in_port = packets->packets[0]->md.in_port.odp_port;
> > @@ -4856,14 +4850,19 @@ dp_netdev_input(struct
> dp_netdev_pmd_thread
> > *pmd,
> > struct dp_packet_batch *packets,
> > odp_port_t port_no)
> > {
> > - dp_netdev_input__(pmd, packets, false, port_no);
> > + struct dp_packet *packet;
> > + DP_PACKET_BATCH_FOR_EACH (packet, packets) {
> > + pkt_metadata_init(&packet->md, port_no);
> > + }
> > +
> > + dp_netdev_input__(pmd, packets);
> > }
> >
> > static void
> > dp_netdev_recirculate(struct dp_netdev_pmd_thread *pmd,
> > struct dp_packet_batch *packets) {
> > - dp_netdev_input__(pmd, packets, true, 0);
> > + dp_netdev_input__(pmd, packets);
> > }
> >
> > struct dp_netdev_execute_aux {
> > --
> > 2.4.11
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
More information about the dev
mailing list