mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
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:
parent
35ca01c117
commit
601897b54c
3 changed files with 28 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
||||||
e synthesize error events
|
e synthesize error events
|
||||||
d create a debug log
|
d create a debug log
|
||||||
g synthesize a call chain (use with i or x)
|
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
|
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
|
Also the call chain size (default 16, max. 1024) for instructions or
|
||||||
transactions events can be specified.
|
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_PERIOD 100000
|
||||||
#define PERF_ITRACE_DEFAULT_CALLCHAIN_SZ 16
|
#define PERF_ITRACE_DEFAULT_CALLCHAIN_SZ 16
|
||||||
#define PERF_ITRACE_MAX_CALLCHAIN_SZ 1024
|
#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)
|
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_type = PERF_ITRACE_DEFAULT_PERIOD_TYPE;
|
||||||
synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD;
|
synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD;
|
||||||
synth_opts->callchain_sz = PERF_ITRACE_DEFAULT_CALLCHAIN_SZ;
|
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;
|
synth_opts->callchain_sz = val;
|
||||||
}
|
}
|
||||||
break;
|
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 ' ':
|
||||||
case ',':
|
case ',':
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -63,7 +63,9 @@ enum itrace_period_type {
|
||||||
* @calls: limit branch samples to calls (can be combined with @returns)
|
* @calls: limit branch samples to calls (can be combined with @returns)
|
||||||
* @returns: limit branch samples to returns (can be combined with @calls)
|
* @returns: limit branch samples to returns (can be combined with @calls)
|
||||||
* @callchain: add callchain to 'instructions' events
|
* @callchain: add callchain to 'instructions' events
|
||||||
|
* @last_branch: add branch context to 'instruction' events
|
||||||
* @callchain_sz: maximum callchain size
|
* @callchain_sz: maximum callchain size
|
||||||
|
* @last_branch_sz: branch context size
|
||||||
* @period: 'instructions' events period
|
* @period: 'instructions' events period
|
||||||
* @period_type: 'instructions' events period type
|
* @period_type: 'instructions' events period type
|
||||||
*/
|
*/
|
||||||
|
@ -79,7 +81,9 @@ struct itrace_synth_opts {
|
||||||
bool calls;
|
bool calls;
|
||||||
bool returns;
|
bool returns;
|
||||||
bool callchain;
|
bool callchain;
|
||||||
|
bool last_branch;
|
||||||
unsigned int callchain_sz;
|
unsigned int callchain_sz;
|
||||||
|
unsigned int last_branch_sz;
|
||||||
unsigned long long period;
|
unsigned long long period;
|
||||||
enum itrace_period_type period_type;
|
enum itrace_period_type period_type;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue