[PATCH v6 4/5] tools, perf, script: Implement --graph-function

2018-09-20 Thread Andi Kleen
From: Andi Kleen 

Add a ftrace style --graph-function argument to perf script that allows
to print itrace function calls only below a given function. This
makes it easier to find the code of interest in a large trace.

% perf record -e intel_pt//k -a sleep 1
% perf script --graph-function group_sched_in --call-trace
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
group_sched_in
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
event_sched_in.isra.107
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_event_set_state.part.71
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_event_update_time
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_pmu_disable
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_log_itrace_start
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_event_update_userpage
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
calc_timer_values
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
sched_clock_cpu
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
arch_perf_update_userpage
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__fentry__
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
using_native_sched_clock
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
sched_clock_stable
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_pmu_enable
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
group_sched_in
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
event_sched_in.isra.107
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_event_set_state.part.71
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_event_update_time
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_pmu_disable
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_log_itrace_start
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_event_update_userpage
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
calc_timer_values
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
sched_clock_cpu
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
arch_perf_update_userpage
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__fentry__
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
using_native_sched_clock
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
sched_clock_stable

v2: Remove debug printout
Signed-off-by: Andi Kleen 
---
 tools/perf/Documentation/perf-script.txt |  4 +
 tools/perf/builtin-script.c  | 96 +++-
 tools/perf/util/symbol.h |  3 +-
 tools/perf/util/thread.h |  2 +
 4 files changed, 86 insertions(+), 19 deletions(-)

diff --git a/tools/perf/Documentation/perf-script.txt 
b/tools/perf/Documentation/perf-script.txt
index 805baabd238e..a2b37ce48094 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -397,6 +397,10 @@ include::itrace.txt[]
 --call-ret-trace::
Show call and return stream for intel_pt traces.
 
+--graph-function::
+   For itrace only show specified functions and their callees for
+   itrace. Multiple functions can be separated by comma.
+
 SEE ALSO
 
 linkperf:perf-record[1], linkperf:perf-script-perl[1],
diff --git 

[PATCH v6 4/5] tools, perf, script: Implement --graph-function

2018-09-20 Thread Andi Kleen
From: Andi Kleen 

Add a ftrace style --graph-function argument to perf script that allows
to print itrace function calls only below a given function. This
makes it easier to find the code of interest in a large trace.

% perf record -e intel_pt//k -a sleep 1
% perf script --graph-function group_sched_in --call-trace
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
group_sched_in
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
event_sched_in.isra.107
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_event_set_state.part.71
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_event_update_time
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_pmu_disable
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_log_itrace_start
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_event_update_userpage
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
calc_timer_values
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
sched_clock_cpu
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
arch_perf_update_userpage
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__fentry__
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
using_native_sched_clock
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
sched_clock_stable
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
perf_pmu_enable
perf   900 [000] 194167.205652203: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
group_sched_in
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
event_sched_in.isra.107
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_event_set_state.part.71
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_event_update_time
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_pmu_disable
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_log_itrace_start
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
perf_event_update_userpage
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
calc_timer_values
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
sched_clock_cpu
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__x86_indirect_thunk_rax
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
arch_perf_update_userpage
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
__fentry__
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
using_native_sched_clock
 swapper 0 [001] 194167.205660693: ([kernel.kallsyms])  
sched_clock_stable

v2: Remove debug printout
Signed-off-by: Andi Kleen 
---
 tools/perf/Documentation/perf-script.txt |  4 +
 tools/perf/builtin-script.c  | 96 +++-
 tools/perf/util/symbol.h |  3 +-
 tools/perf/util/thread.h |  2 +
 4 files changed, 86 insertions(+), 19 deletions(-)

diff --git a/tools/perf/Documentation/perf-script.txt 
b/tools/perf/Documentation/perf-script.txt
index 805baabd238e..a2b37ce48094 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -397,6 +397,10 @@ include::itrace.txt[]
 --call-ret-trace::
Show call and return stream for intel_pt traces.
 
+--graph-function::
+   For itrace only show specified functions and their callees for
+   itrace. Multiple functions can be separated by comma.
+
 SEE ALSO
 
 linkperf:perf-record[1], linkperf:perf-script-perl[1],
diff --git