On 6 Jul 2021, at 15:11, Cian Ferriter wrote:
> From: Harry van Haaren <harry.van.haa...@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.haa...@intel.com>
Flavio asked to also update the man page, lib/dpif-netdev-unixctl.man, but I do
not see the changes here.
> ---
>
> v5:
> - fix review comments(Ian, Flavio, Eelco)
> ---
> ---
> lib/dpif-netdev-avx512.c | 2 ++
> lib/dpif-netdev-perf.c | 3 +++
> lib/dpif-netdev-perf.h | 1 +
> lib/dpif-netdev-unixctl.man | 1 +
> lib/dpif-netdev.c | 16 ++++++++++------
> tests/pmd.at | 6 ++++--
> 6 files changed, 21 insertions(+), 8 deletions(-)
>
> diff --git a/lib/dpif-netdev-avx512.c b/lib/dpif-netdev-avx512.c
> index 91fad92db..645b4c9b4 100644
> --- a/lib/dpif-netdev-avx512.c
> +++ b/lib/dpif-netdev-avx512.c
> @@ -311,8 +311,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);
As mentioned (and asked by you guys) this should change to
mfex_hits/mfex_hit_cnt to avoid re-definition of an earlier variable.
> 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-unixctl.man b/lib/dpif-netdev-unixctl.man
> index 83ce4f1c5..f2e536c15 100644
> --- a/lib/dpif-netdev-unixctl.man
> +++ b/lib/dpif-netdev-unixctl.man
> @@ -136,6 +136,7 @@ pmd thread numa_id 0 core_id 1:
> Rx packets: 2399607 (2381 Kpps, 848 cycles/pkt)
> Datapath passes: 3599415 (1.50 passes/pkt)
> - PHWOL hits: 0 ( 0.0 %)
> + - MFEX Opt hits: 4570133 ( 99.5 %)
Can we put a realistic number here, as we have more hits than datapath passes?
> - EMC hits: 336472 ( 9.3 %)
> - SMC hits: 0 ( 0.0 %)
> - Megaflow hits: 3262943 ( 90.7 %, 1.00 subtbl lookups/hit)
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 6bcb24a73..08ce06e3f 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -649,6 +649,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"
> @@ -658,10 +659,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) {
> @@ -6967,7 +6967,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 dfc_cache *cache = &pmd->flow_cache;
> struct dp_packet *packet;
> struct dp_packet_batch single_packet;
> @@ -7041,7 +7041,9 @@ dfc_processing(struct dp_netdev_pmd_thread *pmd,
>
> mf_ret = mfex_func(&single_packet, key, 1, port_no, pmd);
> /* Fallback to original miniflow_extract if there is a miss. */
> - if (!mf_ret) {
> + if (mf_ret) {
> + n_mfex_opt_hit++;
> + } else {
> miniflow_extract(packet, &key->mf);
> }
> } else {
> @@ -7095,6 +7097,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 61fc6257c..d3de86f09 100644
> --- a/tests/pmd.at
> +++ b/tests/pmd.at
> @@ -202,12 +202,13 @@ dummy@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.32.0
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev