lkml.org 
[lkml]   [2018]   [Sep]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 7/8] tools, perf, script: Add --call-trace and --call-ret-trace
    Date
    From: Andi Kleen <ak@linux.intel.com>

    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

    v2: Print errors, power, ptwrite too
    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    ---
    tools/perf/Documentation/perf-script.txt | 7 +++++++
    tools/perf/builtin-script.c | 24 ++++++++++++++++++++++++
    2 files changed, 31 insertions(+)

    diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
    index 04a57e0fb3a6..29eb3c3eb93e 100644
    --- a/tools/perf/Documentation/perf-script.txt
    +++ b/tools/perf/Documentation/perf-script.txt
    @@ -387,6 +387,13 @@ include::itrace.txt[]
    Show instruction stream for intel_pt traces. Requires installing the
    xed disassembler.

    +--call-trace::
    + Show call stream for intel_pt traces. The CPUs are interleaved, but
    + can be filtered with -C.
    +
    +--call-ret-trace::
    + Show call and return stream for intel_pt traces.
    +
    SEE ALSO
    --------
    linkperf:perf-record[1], linkperf:perf-script-perl[1],
    diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
    index 99f69561e1f8..87ec7cc798ea 100644
    --- a/tools/perf/builtin-script.c
    +++ b/tools/perf/builtin-script.c
    @@ -3094,6 +3094,26 @@ static int parse_insn_trace(const struct option *opt __maybe_unused,
    return 0;
    }

    +static int parse_call_trace(const struct option *opt __maybe_unused,
    + const char *str __maybe_unused,
    + int unset __maybe_unused)
    +{
    + parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent", 0);
    + itrace_parse_synth_opts(opt, "cewp", 0);
    + nanosecs = true;
    + return 0;
    +}
    +
    +static int parse_callret_trace(const struct option *opt __maybe_unused,
    + const char *str __maybe_unused,
    + int unset __maybe_unused)
    +{
    + parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent,+flags", 0);
    + itrace_parse_synth_opts(opt, "crewp", 0);
    + nanosecs = true;
    + return 0;
    +}
    +
    int cmd_script(int argc, const char **argv)
    {
    bool show_full_info = false;
    @@ -3183,6 +3203,10 @@ int cmd_script(int argc, const char **argv)
    "only consider these symbols"),
    OPT_CALLBACK_OPTARG(0, "insn-trace", &itrace_synth_opts, NULL, NULL,
    "Decode instructions from itrace", parse_insn_trace),
    + OPT_CALLBACK_OPTARG(0, "call-trace", &itrace_synth_opts, NULL, NULL,
    + "Decode calls from from itrace", parse_call_trace),
    + OPT_CALLBACK_OPTARG(0, "call-ret-trace", &itrace_synth_opts, NULL, NULL,
    + "Decode calls and returns from itrace", parse_callret_trace),
    OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]",
    "Stop display of callgraph at these symbols"),
    OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"),
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-09-14 05:13    [W:2.382 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site