[PATCH 0/3] perf: Suppress redundant ITRACE start records for Arm SPE and CoreSight

Leo Yan leo.yan at arm.com
Tue Sep 1 09:36:14 PDT 2026


Thanks to Tamas Petz for noticing that Arm CoreSight perf data can contain
many PERF_RECORD_ITRACE_START records.

PERF_RECORD_ITRACE_START provides the decoder with the initial thread
context when that information is absent from the trace stream. Once
tracing has started, Arm SPE and CoreSight decoders track subsequent
context changes using context packets or recorded sched_switch events.

Have both drivers call perf_event_itrace_started() after successfully
starting event. This prevents perf core from emitting redundant
PERF_RECORD_ITRACE_START records when an event is scheduled in again.

Since the Arm SPE and CoreSight drivers can be built as modules, export
perf_event_itrace_started() before using it in those drivers.

This series was verified with Arm CoreSight using the commands below.
The perf data contains 100 sched_switch events but only one
PERF_RECORD_ITRACE_START record:

  taskset -c 2 perf record -e cs_etm//u -e sched:sched_switch -- \
	  taskset -c 2 bash -c 'while true; do sleep 0.01; done'
  ^C

  perf script -D 2>&1 | grep -c sched_switch
  100

  perf script -D 2>&1 | grep -c PERF_RECORD_ITRACE_START
  1

Signed-off-by: Leo Yan <leo.yan at arm.com>
---
Leo Yan (3):
      perf/core: Export perf_event_itrace_started()
      perf: arm_spe: Suppress redundant ITRACE start records
      coresight: perf: Suppress ITRACE start records

 drivers/hwtracing/coresight/coresight-etm-perf.c | 2 ++
 drivers/perf/arm_spe_pmu.c                       | 2 ++
 kernel/events/core.c                             | 1 +
 3 files changed, 5 insertions(+)
---
base-commit: 786262be6048deab760f68c8acc2c85607165894
change-id: 20260901-perf_suppress_itrace_start_records-42faf45e9ce9

Best regards,
-- 
Leo Yan <leo.yan at arm.com>




More information about the linux-arm-kernel mailing list