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

Stokes, Ian ian.stokes at intel.com
Tue Jun 29 16:40:41 UTC 2021


> 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 %)
> 

Hi Amber,

Agree with the changes/updates suggested by Flavio, other than that LGTM. Will await your v5.

Regards
Ian

> 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 ++++--
>  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++;
>              }
>          } 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


More information about the dev mailing list