[ovs-dev] [patch_v5 1/3] dpif-netdev: Fix per packet cycles statistics.
Ferriter, Cian
cian.ferriter at intel.com
Fri Sep 1 15:20:35 UTC 2017
Hi,
> -----Original Message-----
> From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-
> bounces at openvswitch.org] On Behalf Of Darrell Ball
> Sent: 21 August 2017 19:52
> To: dlu998 at gmail.com; dev at openvswitch.org
> Cc: Ilya Maximets <i.maximets at samsung.com>
> Subject: [ovs-dev] [patch_v5 1/3] dpif-netdev: Fix per packet cycles statistics.
>
> From: Ilya Maximets <i.maximets at samsung.com>
>
> DP_STAT_LOOKUP_HIT statistics used mistakenly for calculation of total
> number of packets. This leads to completely wrong per packet cycles
> statistics.
>
> For example:
>
> emc hits:0
> megaflow hits:253702308
> avg. subtable lookups per hit:1.50
> miss:0
> lost:0
> avg cycles per packet: 248.32 (157498766585/634255770)
>
> In this case 634255770 total_packets value used for avg
> per packet calculation:
>
> total_packets = 'megaflow hits' + 'megaflow hits' * 1.5
>
> The real value should be 524.38 (157498766585/253702308)
>
> Fix that by summing only stats that reflect match/not match.
> It's decided to make direct summing of required values instead of disabling
> some stats in a loop to make calculations more clear and avoid similar issues
> in the future.
>
> CC: Jan Scheurich <jan.scheurich at ericsson.com>
> Fixes: 3453b4d62a98 ("dpif-netdev: dpcls per in_port with sorted subtables")
> Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
> Acked-by: Jan Scheurich <jan.scheurich at ericsson.com>
> ---
> lib/dpif-netdev.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index e2cd931..17e1666
> 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -755,7 +755,7 @@ pmd_info_show_stats(struct ds *reply,
> unsigned long long stats[DP_N_STATS],
> uint64_t cycles[PMD_N_CYCLES]) {
> - unsigned long long total_packets = 0;
> + unsigned long long total_packets;
> uint64_t total_cycles = 0;
> int i;
>
> @@ -771,13 +771,12 @@ pmd_info_show_stats(struct ds *reply,
> } else {
> stats[i] = 0;
> }
> -
> - if (i != DP_STAT_LOST) {
> - /* Lost packets are already included in DP_STAT_MISS */
> - total_packets += stats[i];
> - }
> }
>
> + /* Sum of all the matched and not matched packets gives the total. */
> + total_packets = stats[DP_STAT_EXACT_HIT] +
> stats[DP_STAT_MASKED_HIT]
> + + stats[DP_STAT_MISS];
> +
> for (i = 0; i < PMD_N_CYCLES; i++) {
> if (cycles[i] > pmd->cycles_zero[i]) {
> cycles[i] -= pmd->cycles_zero[i];
> --
This fixes the problem for me.
Sending 10000 streams of ETH/IP/UDP traffic to generate both both EMC and megaflow hits, I get the following:
Before Patch Stats:
pmd thread numa_id 0 core_id 3:
emc hits:25411897
megaflow hits:37275141
avg. subtable lookups per hit:1.00
miss:4
lost:0
idle cycles:303076208372 (92.96%)
processing cycles:22948778628 (7.04%)
avg cycles per packet: 3261.48 (326024987000/99962183)
avg processing cycles per packet: 229.57 (22948778628/99962183)
After Patch Stats:
pmd thread numa_id 0 core_id 3:
emc hits:25609385
megaflow hits:37618561
avg. subtable lookups per hit:1.00
miss:4
lost:0
idle cycles:289432963945 (92.65%)
processing cycles:22948750732 (7.35%)
avg cycles per packet: 4940.56 (312381714677/63227950)
avg processing cycles per packet: 362.95 (22948750732/63227950)
After applying the patch, I get more sensible total_packet values as described by Ilya.
Acked-by: Cian Ferriter <cian.ferriter at intel.com>
Tested-by: Cian Ferriter <cian.ferriter at intel.com>
More information about the dev
mailing list