From 3a164e002af00a6c1f2f06f4d86a6d383d1d08f7 Mon Sep 17 00:00:00 2001 From: Phil Yang Date: Mon, 22 Jun 2020 17:04:42 +0800 Subject: [PATCH] app/testpmd: fix CPU cycles per packet stats on Tx modes In txonly and flowgen forwarding mode, calculating CPU per packets with total received packets is not accurate. Use total transmitted packets for these cases. The error output under txonly mode: testpmd> show fwd stats all ---------------------- Forward statistics for port 0 ------------------- RX-packets: 0 RX-dropped: 0 RX-total: 0 TX-packets: 3582891927 TX-dropped: 401965824 TX-total: 3984857751 TX-bursts : 86381636 [0% of 0 pkts + 85% of 64 pkts + 15% of 32 pkts] ------------------------------------------------------------------------- ---------------------- Forward statistics for port 1 ------------------- RX-packets: 1 RX-dropped: 394351696 RX-total: 394351697 TX-packets: 3582890632 TX-dropped: 401965568 TX-total: 3984856200 TX-bursts : 86381679 [0% of 0 pkts + 85% of 64 pkts + 15% of 32 pkts] ------------------------------------------------------------------------- +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++ RX-packets: 1 RX-dropped: 394351696 RX-total: 394351697 TX-packets: 7165782559 TX-dropped: 803931392 TX-total: 7969713951 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CPU cycles/packet=54984156291.00 \ (total cycles=54984156291 / total RX packets=1) at 200 MHz Clock Fixes: 53324971a14e ("app/testpmd: display/clear forwarding stats on demand") Cc: stable@dpdk.org Signed-off-by: Phil Yang Reviewed-by: Ruifeng Wang Reviewed-by: Honnappa Nagarahalli Tested-by: Ferruh Yigit --- app/test-pmd/testpmd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index e7516673ba..92e00cf7ac 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1956,13 +1956,21 @@ fwd_stats_display(void) acc_stats_border, acc_stats_border); #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES #define CYC_PER_MHZ 1E6 - if (total_recv > 0) + if (total_recv > 0 || total_xmit > 0) { + uint64_t total_pkts = 0; + if (strcmp(cur_fwd_eng->fwd_mode_name, "txonly") == 0 || + strcmp(cur_fwd_eng->fwd_mode_name, "flowgen") == 0) + total_pkts = total_xmit; + else + total_pkts = total_recv; + printf("\n CPU cycles/packet=%.2F (total cycles=" - "%"PRIu64" / total RX packets=%"PRIu64") at %"PRIu64 + "%"PRIu64" / total %s packets=%"PRIu64") at %"PRIu64 " MHz Clock\n", - (double) fwd_cycles / total_recv, - fwd_cycles, total_recv, + (double) fwd_cycles / total_pkts, + fwd_cycles, cur_fwd_eng->fwd_mode_name, total_pkts, (uint64_t)(rte_get_tsc_hz() / CYC_PER_MHZ)); + } #endif } -- 2.20.1