Messages in this thread Patch in this message | | | Date | Tue, 13 Aug 2019 11:14:53 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH v6 7/7] perf intel-pt: Add brief documentation for PEBS via Intel PT |
| |
Em Tue, Aug 13, 2019 at 05:05:46PM +0300, Alexander Shishkin escreveu: > Arnaldo Carvalho de Melo <acme@redhat.com> writes: > > > Em Tue, Aug 06, 2019 at 11:46:06AM +0300, Alexander Shishkin escreveu: > >> From: Adrian Hunter <adrian.hunter@intel.com> > >> > >> Document how to select PEBS via Intel PT and how to display synthesized > >> PEBS samples. > >> > >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > >> Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> > >> --- > >> tools/perf/Documentation/intel-pt.txt | 15 +++++++++++++++ > >> 1 file changed, 15 insertions(+) > >> > >> diff --git a/tools/perf/Documentation/intel-pt.txt b/tools/perf/Documentation/intel-pt.txt > >> index 50c5b60101bd..8dc513b6607b 100644 > >> --- a/tools/perf/Documentation/intel-pt.txt > >> +++ b/tools/perf/Documentation/intel-pt.txt > >> @@ -919,3 +919,18 @@ amended to take the number of elements as a parameter. > >> > >> Note there is currently no advantage to using Intel PT instead of LBR, but > >> that may change in the future if greater use is made of the data. > >> + > >> + > >> +PEBS via Intel PT > >> +================= > >> + > >> +Some hardware has the feature to redirect PEBS records to the Intel PT trace. > >> +Recording is selected by using the aux-output config term e.g. > >> + > >> + perf record -c 10000 -e cycles/aux-output/ppp -e intel_pt/branch=0/ uname > >> + > >> +Note that currently, software only supports redirecting at most one PEBS event. > > > > So, with these patches, but not the kernel ones I end up getting: > > > > [root@quaco ~]# perf record -c 10000 -e cycles/aux-output/ppp -e intel_pt/branch=0/ uname > > FWIW, the correct command line for that would have the two events > grouped and intel_pt be the group leader.
I've just blindly followed the provided documentation :)
So you say I should have tried this instead:
# perf record -c 10000 -e '{intel_pt/branch=0/,cycles/aux-output/ppp}' uname Error: The 'aux_output' feature is not supported, update the kernel. #
Or with leader sampling?
# perf record -c 10000 -e '{intel_pt/branch=0/,cycles/aux-output/ppp}:S' uname Error: The 'aux_output' feature is not supported, update the kernel. #
This is with the patch at the end of this message and without the kernel counterpart.
- Arnaldo
commit 58c5a9772d88f5dead1e561f6323f9f355625caa Author: Arnaldo Carvalho de Melo <acme@redhat.com> Date: Tue Aug 13 11:06:38 2019 -0300
perf evsel: Provide meaningful warning when trying to use 'aux_output' on older kernels Just like we do with the 'write_backwards' feature: Before: # perf record -c 10000 -e cycles/aux-output/ppp -e intel_pt/branch=0/ uname Error: The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (cycles/aux-output/ppp). /bin/dmesg | grep -i perf may provide additional information. # After: # perf record -c 10000 -e cycles/aux-output/ppp -e intel_pt/branch=0/ uname Error: The 'aux_output' feature is not supported, update the kernel. # Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lkml.kernel.org/n/tip-wgjsjroe1e150c0metgwmqwd@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 6f08aea4f108..0b3b5af33954 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1738,7 +1738,8 @@ int evsel__open(struct evsel *evsel, struct perf_cpu_map *cpus, int pid = -1, err; enum { NO_CHANGE, SET_TO_MAX, INCREASED_MAX } set_rlimit = NO_CHANGE; - if (perf_missing_features.write_backward && evsel->core.attr.write_backward) + if ((perf_missing_features.write_backward && evsel->core.attr.write_backward) || + (perf_missing_features.aux_output && evsel->core.attr.aux_output)) return -EINVAL; if (cpus == NULL) { @@ -1912,7 +1913,11 @@ int evsel__open(struct evsel *evsel, struct perf_cpu_map *cpus, * Must probe features in the order they were added to the * perf_event_attr interface. */ - if (!perf_missing_features.bpf_event && evsel->core.attr.bpf_event) { + if (!perf_missing_features.aux_output && evsel->core.attr.aux_output) { + perf_missing_features.aux_output = true; + pr_debug2("Kernel has no attr.aux_output support, bailing out\n"); + goto out_close; + } else if (!perf_missing_features.bpf_event && evsel->core.attr.bpf_event) { perf_missing_features.bpf_event = true; pr_debug2("switching off bpf_event\n"); goto fallback_missing_features; @@ -2926,6 +2931,8 @@ int perf_evsel__open_strerror(struct evsel *evsel, struct target *target, return scnprintf(msg, size, "clockid feature not supported."); if (perf_missing_features.clockid_wrong) return scnprintf(msg, size, "wrong clockid (%d).", clockid); + if (perf_missing_features.aux_output) + return scnprintf(msg, size, "The 'aux_output' feature is not supported, update the kernel."); break; default: break; diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 8a316dd54cd0..9cd6e3ae479a 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -184,6 +184,7 @@ struct perf_missing_features { bool group_read; bool ksymbol; bool bpf_event; + bool aux_output; }; extern struct perf_missing_features perf_missing_features;
| |