diff options
author | Adrian Hunter <adrian.hunter@intel.com> | 2020-07-10 18:11:01 +0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2020-08-06 08:23:19 -0300 |
commit | d4575f5fce71b47431a98096a9f74b7492854633 (patch) | |
tree | 0962d92875343ccbc93995219cac6db6e740cb62 /tools/perf/util | |
parent | 8b83fccdd2fc91dfd6fc7ef6a804c1426f7a6216 (diff) | |
download | linux-stable-d4575f5fce71b47431a98096a9f74b7492854633.tar.gz linux-stable-d4575f5fce71b47431a98096a9f74b7492854633.tar.bz2 linux-stable-d4575f5fce71b47431a98096a9f74b7492854633.zip |
perf intel-pt: Time filter logged perf events
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>
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/intel-pt.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index 5f70f009d616..0715d6e23b2f 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -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, @@ -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); |