diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-07-02 11:58:21 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-07-02 14:47:15 -0400 |
commit | 4eb3e4788b8a5e220a0aeb590f88c28850726ebe (patch) | |
tree | 537392177078684b87197d358cf2104e90ec6d66 /tools/perf/util/callchain.h | |
parent | 5a4b181721375700124513cdd9f97056e1c66675 (diff) |
perf report: Add support for callchain graph output
Currently, the printing of callchains is done in a single
vertical level, this is the "flat" mode:
8.25% [k] copy_user_generic_string
4.19%
copy_user_generic_string
generic_file_aio_read
do_sync_read
vfs_read
sys_pread64
system_call_fastpath
pread64
This patch introduces a new "graph" mode which provides a
hierarchical output of factorized paths recursively sorted:
8.25% [k] copy_user_generic_string
|
|--4.31%-- generic_file_aio_read
| do_sync_read
| vfs_read
| |
| |--4.19%-- sys_pread64
| | system_call_fastpath
| | pread64
| |
| --0.12%-- sys_read
| system_call_fastpath
| __read
|
|--3.24%-- generic_file_buffered_write
| __generic_file_aio_write_nolock
| generic_file_aio_write
| do_sync_write
| reiserfs_file_write
| vfs_write
| |
| |--3.14%-- sys_pwrite64
| | system_call_fastpath
| | __pwrite64
| |
| --0.10%-- sys_write
[...]
The command line has then changed.
By providing the -c option, the callchain will output in the
flat mode by default.
But you can override it:
perf report -c graph
or
perf report -c flat
You can also pass the abreviated mode:
perf report -c g
or
perf report -c gra
will both make use of the graph mode.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Anton Blanchard <anton@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <1246550301-8954-3-git-send-email-fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/callchain.h')
-rw-r--r-- | tools/perf/util/callchain.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h index e9bd5e882f38..dfa56008d9ad 100644 --- a/tools/perf/util/callchain.h +++ b/tools/perf/util/callchain.h | |||
@@ -6,15 +6,21 @@ | |||
6 | #include <linux/rbtree.h> | 6 | #include <linux/rbtree.h> |
7 | #include "symbol.h" | 7 | #include "symbol.h" |
8 | 8 | ||
9 | enum chain_mode { | ||
10 | FLAT, | ||
11 | GRAPH | ||
12 | }; | ||
9 | 13 | ||
10 | struct callchain_node { | 14 | struct callchain_node { |
11 | struct callchain_node *parent; | 15 | struct callchain_node *parent; |
12 | struct list_head brothers; | 16 | struct list_head brothers; |
13 | struct list_head children; | 17 | struct list_head children; |
14 | struct list_head val; | 18 | struct list_head val; |
15 | struct rb_node rb_node; | 19 | struct rb_node rb_node; /* to sort nodes in an rbtree */ |
20 | struct rb_root rb_root; /* sorted tree of children */ | ||
16 | unsigned int val_nr; | 21 | unsigned int val_nr; |
17 | u64 hit; | 22 | u64 hit; |
23 | u64 cumul_hit; /* hit + hits of children */ | ||
18 | }; | 24 | }; |
19 | 25 | ||
20 | struct callchain_list { | 26 | struct callchain_list { |
@@ -32,5 +38,6 @@ static inline void callchain_init(struct callchain_node *node) | |||
32 | 38 | ||
33 | void append_chain(struct callchain_node *root, struct ip_callchain *chain, | 39 | void append_chain(struct callchain_node *root, struct ip_callchain *chain, |
34 | struct symbol **syms); | 40 | struct symbol **syms); |
35 | void sort_chain_to_rbtree(struct rb_root *rb_root, struct callchain_node *node); | 41 | void sort_chain_flat(struct rb_root *rb_root, struct callchain_node *node); |
42 | void sort_chain_graph(struct rb_root *rb_root, struct callchain_node *node); | ||
36 | #endif | 43 | #endif |