perf: Avoid the read if the count is already updated
authorPeter Zijlstra (Intel) <peterz@infradead.org>
Tue, 21 Jan 2025 15:23:02 +0000 (07:23 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 5 Feb 2025 09:29:45 +0000 (10:29 +0100)
commit8ce939a0fa194939cc1f92dbd8bc1a7806e7d40a
tree68046b67ba49a0feb3c687e5831c9e39b263b4e3
parentf9bdf1f953392c9edd69a7f884f78c0390127029
perf: Avoid the read if the count is already updated

The event may have been updated in the PMU-specific implementation,
e.g., Intel PEBS counters snapshotting. The common code should not
read and overwrite the value.

The PERF_SAMPLE_READ in the data->sample_type can be used to detect
whether the PMU-specific value is available. If yes, avoid the
pmu->read() in the common code. Add a new flag, skip_read, to track the
case.

Factor out a perf_pmu_read() to clean up the code.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20250121152303.3128733-3-kan.liang@linux.intel.com
include/linux/perf_event.h
kernel/events/core.c
kernel/events/ring_buffer.c