[ovs-dev] [RFC 1/2] dpif-netdev: Fix per packet cycles statistics.

Darrell Ball dball at vmware.com
Fri Sep 22 17:52:33 UTC 2017


Hi Billy

Maybe you need to rebase your branch; this patch was applied a couple weeks ago.

Thanks Darrell

On 9/22/17, 6:47 AM, "Billy O'Mahony" <billy.o.mahony at intel.com> wrote:

    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 reflects 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 071ec14..e3a5590 100644
    --- a/lib/dpif-netdev.c
    +++ b/lib/dpif-netdev.c
    @@ -796,7 +796,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;
     
    @@ -812,13 +812,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];
    -- 
    2.7.4
    
    



More information about the dev mailing list