[PATCH v6 0/7] perf report: Support sorting all blocks by cycles

Jin Yao
2019-11-05T03:37:20Z

It would be useful to support sorting for all blocks by the
sampled cycles percent per block. This is useful to concentrate
on the globally hottest blocks.

This patch series implements a new option "--total-cycles" which
sorts all blocks by 'Sampled Cycles%'. The 'Sampled Cycles%' is
block sampled cycles aggregation / total sampled cycles

For example,

perf record -b ./div
perf report --total-cycles --stdio

# To display the perf.data header info, please use --header/--header-only options.
#
#
# Total Lost Samples: 0
#
# Samples: 2M of event 'cycles'
# Event count (approx.): 2753248
#
# Sampled Cycles% Sampled Cycles Avg Cycles% Avg Cycles [Program Block Range] Shared Object
# ............... .............. ........... .......... ................................................................. ....................
#
26.04% 2.8M 0.40% 18 [div.c:42 -> div.c:39] div
15.17% 1.2M 0.16% 7 [random_r.c:357 -> random_r.c:380] libc-2.27.so
5.11% 402.0K 0.04% 2 [div.c:27 -> div.c:28] div
4.87% 381.6K 0.04% 2 [random.c:288 -> random.c:291] libc-2.27.so
4.53% 381.0K 0.04% 2 [div.c:40 -> div.c:40] div
3.85% 300.9K 0.02% 1 [div.c:22 -> div.c:25] div
3.08% 241.1K 0.02% 1 [rand.c:26 -> rand.c:27] libc-2.27.so
3.06% 240.0K 0.02% 1 [random.c:291 -> random.c:291] libc-2.27.so
2.78% 215.7K 0.02% 1 [random.c:298 -> random.c:298] libc-2.27.so
2.52% 198.3K 0.02% 1 [random.c:293 -> random.c:293] libc-2.27.so
2.36% 184.8K 0.02% 1 [rand.c:28 -> rand.c:28] libc-2.27.so
2.33% 180.5K 0.02% 1 [random.c:295 -> random.c:295] libc-2.27.so
2.28% 176.7K 0.02% 1 [random.c:295 -> random.c:295] libc-2.27.so
2.20% 168.8K 0.02% 1 [rand@plt+0 -> rand@plt+0] div
1.98% 158.2K 0.02% 1 [random_r.c:388 -> random_r.c:388] libc-2.27.so
1.57% 123.3K 0.02% 1 [div.c:42 -> div.c:44] div
1.44% 116.0K 0.42% 19 [random_r.c:357 -> random_r.c:394] libc-2.27.so
......

This patch series supports both stdio and tui. And also with the supporting
of --percent-limit.

v6:
---
Move block displaying codes from builtin-report.c to
block-info.c. Two new functions are created in block-info.c
(report__browse_block_hists, report__tui_browse_block_hists).

Impacted patches:
-----------------
perf report: Sort by sampled cycles percent per block for stdio
perf report: Support --percent-limit for --total-cycles
perf report: Sort by sampled cycles percent per block for tui

v5:
---
1. Move all block functions to block-info.c

2. Move the code of setting ms(map+sym) in block hist_entry to
patch 'perf util: Support block formats with compare/sort/display'.
Because this info is needed for reporting the block range
(i.e. source line)

3. Fix a crash issue when tui mode is enabled.

Impacted patches:
-----------------
perf util: Support block formats with compare/sort/display
perf report: Sort by sampled cycles percent per block for stdio
perf report: Support --percent-limit for --total-cycles
perf report: Sort by sampled cycles percent per block for tui

v4:
---
1. Move the block collection out of block printing.

2. Use new option '--total-cycles' to replace '-s total_cycles'

3. Move code for skipping column length calculation to patch:
'perf diff: Don't use hack to skip column length calculation'

4. Some minor updates and cleanup.

v3:
---
1. Move common block info functions to block-info.h/block-info.c

2. Remove nasty hack for skipping calculation of column length.

3. Some minor cleanup.

v2:
---
Rebase to perf/core branch

Jin Yao (7):
perf diff: Don't use hack to skip column length calculation
perf util: Cleanup and refactor block info functions
perf util: Count the total cycles of all samples
perf util: Support block formats with compare/sort/display
perf report: Sort by sampled cycles percent per block for stdio
perf report: Support --percent-limit for --total-cycles
perf report: Sort by sampled cycles percent per block for tui

tools/perf/Documentation/perf-report.txt | 11 +
tools/perf/builtin-annotate.c | 2 +-
tools/perf/builtin-diff.c | 121 +-----
tools/perf/builtin-report.c | 61 ++-
tools/perf/builtin-top.c | 3 +-
tools/perf/ui/browsers/hists.c | 62 ++-
tools/perf/ui/browsers/hists.h | 2 +
tools/perf/ui/stdio/hist.c | 29 +-
tools/perf/util/Build | 1 +
tools/perf/util/block-info.c | 477 +++++++++++++++++++++++
tools/perf/util/block-info.h | 79 ++++
tools/perf/util/hist.c | 13 +-
tools/perf/util/hist.h | 15 +-
tools/perf/util/symbol.c | 22 --
tools/perf/util/symbol.h | 24 --
tools/perf/util/symbol_conf.h | 1 +
16 files changed, 762 insertions(+), 161 deletions(-)
create mode 100644 tools/perf/util/block-info.c
create mode 100644 tools/perf/util/block-info.h

--
2.17.1