Skip to content

Commit d1b1552

Browse files
Andi Kleenacmel
authored andcommitted
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>
1 parent 4eb0681 commit d1b1552

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

tools/perf/Documentation/perf-script.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,13 @@ include::itrace.txt[]
390390
--xed::
391391
Run xed disassembler on output. Requires installing the xed disassembler.
392392

393+
--call-trace::
394+
Show call stream for intel_pt traces. The CPUs are interleaved, but
395+
can be filtered with -C.
396+
397+
--call-ret-trace::
398+
Show call and return stream for intel_pt traces.
399+
393400
SEE ALSO
394401
--------
395402
linkperf:perf-record[1], linkperf:perf-script-perl[1],

tools/perf/builtin-script.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3122,6 +3122,26 @@ static int parse_xed(const struct option *opt __maybe_unused,
31223122
return 0;
31233123
}
31243124

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+
31253145
int cmd_script(int argc, const char **argv)
31263146
{
31273147
bool show_full_info = false;
@@ -3213,6 +3233,10 @@ int cmd_script(int argc, const char **argv)
32133233
"Decode instructions from itrace", parse_insn_trace),
32143234
OPT_CALLBACK_OPTARG(0, "xed", NULL, NULL, NULL,
32153235
"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),
32163240
OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]",
32173241
"Stop display of callgraph at these symbols"),
32183242
OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"),

0 commit comments

Comments
 (0)