diff options
author | Andi Kleen <ak@linux.intel.com> | 2018-09-20 14:05:38 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-10-24 14:29:55 -0400 |
commit | d1b1552e15d41297abcaf3812378e3391d44fa6b (patch) | |
tree | b311e7121df9c935a4de6290b08564cdfeb3a39b /tools/perf/builtin-script.c | |
parent | 4eb068157121939f4bc16256a37bcd88f5554123 (diff) |
tools script: Add --call-trace and --call-ret-trace
Add short cut options to print PT call trace and call-ret-trace, for
calls and call and returns. Roughly corresponds to ftrace function
tracer and function graph tracer.
Just makes these common use cases nicer to use.
% perf record -a -e intel_pt// sleep 1
% perf script --call-trace
perf 900 [000] 194167.205652203: ([kernel.kallsyms]) perf_pmu_enable
perf 900 [000] 194167.205652203: ([kernel.kallsyms]) __x86_indirect_thunk_rax
perf 900 [000] 194167.205652203: ([kernel.kallsyms]) event_filter_match
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 script --call-ret-trace
perf 900 [000] 194167.205652203: tr strt ([unknown]) pt_config
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) pt_config
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) pt_event_add
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) perf_pmu_enable
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) perf_pmu_nop_void
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) event_sched_in.isra.107
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) __x86_indirect_thunk_rax
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) perf_pmu_nop_int
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) group_sched_in
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) event_filter_match
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) event_filter_match
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) group_sched_in
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) __x86_indirect_thunk_rax
perf 900 [000] 194167.205652203: return ([kernel.kallsyms]) perf_pmu_nop_txn
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) event_sched_in.isra.107
perf 900 [000] 194167.205652203: call ([kernel.kallsyms]) perf_event_set_state.part.71
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Leo Yan <leo.yan@linaro.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kim Phillips <kim.phillips@arm.com>
Link: http://lkml.kernel.org/r/20180920180540.14039-4-andi@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r-- | tools/perf/builtin-script.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 6099c722a679..566e1450898a 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -3122,6 +3122,26 @@ static int parse_xed(const struct option *opt __maybe_unused, | |||
3122 | return 0; | 3122 | return 0; |
3123 | } | 3123 | } |
3124 | 3124 | ||
3125 | static int parse_call_trace(const struct option *opt __maybe_unused, | ||
3126 | const char *str __maybe_unused, | ||
3127 | int unset __maybe_unused) | ||
3128 | { | ||
3129 | parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent", 0); | ||
3130 | itrace_parse_synth_opts(opt, "cewp", 0); | ||
3131 | nanosecs = true; | ||
3132 | return 0; | ||
3133 | } | ||
3134 | |||
3135 | static int parse_callret_trace(const struct option *opt __maybe_unused, | ||
3136 | const char *str __maybe_unused, | ||
3137 | int unset __maybe_unused) | ||
3138 | { | ||
3139 | parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent,+flags", 0); | ||
3140 | itrace_parse_synth_opts(opt, "crewp", 0); | ||
3141 | nanosecs = true; | ||
3142 | return 0; | ||
3143 | } | ||
3144 | |||
3125 | int cmd_script(int argc, const char **argv) | 3145 | int cmd_script(int argc, const char **argv) |
3126 | { | 3146 | { |
3127 | bool show_full_info = false; | 3147 | bool show_full_info = false; |
@@ -3213,6 +3233,10 @@ int cmd_script(int argc, const char **argv) | |||
3213 | "Decode instructions from itrace", parse_insn_trace), | 3233 | "Decode instructions from itrace", parse_insn_trace), |
3214 | OPT_CALLBACK_OPTARG(0, "xed", NULL, NULL, NULL, | 3234 | OPT_CALLBACK_OPTARG(0, "xed", NULL, NULL, NULL, |
3215 | "Run xed disassembler on output", parse_xed), | 3235 | "Run xed disassembler on output", parse_xed), |
3236 | OPT_CALLBACK_OPTARG(0, "call-trace", &itrace_synth_opts, NULL, NULL, | ||
3237 | "Decode calls from from itrace", parse_call_trace), | ||
3238 | OPT_CALLBACK_OPTARG(0, "call-ret-trace", &itrace_synth_opts, NULL, NULL, | ||
3239 | "Decode calls and returns from itrace", parse_callret_trace), | ||
3216 | OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]", | 3240 | OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]", |
3217 | "Stop display of callgraph at these symbols"), | 3241 | "Stop display of callgraph at these symbols"), |
3218 | OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"), | 3242 | OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"), |