lkml.org 
[lkml]   [2015]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf auxtrace: Add option to synthesize branch stacks on samples
    Commit-ID:  601897b54c7ed492a89b262dccd7c6f7faf12b30
    Gitweb: http://git.kernel.org/tip/601897b54c7ed492a89b262dccd7c6f7faf12b30
    Author: Adrian Hunter <adrian.hunter@intel.com>
    AuthorDate: Fri, 25 Sep 2015 16:15:39 +0300
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Mon, 28 Sep 2015 16:53:44 -0300

    perf auxtrace: Add option to synthesize branch stacks on samples

    Add AUX area tracing option 'l' to synthesize branch stacks on samples
    just like sample type PERF_SAMPLE_BRANCH_STACK. This is taken into use
    by Intel PT in a subsequent patch.

    Based-on-patch-by: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Link: http://lkml.kernel.org/r/1443186956-18718-9-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/Documentation/itrace.txt | 4 ++++
    tools/perf/util/auxtrace.c | 20 ++++++++++++++++++++
    tools/perf/util/auxtrace.h | 4 ++++
    3 files changed, 28 insertions(+)

    diff --git a/tools/perf/Documentation/itrace.txt b/tools/perf/Documentation/itrace.txt
    index 2ff9466..65453f4 100644
    --- a/tools/perf/Documentation/itrace.txt
    +++ b/tools/perf/Documentation/itrace.txt
    @@ -6,6 +6,7 @@
    e synthesize error events
    d create a debug log
    g synthesize a call chain (use with i or x)
    + l synthesize last branch entries (use with i or x)

    The default is all events i.e. the same as --itrace=ibxe

    @@ -20,3 +21,6 @@

    Also the call chain size (default 16, max. 1024) for instructions or
    transactions events can be specified.
    +
    + Also the number of last branch entries (default 64, max. 1024) for
    + instructions or transactions events can be specified.
    diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
    index c4993b2..7f10430 100644
    --- a/tools/perf/util/auxtrace.c
    +++ b/tools/perf/util/auxtrace.c
    @@ -926,6 +926,8 @@ s64 perf_event__process_auxtrace(struct perf_tool *tool,
    #define PERF_ITRACE_DEFAULT_PERIOD 100000
    #define PERF_ITRACE_DEFAULT_CALLCHAIN_SZ 16
    #define PERF_ITRACE_MAX_CALLCHAIN_SZ 1024
    +#define PERF_ITRACE_DEFAULT_LAST_BRANCH_SZ 64
    +#define PERF_ITRACE_MAX_LAST_BRANCH_SZ 1024

    void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts)
    {
    @@ -936,6 +938,7 @@ void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts)
    synth_opts->period_type = PERF_ITRACE_DEFAULT_PERIOD_TYPE;
    synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD;
    synth_opts->callchain_sz = PERF_ITRACE_DEFAULT_CALLCHAIN_SZ;
    + synth_opts->last_branch_sz = PERF_ITRACE_DEFAULT_LAST_BRANCH_SZ;
    }

    /*
    @@ -1043,6 +1046,23 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
    synth_opts->callchain_sz = val;
    }
    break;
    + case 'l':
    + synth_opts->last_branch = true;
    + synth_opts->last_branch_sz =
    + PERF_ITRACE_DEFAULT_LAST_BRANCH_SZ;
    + while (*p == ' ' || *p == ',')
    + p += 1;
    + if (isdigit(*p)) {
    + unsigned int val;
    +
    + val = strtoul(p, &endptr, 10);
    + p = endptr;
    + if (!val ||
    + val > PERF_ITRACE_MAX_LAST_BRANCH_SZ)
    + goto out_err;
    + synth_opts->last_branch_sz = val;
    + }
    + break;
    case ' ':
    case ',':
    break;
    diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
    index bf72b77..b86f90db 100644
    --- a/tools/perf/util/auxtrace.h
    +++ b/tools/perf/util/auxtrace.h
    @@ -63,7 +63,9 @@ enum itrace_period_type {
    * @calls: limit branch samples to calls (can be combined with @returns)
    * @returns: limit branch samples to returns (can be combined with @calls)
    * @callchain: add callchain to 'instructions' events
    + * @last_branch: add branch context to 'instruction' events
    * @callchain_sz: maximum callchain size
    + * @last_branch_sz: branch context size
    * @period: 'instructions' events period
    * @period_type: 'instructions' events period type
    */
    @@ -79,7 +81,9 @@ struct itrace_synth_opts {
    bool calls;
    bool returns;
    bool callchain;
    + bool last_branch;
    unsigned int callchain_sz;
    + unsigned int last_branch_sz;
    unsigned long long period;
    enum itrace_period_type period_type;
    };

    \
     
     \ /
      Last update: 2015-09-29 11:01    [W:4.970 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site