perf auxtrace: Add optional error flags to the itrace 'e' option
Allow the 'e' option to be followed by flags which will affect what errors will or will not be reported. Each flag must be preceded by either '+' or '-'. The flags are: o overflow l trace data lost Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lore.kernel.org/lkml/20200710151104.15137-6-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
1e8f786944
commit
cb971438b7
@ -47,3 +47,9 @@
|
||||
--itrace=i0nss1000000
|
||||
|
||||
skips the first million instructions.
|
||||
|
||||
The 'e' option may be followed by flags which affect what errors will or
|
||||
will not be reported. Each flag must be preceded by either '+' or '-'.
|
||||
The flags are:
|
||||
o overflow
|
||||
l trace data lost
|
||||
|
@ -1349,6 +1349,47 @@ void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts,
|
||||
synth_opts->initial_skip = 0;
|
||||
}
|
||||
|
||||
static int get_flag(const char **ptr, unsigned int *flags)
|
||||
{
|
||||
while (1) {
|
||||
char c = **ptr;
|
||||
|
||||
if (c >= 'a' && c <= 'z') {
|
||||
*flags |= 1 << (c - 'a');
|
||||
++*ptr;
|
||||
return 0;
|
||||
} else if (c == ' ') {
|
||||
++*ptr;
|
||||
continue;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int get_flags(const char **ptr, unsigned int *plus_flags, unsigned int *minus_flags)
|
||||
{
|
||||
while (1) {
|
||||
switch (**ptr) {
|
||||
case '+':
|
||||
++*ptr;
|
||||
if (get_flag(ptr, plus_flags))
|
||||
return -1;
|
||||
break;
|
||||
case '-':
|
||||
++*ptr;
|
||||
if (get_flag(ptr, minus_flags))
|
||||
return -1;
|
||||
break;
|
||||
case ' ':
|
||||
++*ptr;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Please check tools/perf/Documentation/perf-script.txt for information
|
||||
* about the options parsed here, which is introduced after this cset,
|
||||
@ -1436,6 +1477,9 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
|
||||
break;
|
||||
case 'e':
|
||||
synth_opts->errors = true;
|
||||
if (get_flags(&p, &synth_opts->error_plus_flags,
|
||||
&synth_opts->error_minus_flags))
|
||||
goto out_err;
|
||||
break;
|
||||
case 'd':
|
||||
synth_opts->log = true;
|
||||
|
@ -55,6 +55,9 @@ enum itrace_period_type {
|
||||
PERF_ITRACE_PERIOD_NANOSECS,
|
||||
};
|
||||
|
||||
#define AUXTRACE_ERR_FLG_OVERFLOW (1 << ('o' - 'a'))
|
||||
#define AUXTRACE_ERR_FLG_DATA_LOST (1 << ('l' - 'a'))
|
||||
|
||||
/**
|
||||
* struct itrace_synth_opts - AUX area tracing synthesis options.
|
||||
* @set: indicates whether or not options have been set
|
||||
@ -91,6 +94,8 @@ enum itrace_period_type {
|
||||
* @cpu_bitmap: CPUs for which to synthesize events, or NULL for all
|
||||
* @ptime_range: time intervals to trace or NULL
|
||||
* @range_num: number of time intervals to trace
|
||||
* @error_plus_flags: flags to affect what errors are reported
|
||||
* @error_minus_flags: flags to affect what errors are reported
|
||||
*/
|
||||
struct itrace_synth_opts {
|
||||
bool set;
|
||||
@ -124,6 +129,8 @@ struct itrace_synth_opts {
|
||||
unsigned long *cpu_bitmap;
|
||||
struct perf_time_interval *ptime_range;
|
||||
int range_num;
|
||||
unsigned int error_plus_flags;
|
||||
unsigned int error_minus_flags;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -613,7 +620,10 @@ bool auxtrace__evsel_is_auxtrace(struct perf_session *session,
|
||||
" p: synthesize power events\n" \
|
||||
" o: synthesize other events recorded due to the use\n" \
|
||||
" of aux-output (refer to perf record)\n" \
|
||||
" e: synthesize error events\n" \
|
||||
" e[flags]: synthesize error events\n" \
|
||||
" each flag must be preceded by + or -\n" \
|
||||
" error flags are: o (overflow)\n" \
|
||||
" l (data lost)\n" \
|
||||
" d: create a debug log\n" \
|
||||
" f: synthesize first level cache events\n" \
|
||||
" m: synthesize last level cache events\n" \
|
||||
|
Loading…
Reference in New Issue
Block a user