From 6794be1deea818f21eae0a6b24c96ec5650ba758 Mon Sep 17 00:00:00 2001 From: Ilya Maximets Date: Thu, 11 Oct 2018 15:06:44 +0300 Subject: [PATCH] dpif-netdev-perf: Clarify frequency number. 'dpif-netdev/pmd-perf-show' command prints the frequency number calculated from the total number of cycles spent for iterations for the measured period. This number could be confusing, because users may think that it should be equal to CPU frequency, especially on non-x86 systems where TSC frequency likely does not match with CPU one. Moreover, counted TSC cycles could differ from the HW TSC cycles in case of a large number of PMD reloads, because cycles spent outside of the main polling loop are not taken into account anywhere. In this case the frequency will not match even TSC frequency. Let's clarify the meaning in order to avoid this misunderstanding. 'Cycles' replaced with 'Used TSC cycles', which describes how many TSC cycles consumed by the main polling loop. % of the total TSC cycles now printed instead of GHz frequency, because GHz is unclear for understanding, especially without knowing the exact TSC frequency. Signed-off-by: Ilya Maximets Signed-off-by: Ian Stokes --- lib/dpif-netdev-perf.c | 38 ++++++++++++++++++------------------- lib/dpif-netdev-unixctl.man | 30 +++++++++++++++-------------- manpages.mk | 2 ++ vswitchd/ovs-vswitchd.8.in | 6 +----- 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/lib/dpif-netdev-perf.c b/lib/dpif-netdev-perf.c index 92ac38dab2..8f0c9bc4f5 100644 --- a/lib/dpif-netdev-perf.c +++ b/lib/dpif-netdev-perf.c @@ -170,7 +170,8 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s, double duration) { uint64_t stats[PMD_N_STATS]; - double us_per_cycle = 1000000.0 / get_tsc_hz(); + uint64_t tsc_hz = get_tsc_hz(); + double us_per_cycle = 1000000.0 / tsc_hz; if (duration == 0) { return; @@ -191,26 +192,26 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s, uint64_t busy_iter = tot_iter >= idle_iter ? tot_iter - idle_iter : 0; ds_put_format(str, - " Cycles: %12"PRIu64" (%.2f GHz)\n" - " Iterations: %12"PRIu64" (%.2f us/it)\n" - " - idle: %12"PRIu64" (%4.1f %% cycles)\n" - " - busy: %12"PRIu64" (%4.1f %% cycles)\n", - tot_cycles, (tot_cycles / duration) / 1E9, + " Iterations: %12"PRIu64" (%.2f us/it)\n" + " - Used TSC cycles: %12"PRIu64" (%5.1f %% of total cycles)\n" + " - idle iterations: %12"PRIu64" (%5.1f %% of used cycles)\n" + " - busy iterations: %12"PRIu64" (%5.1f %% of used cycles)\n", tot_iter, tot_cycles * us_per_cycle / tot_iter, + tot_cycles, 100.0 * (tot_cycles / duration) / tsc_hz, idle_iter, 100.0 * stats[PMD_CYCLES_ITER_IDLE] / tot_cycles, busy_iter, 100.0 * stats[PMD_CYCLES_ITER_BUSY] / tot_cycles); if (rx_packets > 0) { ds_put_format(str, - " Rx packets: %12"PRIu64" (%.0f Kpps, %.0f cycles/pkt)\n" - " Datapath passes: %12"PRIu64" (%.2f passes/pkt)\n" - " - EMC hits: %12"PRIu64" (%4.1f %%)\n" - " - SMC hits: %12"PRIu64" (%4.1f %%)\n" - " - Megaflow hits: %12"PRIu64" (%4.1f %%, %.2f subtbl lookups/" - "hit)\n" - " - Upcalls: %12"PRIu64" (%4.1f %%, %.1f us/upcall)\n" - " - Lost upcalls: %12"PRIu64" (%4.1f %%)\n", + " Rx packets: %12"PRIu64" (%.0f Kpps, %.0f cycles/pkt)\n" + " Datapath passes: %12"PRIu64" (%.2f passes/pkt)\n" + " - EMC hits: %12"PRIu64" (%5.1f %%)\n" + " - SMC hits: %12"PRIu64" (%5.1f %%)\n" + " - Megaflow hits: %12"PRIu64" (%5.1f %%, %.2f " + "subtbl lookups/hit)\n" + " - Upcalls: %12"PRIu64" (%5.1f %%, %.1f us/upcall)\n" + " - Lost upcalls: %12"PRIu64" (%5.1f %%)\n", rx_packets, (rx_packets / duration) / 1000, 1.0 * stats[PMD_CYCLES_ITER_BUSY] / rx_packets, passes, rx_packets ? 1.0 * passes / rx_packets : 0, @@ -228,17 +229,16 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s, stats[PMD_STAT_LOST], 100.0 * stats[PMD_STAT_LOST] / passes); } else { - ds_put_format(str, " Rx packets: %12d\n", 0); + ds_put_format(str, " Rx packets: %12d\n", 0); } if (tx_packets > 0) { ds_put_format(str, - " Tx packets: %12"PRIu64" (%.0f Kpps)\n" - " Tx batches: %12"PRIu64" (%.2f pkts/batch)" - "\n", + " Tx packets: %12"PRIu64" (%.0f Kpps)\n" + " Tx batches: %12"PRIu64" (%.2f pkts/batch)\n", tx_packets, (tx_packets / duration) / 1000, tx_batches, 1.0 * tx_packets / tx_batches); } else { - ds_put_format(str, " Tx packets: %12d\n\n", 0); + ds_put_format(str, " Tx packets: %12d\n\n", 0); } } diff --git a/lib/dpif-netdev-unixctl.man b/lib/dpif-netdev-unixctl.man index 0705f1cfb7..6c54f6f9cc 100644 --- a/lib/dpif-netdev-unixctl.man +++ b/lib/dpif-netdev-unixctl.man @@ -123,24 +123,26 @@ Display the last ms_len millisecond stats The output always contains the following global PMD statistics: .RS .IP -Time: 15:24:55.270 .br +.EX +Time: 15:24:55.270 Measurement duration: 1.008 s pmd thread numa_id 0 core_id 1: - Cycles: 2419034712 (2.40 GHz) - Iterations: 572817 (1.76 us/it) - - idle: 486808 (15.9 % cycles) - - busy: 86009 (84.1 % cycles) - Rx packets: 2399607 (2381 Kpps, 848 cycles/pkt) - Datapath passes: 3599415 (1.50 passes/pkt) - - EMC hits: 336472 ( 9.3 %) - - SMC hits: 0 ( 0.0 %) - - Megaflow hits: 3262943 (90.7 %, 1.00 subtbl lookups/hit) - - Upcalls: 0 ( 0.0 %, 0.0 us/upcall) - - Lost upcalls: 0 ( 0.0 %) - Tx packets: 2399607 (2381 Kpps) - Tx batches: 171400 (14.00 pkts/batch) + Iterations: 572817 (1.76 us/it) + - Used TSC cycles: 2419034712 ( 99.9 % of total cycles) + - idle iterations: 486808 ( 15.9 % of used cycles) + - busy iterations: 86009 ( 84.1 % of used cycles) + Rx packets: 2399607 (2381 Kpps, 848 cycles/pkt) + Datapath passes: 3599415 (1.50 passes/pkt) + - EMC hits: 336472 ( 9.3 %) + - SMC hits: 0 ( 0.0 %) + - Megaflow hits: 3262943 ( 90.7 %, 1.00 subtbl lookups/hit) + - Upcalls: 0 ( 0.0 %, 0.0 us/upcall) + - Lost upcalls: 0 ( 0.0 %) + Tx packets: 2399607 (2381 Kpps) + Tx batches: 171400 (14.00 pkts/batch) +.EE .RE .IP Here "Rx packets" actually reflects the number of packets forwarded by the diff --git a/manpages.mk b/manpages.mk index 6ebcf6b704..0fd986e004 100644 --- a/manpages.mk +++ b/manpages.mk @@ -255,6 +255,7 @@ vswitchd/ovs-vswitchd.8: \ lib/dpif-netdev-unixctl.man \ lib/memory-unixctl.man \ lib/netdev-dpdk-unixctl.man \ + lib/ovs.tmac \ lib/service.man \ lib/ssl-bootstrap.man \ lib/ssl-peer-ca-cert.man \ @@ -273,6 +274,7 @@ lib/dpctl.man: lib/dpif-netdev-unixctl.man: lib/memory-unixctl.man: lib/netdev-dpdk-unixctl.man: +lib/ovs.tmac: lib/service.man: lib/ssl-bootstrap.man: lib/ssl-peer-ca-cert.man: diff --git a/vswitchd/ovs-vswitchd.8.in b/vswitchd/ovs-vswitchd.8.in index e39d158d5d..901f75e6f3 100644 --- a/vswitchd/ovs-vswitchd.8.in +++ b/vswitchd/ovs-vswitchd.8.in @@ -1,9 +1,5 @@ .\" -*- nroff -*- -.de IQ -. br -. ns -. IP "\\$1" -.. +.so lib/ovs.tmac .TH ovs\-vswitchd 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual" .\" This program's name: .ds PN ovs\-vswitchd