Skip to content

Commit

Permalink
perf intel-pt: Time filter logged perf events
Browse files Browse the repository at this point in the history
Change the debug logging (when used with the --time option) to time
filter logged perf events, but allow that to be overridden by using
"d+a" instead of plain "d".

That can reduce the size of the log file.

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-10-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Adrian Hunter authored and Arnaldo Carvalho de Melo committed Aug 6, 2020
1 parent 8b83fcc commit d4575f5
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
3 changes: 3 additions & 0 deletions tools/perf/Documentation/perf-intel-pt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,9 @@ and that the resulting file may be very large. The "d" option may be followed
by flags which affect what debug messages will or will not be logged. Each flag
must be preceded by either '+' or '-'. The flags support by Intel PT are:
-a Suppress logging of perf events
+a Log all perf events
By default, logged perf events are filtered by any specified time ranges, but
flag +a overrides that.

In addition, the period of the "instructions" event can be specified. e.g.

Expand Down
19 changes: 16 additions & 3 deletions tools/perf/util/intel-pt.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,9 +249,22 @@ static void intel_pt_dump_sample(struct perf_session *session,
intel_pt_dump(pt, sample->aux_sample.data, sample->aux_sample.size);
}

static bool intel_pt_log_events(struct intel_pt *pt)
static bool intel_pt_log_events(struct intel_pt *pt, u64 tm)
{
return !(pt->synth_opts.log_minus_flags & AUXTRACE_LOG_FLG_ALL_PERF_EVTS);
struct perf_time_interval *range = pt->synth_opts.ptime_range;
int n = pt->synth_opts.range_num;

if (pt->synth_opts.log_plus_flags & AUXTRACE_LOG_FLG_ALL_PERF_EVTS)
return true;

if (pt->synth_opts.log_minus_flags & AUXTRACE_LOG_FLG_ALL_PERF_EVTS)
return false;

/* perf_time__ranges_skip_sample does not work if time is zero */
if (!tm)
tm = 1;

return !n || !perf_time__ranges_skip_sample(range, n, tm);
}

static int intel_pt_do_fix_overlap(struct intel_pt *pt, struct auxtrace_buffer *a,
Expand Down Expand Up @@ -2747,7 +2760,7 @@ static int intel_pt_process_event(struct perf_session *session,
if (!err && event->header.type == PERF_RECORD_TEXT_POKE)
err = intel_pt_text_poke(pt, event);

if (intel_pt_enable_logging && intel_pt_log_events(pt)) {
if (intel_pt_enable_logging && intel_pt_log_events(pt, sample->time)) {
intel_pt_log("event %u: cpu %d time %"PRIu64" tsc %#"PRIx64" ",
event->header.type, sample->cpu, sample->time, timestamp);
intel_pt_log_event(event);
Expand Down

0 comments on commit d4575f5

Please sign in to comment.