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>
This commit is contained in:
Родитель
35ca01c117
Коммит
601897b54c
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче