Re: [PATCH V5 0/6] tools/perf: Add powerpc HTM auxtrace support

Athira Rajeev <[email protected]>
Newsgroups gmane.linux.ports.ppc.embedded
Message-ID <083A4990-6158-4C25-B29C-78A8AF9ADCF3__21598.2859184564$1786165936$gmane$org@linux.ibm.com>

> On 7 Aug 2026, at 8:11 PM, Athira Rajeev <[email protected]> wrote:
> 
> Overview:
> This series adds perf tool support for capturing and processing Hardware
> Trace Macro (HTM) trace data on POWER systems.  HTM exposes raw bus-trace
> data via the H_HTM hypervisor call.  The kernel-side HTM PMU driver
> (submitted separately) streams this data into perf AUX buffers and emits
> memory configuration as PERF_SAMPLE_RAW records.
> 
> This series wires up the record and report sides in the perf tool so that
> 'perf record' collects HTM data and 'perf report' writes the trace and
> memory configuration to files ready for post-processing with htmdecode.
> 

Hi All,

I am currently working on addressing Sashiko's review comments for V5 of the patch series.
Before I proceed with posting V6, requesting for any feedback or suggestions that I should incorporate in V6, apart from Sashiko's comments.

Thanks
Athira

> Patch overview:
> Patch 1 refactors the existing powerpc auxtrace dispatch.  All VPA-DTL
> recording logic is moved from arch/powerpc/util/auxtrace.c into its own
> file, arch/powerpc/util/vpa-dtl.c, leaving auxtrace_record__init() as a
> thin per-PMU dispatcher.  This is a prerequisite for adding the HTM
> recording path cleanly.
> 
> Patch 2 adds the HTM recording path (arch/powerpc/util/htm.c and
> util/powerpc-htm.h).  htm_recording_init() sets up the auxtrace_record
> callbacks.  htm_info_fill() stores the PMU type and a (cpu, attr.config)
> pair for each htm evsel into the PERF_RECORD_AUXTRACE_INFO priv[] area.
> The decode side reads these back to map each AUX buffer to its
> (node, chip, core) target using event->auxtrace.cpu.  PERF_SAMPLE_RAW is
> also enabled here so that memory configuration records are captured
> alongside the AUX stream.
> 
> Patch 3 adds a generic weak arch_perf_record__need_read() hook in
> builtin-record.c.  When the hook returns non-zero, perf record performs
> an extra mmap-read pass before disabling events.  The drain loop runs
> until the hook returns 0 or no forward progress is made, then the events
> are disabled and closed normally.
> 
> Patch 4 implements arch_perf_record__need_read() for powerpc.  It reads
> event->count for all open htm evsels via perf_evsel__read() and
> accumulates the values.  The kernel driver sets this count to the number
> of 128-byte HTM trace records written on a successful dump, 1 when the
> AUX buffer is temporarily full but the hypervisor stream is intact, and
> 0 once the stream is exhausted or a hard error occurs.  A non-zero total
> causes the recording loop to perform another read pass.
> 
> Patch 5 adds PERF_AUXTRACE_POWERPC_HTM to the auxtrace_type enum and
> wires the dispatch in perf_event__process_auxtrace_info().  It also
> amends htm_info_fill() to set auxtrace_info->type now that the constant
> is available.
> 
> Patch 6 adds the full HTM decode path in util/powerpc-htm.c.
> powerpc_htm_process_auxtrace_info() reads the (cpu, config) pairs from
> priv[] and builds a cpu_configs[] lookup table.  As each
> PERF_RECORD_AUXTRACE event arrives, process_auxtrace_event() maps it to
> the correct target and writes the data to htm.bin.nX.pX.cX.tX immediately.
> PERF_RECORD_SAMPLE RAW records are written to translation.nX.pX.cX.tX by
> process_event().  Per-run first-write tracking (htm_target_seen) ensures
> O_TRUNC on the first write and O_APPEND on subsequent writes.
> 
> Patches not included in V2:
> Three patches present in V1 are intentionally dropped from this series
> and will be submitted as a follow-on once the core infrastructure gets
> integrated:
> 
>  - htmdecode integration: V1 patch 6 invoked the external htmdecode
>    tool via fork/exec after writing htm.bin.* to decode the raw
>    bus-trace data in-process.  This is deferred because the interface
>    between perf and an external decode tool needs more discussion.
> 
>  - Physical-to-logical address mapping: V1 patch 7 read the current
>    partition ID from /proc/powerpc/lparcfg, parsed the translation.*
>    memory map entries, and mapped physical addresses in the decoded
>    trace to logical addresses within the LPAR.
> 
>  - Synthetic sample generation: V1 patches 8 and 9 created a
>    PERF_TYPE_SYNTH event named "htm", injected synthetic perf samples
>    with the translated logical addresses as sample IP, and wrote a
>    separate .out.l file with logical addresses alongside the decoded
>    trace.  The appropriate abstraction for synthetic HTM samples in the
>    perf tool requires further discussion.
> 
> Usage example:
> Collect HTM trace data from a single chip target:
> 
>  # perf record -C 9 -m,256 \
>      -e htm/nodalchipindex=2,nodeindex=0,htm_type=1/ sleep 3
>  [ perf record: Woken up 1 times to write data ]
>  [ perf record: Captured and wrote 256.277 MB perf.data ]
> 
>  # perf report
> 
> Output files written by perf report:
> 
>  htm.bin.n0.p2.c0.t1       raw HTM bus-trace data
>  translation.n0.p2.c0.t1   memory configuration records
> 
> Multiple targets can be collected simultaneously:
> 
>  # perf record -m,256 \
>      -e htm/nodalchipindex=2,nodeindex=0,htm_type=1,cpu=8/ \
>      -e htm/nodalchipindex=1,nodeindex=0,htm_type=1,cpu=9/ \
>      -a sleep 10
> 
> Testing:
> Tested on POWER11.  Both htm.bin.* and translation.* files are produced
> correctly for single and dual target collection.
> 
> Note: Link to kernel patches:
> https://lore.kernel.org/linuxppc-dev/[email protected]/T/#t
> 
> Athira Rajeev (6):
>  tools/perf: Move powerpc VPA-DTL auxtrace init into a separate file
>  tools/perf: Add AUXTRACE recording support for powerpc HTM
>  tools/perf: Add arch hook to drain remaining data before event close
>  tools/perf: Add powerpc callback support for
>    arch_perf_record__need_read
>  tools/perf: Add powerpc HTM auxtrace event processing support
>  tools/perf: Add perf tool support for processing powerpc HTM AUXTRACE
>    records
> 
> tools/perf/arch/powerpc/util/Build      |   2 +
> tools/perf/arch/powerpc/util/auxtrace.c |  98 ++----
> tools/perf/arch/powerpc/util/evsel.c    |  77 ++++
> tools/perf/arch/powerpc/util/htm.c      | 185 ++++++++++
> tools/perf/arch/powerpc/util/vpa-dtl.c  |  96 +++++
> tools/perf/builtin-record.c             |  65 ++++
> tools/perf/util/Build                   |   1 +
> tools/perf/util/auxtrace.c              |   4 +
> tools/perf/util/auxtrace.h              |   1 +
> tools/perf/util/powerpc-htm.c           | 447 ++++++++++++++++++++++++
> tools/perf/util/powerpc-htm.h           |  43 +++
> tools/perf/util/powerpc-vpadtl.h        |   3 +
> tools/perf/util/record.h                |   4 +
> 13 files changed, 954 insertions(+), 72 deletions(-)
> create mode 100644 tools/perf/arch/powerpc/util/htm.c
> create mode 100644 tools/perf/arch/powerpc/util/vpa-dtl.c
> create mode 100644 tools/perf/util/powerpc-htm.c
> create mode 100644 tools/perf/util/powerpc-htm.h
> 
> -- 
> 2.53.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.