[ovs-dev] [v4 08/12] dpif/stats: add miniflow extract opt hits counter

Amber, Kumar kumar.amber at intel.com
Tue Jun 29 04:33:29 UTC 2021


Hi Flavio,

Thanks Again, replies inline.

> -----Original Message-----
> From: Flavio Leitner <fbl at sysclose.org>
> Sent: Monday, June 28, 2021 8:29 AM
> To: Amber, Kumar <kumar.amber at intel.com>
> Cc: dev at openvswitch.org; i.maximets at ovn.org
> Subject: Re: [ovs-dev] [v4 08/12] dpif/stats: add miniflow extract opt hits
> counter
> 
> On Thu, Jun 17, 2021 at 09:57:50PM +0530, Kumar Amber wrote:
> > From: Harry van Haaren <harry.van.haaren at intel.com>
> >
> > This commit adds a new counter to be displayed to the user when
> > requesting datapath packet statistics. It counts the number of packets
> > that are parsed and a miniflow built up from it by the optimized
> > miniflow extract parsers.
> >
> > The ovs-appctl command "dpif-netdev/pmd-perf-show" now has an extra
> > entry indicating if the optimized MFEX was hit:
> >
> >   - MFEX Opt hits:        6786432  (100.0 %)
> >
> > Signed-off-by: Harry van Haaren <harry.van.haaren at intel.com>
> > ---
> >  lib/dpif-netdev-avx512.c |  2 ++
> >  lib/dpif-netdev-perf.c   |  3 +++
> >  lib/dpif-netdev-perf.h   |  1 +
> >  lib/dpif-netdev.c        | 14 +++++++++-----
> >  tests/pmd.at             |  6 ++++--
> 
> 
> It looks like this is missing to update lib/dpif-netdev-unixctl.man
> 

