[PATCH 00/14] perf cs-etm: Per-thread mode fixes and snapshot wrap support

James Clark posted 14 patches 1 month, 2 weeks ago
There is a newer version of this series
Documentation/userspace-api/perf_ring_buffer.rst   |   6 +-
tools/perf/Documentation/perf-test.txt             |   2 +-
tools/perf/arch/arm/util/cs-etm.c                  |  30 ++++-
tools/perf/arch/arm64/util/arm-spe.c               | 147 +--------------------
tools/perf/arch/x86/util/intel-bts.c               | 115 +---------------
tools/perf/arch/x86/util/intel-pt.c                |  58 +++-----
.../perf/tests/shell/coresight/per-thread-multi.sh |  78 +++++++++++
tools/perf/tests/shell/coresight/per-thread.sh     |  48 +++++++
.../perf/tests/shell/coresight/raw_dump_stress.sh  |   5 -
tools/perf/tests/workloads/named_threads.c         |   7 +-
tools/perf/util/auxtrace.c                         | 136 +++++++++++++++++--
tools/perf/util/auxtrace.h                         |  20 ++-
tools/perf/util/cs-etm.c                           |  98 ++++++++++----
13 files changed, 382 insertions(+), 368 deletions(-)
[PATCH 00/14] perf cs-etm: Per-thread mode fixes and snapshot wrap support
Posted by James Clark 1 month, 2 weeks ago
Fix a few issues with per-thread mode:
  - With TRBE, thread migrations hit a queue without a decoder assert
  - On nVHE, everything looks like guest trace instead of host
  - Tracing multiple threads didn't really work

After adding a tests for those, it turns out there were some snapshot
bugs not picked up by the other snapshot tests. That showed that the
different snapshot searches for Intel BTS and Arm SPE were inconsistent
and I think all tracers can benefit from using the same pointer fixup
logic, so that gets refactored into the common auxtrace.c. Then SPE can
just share the Intel BTS search as it was obviously copied from it
originally. IntelPT keeps the more advanced duplicate data search, but
in the future that could probably be made the common one and all tracers
would benefit from using it (except maybe BTS if it always has a very
small buffer, but I doubt the overhead of the duplicate search would be
an issue). For now this is more of a refactor rather than behavioral
change so don't do that yet.

Signed-off-by: James Clark <james.clark@linaro.org>
---
James Clark (14):
      perf cs-etm: Fix nVHE per-thread decoding
      perf cs-etm: Warn for invalid timestamp option
      perf cs-etm: Turn on context packet timestamps in per-thread mode
      perf cs-etm: Use per-CPU queues for per-thread mode
      perf cs-etm: Increase default timestamp generation period
      perf auxtrace: Turn Intel BTS snapshot search into a generic one
      perf arm-spe: Use generic snapshot search
      perf auxtrace: intel-pt: Use new snapshot_has_wrapped callback
      perf cs-etm: Queue partial AUX records
      perf cs-etm: Don't print missing buffers in snapshot mode
      perf auxtrace: cs-etm: Capture wrapped snapshots
      perf test: Allow infinite named_thread loops
      perf test: Add test for per-thread mode
      perf cs-etm: Test multiple per-thread threads

 Documentation/userspace-api/perf_ring_buffer.rst   |   6 +-
 tools/perf/Documentation/perf-test.txt             |   2 +-
 tools/perf/arch/arm/util/cs-etm.c                  |  30 ++++-
 tools/perf/arch/arm64/util/arm-spe.c               | 147 +--------------------
 tools/perf/arch/x86/util/intel-bts.c               | 115 +---------------
 tools/perf/arch/x86/util/intel-pt.c                |  58 +++-----
 .../perf/tests/shell/coresight/per-thread-multi.sh |  78 +++++++++++
 tools/perf/tests/shell/coresight/per-thread.sh     |  48 +++++++
 .../perf/tests/shell/coresight/raw_dump_stress.sh  |   5 -
 tools/perf/tests/workloads/named_threads.c         |   7 +-
 tools/perf/util/auxtrace.c                         | 136 +++++++++++++++++--
 tools/perf/util/auxtrace.h                         |  20 ++-
 tools/perf/util/cs-etm.c                           |  98 ++++++++++----
 13 files changed, 382 insertions(+), 368 deletions(-)
---
base-commit: bf10e6ee2ac3034c9068e03eed418fd16961984e
change-id: 20260605-james-cs-unformatted-per-thread-fix-50e723aa7f0e

Best regards,
--  
James Clark <james.clark@linaro.org>
Re: [PATCH 00/14] perf cs-etm: Per-thread mode fixes and snapshot wrap support
Posted by Arnaldo Carvalho de Melo 2 weeks, 1 day ago
On Tue, Aug 11, 2026 at 04:30:03PM +0100, James Clark wrote:
> Fix a few issues with per-thread mode:
>   - With TRBE, thread migrations hit a queue without a decoder assert
>   - On nVHE, everything looks like guest trace instead of host
>   - Tracing multiple threads didn't really work

This series applies cleanly to perf-tools-next but has no Reviewed-by
nor was processed by Sashiko.

Can somebody from the ARM camp take a look at it, please?

Thanks,

- Arnaldo
 
