Commit e1791347 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

perf auxtrace: Fix 'instructions' period of zero

Instruction tracing options (i.e. --itrace) include an option for
sampling instructions at an arbitrary period. e.g.

	--itrace=i10us

means make an 'instructions' sample for every 10us of trace.

Currently the logic does not distinguish between a period of
zero and no period being specified at all, so it gets treated
as the default period which is 100000.  That doesn't really
make sense.

Fix it so that zero period is accepted and treated as meaning
"as often as possible".

In the case of Intel PT that is the same as a period of 1 and
a unit of 'instructions' (i.e. --itrace=i1i).
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1443186956-18718-2-git-send-email-adrian.hunter@intel.com
[ Add a few lines describing this in the Documentation/intel-pt.txt file ]
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 7c422f55
...@@ -707,6 +707,11 @@ on the sample is *not* adjusted and reflects the last known value of TSC. ...@@ -707,6 +707,11 @@ on the sample is *not* adjusted and reflects the last known value of TSC.
For Intel PT, the default period is 100us. For Intel PT, the default period is 100us.
Setting it to a zero period means "as often as possible".
In the case of Intel PT that is the same as a period of 1 and a unit of
'instructions' (i.e. --itrace=i1i).
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. e.g. transactions events can be specified. e.g.
......
...@@ -950,6 +950,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str, ...@@ -950,6 +950,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
const char *p; const char *p;
char *endptr; char *endptr;
bool period_type_set = false; bool period_type_set = false;
bool period_set = false;
synth_opts->set = true; synth_opts->set = true;
...@@ -971,6 +972,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str, ...@@ -971,6 +972,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
p += 1; p += 1;
if (isdigit(*p)) { if (isdigit(*p)) {
synth_opts->period = strtoull(p, &endptr, 10); synth_opts->period = strtoull(p, &endptr, 10);
period_set = true;
p = endptr; p = endptr;
while (*p == ' ' || *p == ',') while (*p == ' ' || *p == ',')
p += 1; p += 1;
...@@ -1053,7 +1055,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str, ...@@ -1053,7 +1055,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
if (!period_type_set) if (!period_type_set)
synth_opts->period_type = synth_opts->period_type =
PERF_ITRACE_DEFAULT_PERIOD_TYPE; PERF_ITRACE_DEFAULT_PERIOD_TYPE;
if (!synth_opts->period) if (!period_set)
synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD; synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD;
} }
......
...@@ -720,7 +720,7 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt, ...@@ -720,7 +720,7 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt,
if (!params.period) { if (!params.period) {
params.period_type = INTEL_PT_PERIOD_INSTRUCTIONS; params.period_type = INTEL_PT_PERIOD_INSTRUCTIONS;
params.period = 1000; params.period = 1;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment