diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-07-05 01:39:21 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-07-05 04:30:23 -0400 |
commit | 805d127d62472f17c7d79baa001a7651afe2fa47 (patch) | |
tree | 59dfdd2337190e168a007ba65cc25c7e5d8c0fda /tools/perf/util/callchain.h | |
parent | e05b876c222178bc6abcfa9f23d8311731691046 (diff) |
perf report: Add "Fractal" mode output - support callchains with relative overhead rate
The current callchain displays the overhead rates as absolute:
relative to the total overhead.
This patch provides relative overhead percentage, in which each
branch of the callchain tree is a independant instrumentated object.
This provides a 'fractal' view of the call-chain profile: each
sub-graph looks like a profile in itself - relative to its parent.
You can produce such output by using the "fractal" mode
that you can abbreviate via f, fr, fra, frac, etc...
./perf report -s sym -c fractal
Example:
8.46% [k] copy_user_generic_string
|
|--52.01%-- generic_file_aio_read
| do_sync_read
| vfs_read
| |
| |--97.20%-- sys_pread64
| | system_call_fastpath
| | pread64
| |
| --2.81%-- sys_read
| system_call_fastpath
| __read
|
|--39.85%-- generic_file_buffered_write
| __generic_file_aio_write_nolock
| generic_file_aio_write
| do_sync_write
| reiserfs_file_write
| vfs_write
| |
| |--97.05%-- sys_pwrite64
| | system_call_fastpath
| | __pwrite64
| |
| --2.95%-- sys_write
| system_call_fastpath
| __write_nocancel
[...]
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: Jens Axboe <jens.axboe@oracle.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <1246772361-9960-5-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 | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h index f3e4776e7430..7812122bea1d 100644 --- a/tools/perf/util/callchain.h +++ b/tools/perf/util/callchain.h | |||
@@ -7,8 +7,9 @@ | |||
7 | #include "symbol.h" | 7 | #include "symbol.h" |
8 | 8 | ||
9 | enum chain_mode { | 9 | enum chain_mode { |
10 | FLAT, | 10 | CHAIN_FLAT, |
11 | GRAPH | 11 | CHAIN_GRAPH_ABS, |
12 | CHAIN_GRAPH_REL | ||
12 | }; | 13 | }; |
13 | 14 | ||
14 | struct callchain_node { | 15 | struct callchain_node { |
@@ -23,6 +24,17 @@ struct callchain_node { | |||
23 | u64 cumul_hit; /* hit + hits of children */ | 24 | u64 cumul_hit; /* hit + hits of children */ |
24 | }; | 25 | }; |
25 | 26 | ||
27 | struct callchain_param; | ||
28 | |||
29 | typedef void (*sort_chain_func_t)(struct rb_root *, struct callchain_node *, | ||
30 | u64, struct callchain_param *); | ||
31 | |||
32 | struct callchain_param { | ||
33 | enum chain_mode mode; | ||
34 | double min_percent; | ||
35 | sort_chain_func_t sort; | ||
36 | }; | ||
37 | |||
26 | struct callchain_list { | 38 | struct callchain_list { |
27 | u64 ip; | 39 | u64 ip; |
28 | struct symbol *sym; | 40 | struct symbol *sym; |
@@ -36,10 +48,7 @@ static inline void callchain_init(struct callchain_node *node) | |||
36 | INIT_LIST_HEAD(&node->val); | 48 | INIT_LIST_HEAD(&node->val); |
37 | } | 49 | } |
38 | 50 | ||
51 | int register_callchain_param(struct callchain_param *param); | ||
39 | void append_chain(struct callchain_node *root, struct ip_callchain *chain, | 52 | void append_chain(struct callchain_node *root, struct ip_callchain *chain, |
40 | struct symbol **syms); | 53 | struct symbol **syms); |
41 | void sort_chain_flat(struct rb_root *rb_root, struct callchain_node *node, | ||
42 | u64 min_hit); | ||
43 | void sort_chain_graph(struct rb_root *rb_root, struct callchain_node *node, | ||
44 | u64 min_hit); | ||
45 | #endif | 54 | #endif |