> 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 %) >
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.haa...@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@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 > 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