Done added entry for MFEX hits to the mentioned file.
> 
> >  5 files changed, 19 insertions(+), 7 deletions(-)
> >
> > diff --git a/lib/dpif-netdev-avx512.c b/lib/dpif-netdev-avx512.c index
> > bb99b23ff..f55786f8c 100644
> > --- a/lib/dpif-netdev-avx512.c
> > +++ b/lib/dpif-netdev-avx512.c
> > @@ -297,8 +297,10 @@ dp_netdev_input_outer_avx512(struct
> dp_netdev_pmd_thread *pmd,
> >      }
> >
> >      /* At this point we don't return error anymore, so commit stats
> > here. */
> > +    uint32_t mfex_hit = __builtin_popcountll(mf_mask);
> >      pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_RECV,
> batch_size);
> >      pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_PHWOL_HIT,
> > phwol_hits);
> > +    pmd_perf_update_counter(&pmd->perf_stats,
> PMD_STAT_MFEX_OPT_HIT,
> > + mfex_hit);
> >      pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_EXACT_HIT,
> emc_hits);
> >      pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_SMC_HIT,
> smc_hits);
> >      pmd_perf_update_counter(&pmd->perf_stats,
> PMD_STAT_MASKED_HIT,
> > diff --git a/lib/dpif-netdev-perf.c b/lib/dpif-netdev-perf.c index
> > 7103a2d4d..d7676ea2b 100644
> > --- a/lib/dpif-netdev-perf.c
> > +++ b/lib/dpif-netdev-perf.c
> > @@ -247,6 +247,7 @@ pmd_perf_format_overall_stats(struct ds *str,
> struct pmd_perf_stats *s,
> >              "  Rx packets:        %12"PRIu64"  (%.0f Kpps, %.0f cycles/pkt)\n"
> >              "  Datapath passes:   %12"PRIu64"  (%.2f passes/pkt)\n"
> >              "  - PHWOL hits:      %12"PRIu64"  (%5.1f %%)\n"
> > +            "  - MFEX Opt hits:   %12"PRIu64"  (%5.1f %%)\n"
> >              "  - EMC hits:        %12"PRIu64"  (%5.1f %%)\n"
> >              "  - SMC hits:        %12"PRIu64"  (%5.1f %%)\n"
> >              "  - Megaflow hits:   %12"PRIu64"  (%5.1f %%, %.2f "
> > @@ -258,6 +259,8 @@ pmd_perf_format_overall_stats(struct ds *str,
> struct pmd_perf_stats *s,
> >              passes, rx_packets ? 1.0 * passes / rx_packets : 0,
> >              stats[PMD_STAT_PHWOL_HIT],
> >              100.0 * stats[PMD_STAT_PHWOL_HIT] / passes,
> > +            stats[PMD_STAT_MFEX_OPT_HIT],
> > +            100.0 * stats[PMD_STAT_MFEX_OPT_HIT] / passes,
> >              stats[PMD_STAT_EXACT_HIT],
> >              100.0 * stats[PMD_STAT_EXACT_HIT] / passes,
> >              stats[PMD_STAT_SMC_HIT],
> > diff --git a/lib/dpif-netdev-perf.h b/lib/dpif-netdev-perf.h index
> > 8b1a52387..834c26260 100644
> > --- a/lib/dpif-netdev-perf.h
> > +++ b/lib/dpif-netdev-perf.h
> > @@ -57,6 +57,7 @@ extern "C" {
> >
> >  enum pmd_stat_type {
> >      PMD_STAT_PHWOL_HIT,     /* Packets that had a partial HWOL hit
> (phwol). */
> > +    PMD_STAT_MFEX_OPT_HIT,  /* Packets that had miniflow optimized
> > + match. */
> >      PMD_STAT_EXACT_HIT,     /* Packets that had an exact match (emc). */
> >      PMD_STAT_SMC_HIT,       /* Packets that had a sig match hit (SMC). */
> >      PMD_STAT_MASKED_HIT,    /* Packets that matched in the flow table.
> */
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index
> > 35c927d55..7a8f15415 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -660,6 +660,7 @@ pmd_info_show_stats(struct ds *reply,
> >                    "  packet recirculations: %"PRIu64"\n"
> >                    "  avg. datapath passes per packet: %.02f\n"
> >                    "  phwol hits: %"PRIu64"\n"
> > +                  "  mfex opt hits: %"PRIu64"\n"
> >                    "  emc hits: %"PRIu64"\n"
> >                    "  smc hits: %"PRIu64"\n"
> >                    "  megaflow hits: %"PRIu64"\n"
> > @@ -669,10 +670,9 @@ pmd_info_show_stats(struct ds *reply,
> >                    "  avg. packets per output batch: %.02f\n",
> >                    total_packets, stats[PMD_STAT_RECIRC],
> >                    passes_per_pkt, stats[PMD_STAT_PHWOL_HIT],
> > -                  stats[PMD_STAT_EXACT_HIT],
> > -                  stats[PMD_STAT_SMC_HIT],
> > -                  stats[PMD_STAT_MASKED_HIT], lookups_per_hit,
> > -                  stats[PMD_STAT_MISS], stats[PMD_STAT_LOST],
> > +                  stats[PMD_STAT_MFEX_OPT_HIT],
> stats[PMD_STAT_EXACT_HIT],
> > +                  stats[PMD_STAT_SMC_HIT], stats[PMD_STAT_MASKED_HIT],
> > +                  lookups_per_hit, stats[PMD_STAT_MISS],
> > + stats[PMD_STAT_LOST],
> >                    packets_per_batch);
> >
> >      if (total_cycles == 0) {
> > @@ -6863,7 +6863,7 @@ dfc_processing(struct dp_netdev_pmd_thread
> *pmd,
> >                 bool md_is_valid, odp_port_t port_no)  {
> >      struct netdev_flow_key *key = &keys[0];
> > -    size_t n_missed = 0, n_emc_hit = 0, n_phwol_hit = 0;
> > +    size_t n_missed = 0, n_emc_hit = 0, n_phwol_hit = 0,
> > + n_mfex_opt_hit = 0;
> >      struct dp_packet_batch single_packet;
> >      struct dfc_cache *cache = &pmd->flow_cache;
> >      struct dp_packet *packet;
> > @@ -6931,6 +6931,8 @@ dfc_processing(struct dp_netdev_pmd_thread
> *pmd,
> >              /* Fallback to original miniflow_extract if there is a miss. */
> >              if (!mf_ret) {
> >                  miniflow_extract(packet, &key->mf);
> > +            } else {
> > +                n_mfex_opt_hit++;
> >              }
> 
> nit: invert the logic.
>      if (mf_ret) {
>         n_mfex_opt_hit++;
>      } else {
>         miniflow_extract(packet, &key->mf);
>      }
> 

Done Inverted in v5.
> fbl
> 
> >          } else {
> >              miniflow_extract(packet, &key->mf); @@ -6982,6 +6984,8 @@
> > dfc_processing(struct dp_netdev_pmd_thread *pmd,
> >      *n_flows = map_cnt;
> >
> >      pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_PHWOL_HIT,
> > n_phwol_hit);
> > +    pmd_perf_update_counter(&pmd->perf_stats,
> PMD_STAT_MFEX_OPT_HIT,
> > +                            n_mfex_opt_hit);
> >      pmd_perf_update_counter(&pmd->perf_stats, PMD_STAT_EXACT_HIT,
> > n_emc_hit);
> >
> >      if (!smc_enable_db) {
> > diff --git a/tests/pmd.at b/tests/pmd.at index 34a59d502..0947525f4
> > 100644
> > --- a/tests/pmd.at
> > +++ b/tests/pmd.at
> > @@ -202,12 +202,13 @@ dummy at ovs-dummy: hit:0 missed:0
> >      p0 7/1: (dummy-pmd: configured_rx_queues=4,
> > configured_tx_queues=<cleared>, requested_rx_queues=4,
> > requested_tx_queues=<cleared>)
> >  ])
> >
> > -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed
> > SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 10], [0], [dnl
> > +AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed
> > +SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 11], [0], [dnl
> >  pmd thread numa_id <cleared> core_id <cleared>:
> >    packets received: 0
> >    packet recirculations: 0
> >    avg. datapath passes per packet: 0.00
> >    phwol hits: 0
> > +  mfex opt hits: 0
> >    emc hits: 0
> >    smc hits: 0
> >    megaflow hits: 0
> > @@ -234,12 +235,13 @@ AT_CHECK([cat ovs-vswitchd.log |
> > filter_flow_install | strip_xout], [0], [dnl
> > recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:
> > 77,dst=50:54:00:00:01:78),eth_type(0x0800),ipv4(frag=no), actions:
> > <del>
> >  ])
> >
> > -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed
> > SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 10], [0], [dnl
> > +AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed
> > +SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 11], [0], [dnl
> >  pmd thread numa_id <cleared> core_id <cleared>:
> >    packets received: 20
> >    packet recirculations: 0
> >    avg. datapath passes per packet: 1.00
> >    phwol hits: 0
> > +  mfex opt hits: 0
> >    emc hits: 19
> >    smc hits: 0
> >    megaflow hits: 0
> > --
> > 2.25.1
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 
> --
> fbl


More information about the dev mailing list