Skip to content

Commit

Permalink
dpif-netdev-perf: Clarify frequency number.
Browse files Browse the repository at this point in the history
'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 <[email protected]>
Signed-off-by: Ian Stokes <[email protected]>
  • Loading branch information
igsilya authored and istokes committed Oct 12, 2018
1 parent 21e9b77 commit 6794be1
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 38 deletions.
38 changes: 19 additions & 19 deletions lib/dpif-netdev-perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -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);
}
}

Expand Down
30 changes: 16 additions & 14 deletions lib/dpif-netdev-unixctl.man
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions manpages.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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:
Expand Down
6 changes: 1 addition & 5 deletions vswitchd/ovs-vswitchd.8.in
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit 6794be1

Please sign in to comment.