Messages in this thread | | | From | Alexander Shishkin <> | Subject | [PATCH v2 0/4] perf: Add AUX data sampling | Date | Tue, 22 Oct 2019 12:58:08 +0300 |
| |
Hi Peter,
Here's a new version of the AUX sampling. Since the previous one [3], it addresses the issues of NMI-safety and sampling hardware events. The former is addressed by adding a new PMU callback, the latter by making use of grouping. It also depends on the AUX output stop fix [4] to work correctly. I decided to post them separately, because [4] is also a candidate for perf/urgent.
This series introduces AUX data sampling for perf events, which in case of our instruction/branch tracing PMUs like Intel PT, BTS, CS ETM means execution flow history leading up to a perf event's overflow.
In case of Intel PT, this can be used as an alternative to LBR, with virtually as many as you like branches per sample. It doesn't support some of the LBR features (branch prediction indication, basic block level timing, etc [1]) and it can't be exposed as BRANCH_STACK, because that would require decoding PT stream in kernel space, which is not practical. Instead, we deliver the PT data to userspace as is, for offline processing. The PT decoder already supports presenting PT as virtual LBR.
AUX sampling is different from the snapshot mode in that it doesn't require instrumentation (for when to take a snapshot) and is better for generic data collection, when you don't yet know what you are looking for. It's also useful for automated data collection, for example, for feedback-driven compiler optimizaitions.
It's also different from the "full trace mode" in that it produces much less data and, consequently, takes up less I/O bandwidth and storage space, and takes less time to decode.
The bulk of code is in 1/4, which adds the user interface bits and the code to measure and copy out AUX data. 3/4 adds PT side support for sampling. 4/4 is not strictly related, but makes an improvement to the PT's snapshot mode by implementing a simpler buffer management that would also benefit the sampling.
The tooling support is ready, although I'm not including it here to save the bandwidth. Adrian or I will post itseparately. Meanwhile, it can be found here [2].
[1] https://marc.info/?l=linux-kernel&m=147467007714928&w=2 [2] https://git.kernel.org/cgit/linux/kernel/git/ash/linux.git/log/?h=perf-aux-sampling [3] https://marc.info/?l=linux-kernel&m=152878999928771 [4] https://marc.info/?l=linux-kernel&m=157172999231707
Alexander Shishkin (4): perf: Allow using AUX data in perf samples perf/x86/intel/pt: Factor out starting the trace perf/x86/intel/pt: Add sampling support perf/x86/intel/pt: Opportunistically use single range output mode
arch/x86/events/intel/pt.c | 192 ++++++++++++++++++++++++++------ arch/x86/events/intel/pt.h | 2 + include/linux/perf_event.h | 20 ++++ include/uapi/linux/perf_event.h | 7 +- kernel/events/core.c | 159 +++++++++++++++++++++++++- kernel/events/internal.h | 1 + kernel/events/ring_buffer.c | 36 ++++++ 7 files changed, 380 insertions(+), 37 deletions(-)
-- 2.23.0
| |