> After adding a tests for those, it turns out there were some snapshot
> bugs not picked up by the other snapshot tests. That showed that the
> different snapshot searches for Intel BTS and Arm SPE were inconsistent
> and I think all tracers can benefit from using the same pointer fixup
> logic, so that gets refactored into the common auxtrace.c. Then SPE can
> just share the Intel BTS search as it was obviously copied from it
> originally. IntelPT keeps the more advanced duplicate data search, but
> in the future that could probably be made the common one and all tracers
> would benefit from using it (except maybe BTS if it always has a very
> small buffer, but I doubt the overhead of the duplicate search would be
> an issue). For now this is more of a refactor rather than behavioral
> change so don't do that yet.
> 
> Signed-off-by: James Clark <james.clark@linaro.org>
> ---
> James Clark (14):
>       perf cs-etm: Fix nVHE per-thread decoding
>       perf cs-etm: Warn for invalid timestamp option
>       perf cs-etm: Turn on context packet timestamps in per-thread mode
>       perf cs-etm: Use per-CPU queues for per-thread mode
>       perf cs-etm: Increase default timestamp generation period
>       perf auxtrace: Turn Intel BTS snapshot search into a generic one
>       perf arm-spe: Use generic snapshot search
>       perf auxtrace: intel-pt: Use new snapshot_has_wrapped callback
>       perf cs-etm: Queue partial AUX records
>       perf cs-etm: Don't print missing buffers in snapshot mode
>       perf auxtrace: cs-etm: Capture wrapped snapshots
>       perf test: Allow infinite named_thread loops
>       perf test: Add test for per-thread mode
>       perf cs-etm: Test multiple per-thread threads
> 
>  Documentation/userspace-api/perf_ring_buffer.rst   |   6 +-
>  tools/perf/Documentation/perf-test.txt             |   2 +-
>  tools/perf/arch/arm/util/cs-etm.c                  |  30 ++++-
>  tools/perf/arch/arm64/util/arm-spe.c               | 147 +--------------------
>  tools/perf/arch/x86/util/intel-bts.c               | 115 +---------------
>  tools/perf/arch/x86/util/intel-pt.c                |  58 +++-----
>  .../perf/tests/shell/coresight/per-thread-multi.sh |  78 +++++++++++
>  tools/perf/tests/shell/coresight/per-thread.sh     |  48 +++++++
>  .../perf/tests/shell/coresight/raw_dump_stress.sh  |   5 -
>  tools/perf/tests/workloads/named_threads.c         |   7 +-
>  tools/perf/util/auxtrace.c                         | 136 +++++++++++++++++--
>  tools/perf/util/auxtrace.h                         |  20 ++-
>  tools/perf/util/cs-etm.c                           |  98 ++++++++++----
>  13 files changed, 382 insertions(+), 368 deletions(-)
> ---
> base-commit: bf10e6ee2ac3034c9068e03eed418fd16961984e
> change-id: 20260605-james-cs-unformatted-per-thread-fix-50e723aa7f0e
> 
> Best regards,
> --  
> James Clark <james.clark@linaro.org>
Re: [PATCH 00/14] perf cs-etm: Per-thread mode fixes and snapshot wrap support
Posted by Leo Yan 2 weeks ago
Hi Arnaldo,

On Sun, Sep 13, 2026 at 10:20:31PM -0300, Arnaldo Carvalho de Melo wrote:
> On Tue, Aug 11, 2026 at 04:30:03PM +0100, James Clark wrote:
> > Fix a few issues with per-thread mode:
> >   - With TRBE, thread migrations hit a queue without a decoder assert
> >   - On nVHE, everything looks like guest trace instead of host
> >   - Tracing multiple threads didn't really work
> 
> This series applies cleanly to perf-tools-next but has no Reviewed-by
> nor was processed by Sashiko.
> 
> Can somebody from the ARM camp take a look at it, please?

James has sent v2 [1] and I gave some words on it. Adrian also has one
comment for snapshot callbacks refactoring.

Sashiko also sent out review on the series.

Thanks,
Leo

[1] https://lore.kernel.org/linux-perf-users/20260821-james-cs-unformatted-per-thread-fix-v2-0-00c4fd0701b4@linaro.org/
Re: [PATCH 00/14] perf cs-etm: Per-thread mode fixes and snapshot wrap support
Posted by Arnaldo Carvalho de Melo 2 weeks ago
On Mon, Sep 14, 2026 at 09:13:43AM +0100, Leo Yan wrote:
> Hi Arnaldo,
> 
> On Sun, Sep 13, 2026 at 10:20:31PM -0300, Arnaldo Carvalho de Melo wrote:
> > On Tue, Aug 11, 2026 at 04:30:03PM +0100, James Clark wrote:
> > > Fix a few issues with per-thread mode:
> > >   - With TRBE, thread migrations hit a queue without a decoder assert
> > >   - On nVHE, everything looks like guest trace instead of host
> > >   - Tracing multiple threads didn't really work
> > 
> > This series applies cleanly to perf-tools-next but has no Reviewed-by
> > nor was processed by Sashiko.
> > 
> > Can somebody from the ARM camp take a look at it, please?
> 
> James has sent v2 [1] and I gave some words on it. Adrian also has one
> comment for snapshot callbacks refactoring.
> 
> Sashiko also sent out review on the series.

Ok, so it is still in development with open issues, I'll wait.

- Arnaldo
 
> Thanks,
> Leo
> 
> [1] https://lore.kernel.org/linux-perf-users/20260821-james-cs-unformatted-per-thread-fix-v2-0-00c4fd0701b4@linaro.org/