[PATCHSET 00/21] perf tools: Add support for hierachy view (v4)
From: Namhyung Kim
Date: Tue Feb 02 2016 - 09:41:18 EST
Hello,
This is v4 attempt of my earlier patchset [1]. This patchset
implements a new feature that collects hist entries in a hierachical
manner. That means lower-level entries belong to an upper-level
entry. The entry hierachy is built on the sort keys given, so users
can set it whatever they want. It only shows top-level entries first,
and user can expand/collapse it dynamically.
The patch 01 to 07 are resend and got Ack's from Jiri [2].
* Changes from v3)
- rebased onto the percent limit patchset v2
* Changes from v2)
- check memory allocation failure in hists__hierarchy_insert_entry (Jiri)
- remove unused rb_hierarchy_first() (Arnaldo)
- support callchain percent limit (Andi)
- break TUI context menu cleanup (Arnaldo)
This time I implemented it for every output browser including TUI.
A screenshot on TUI looks like below:
For normal output:
$ perf report --tui
Samples: 3K of event 'cycles:pp', Event count (approx.): 1695979674
Overhead Command Shared Object Symbol
------------------------------------------------------------------------
- 7.57% swapper [kernel.vmlinux] [k] intel_idle
intel_idle
cpuidle_enter_state
cpuidle_enter
call_cpuidle
+ cpu_startup_entry
+ 1.16 firefox firefox [.] 0x00000000000019433
+ 0.97% firefox libpthread-2.22.so [.] pthread_mutex_lock
...
With hierarchy view,
$ perf report --tui --hierarchy
Samples: 3K of event 'cycles:pp', Event count (approx.): 1695979674
Overhead Command / Shared Object / Symbol
-------------------------------------------------------------------
+ 76.30% firefox
- 9.95% swapper
- 9.51% [kernel.vmlinux]
- 7.57 [k] intel_idle
intel_idle
cpuidle_enter_state
cpuidle_enter
call_cpuidle
+ cpu_startup_entry
+ 0.15% [k] __schedule
+ 0.12% [k] menu_select
...
+ 0.34% [sdhci]
+ 0.06% [e1000e]
...
+ 5.65% Xorg
+ 5.42% Socket Thread
...
As you can see, overhead of an upper level entry is the sum of
overhead of lower level entries. The entries are aligned by its order
of matching sort keys.
This is available from 'perf/hierarchy-v4' branch in my tree:
git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
Any comments are welcome, thanks!
Namhyung
Cc: Don Zickus <dzickus@xxxxxxxxxx>
Cc: Pekka Enberg <penberg@xxxxxxxxxx>
Cc: Moinuddin Quadri <moin18@xxxxxxxxx>
[1] https://lkml.org/lkml/2013/5/21/24
[2] http://lkml.iu.edu/hypermail/linux/kernel/1601.2/04245.html
Namhyung Kim (21):
perf callchain: Check return value of add_child()
perf callchain: Check return value of fill_node()
perf callchain: Add enum match_result for match_chain()
perf callchain: Check return value of split_add_child()
perf callchain: Check return value of append_chain_children()
perf hists: Return error from hists__collapse_resort()
perf report: Check error during report__collapse_hists()
perf hists: Basic support of hierarchical report view
perf hists: Resort hist entries with hierarchy
perf hists: Add helper functions for hierarchy mode
perf hists: Support filtering in hierarchy mode
perf ui/stdio: Implement hierarchy output mode
perf ui/stdio: Align column header for hierarchy output
perf hists browser: Count number of hierarchy entries
perf hists browser: Support collapsing/expanding whole entries in
hierarchy
perf hists browser: Implement hierarchy output
perf hists browser: Align column header in hierarchy mode
perf ui/gtk: Implement hierarchy output mode
perf report: Add --hierarchy option
perf hists: Support decaying in hierarchy mode
perf top: Add --hierarchy option
tools/perf/Documentation/perf-report.txt | 3 +
tools/perf/Documentation/perf-top.txt | 3 +
tools/perf/Documentation/tips.txt | 1 +
tools/perf/builtin-report.c | 31 +-
tools/perf/builtin-top.c | 15 +
tools/perf/ui/browsers/hists.c | 470 ++++++++++++++++++++++++++++---
tools/perf/ui/gtk/hists.c | 161 ++++++++++-
tools/perf/ui/hist.c | 14 +
tools/perf/ui/stdio/hist.c | 184 +++++++++++-
tools/perf/util/callchain.c | 102 +++++--
tools/perf/util/hist.c | 421 +++++++++++++++++++++++++--
tools/perf/util/hist.h | 14 +-
tools/perf/util/sort.c | 113 ++++++++
tools/perf/util/sort.h | 14 +-
tools/perf/util/symbol.h | 3 +-
15 files changed, 1444 insertions(+), 105 deletions(-)
--
2.6.4