| .. SPDX-License-Identifier: GPL-2.0 | |
| .. _htm: | |
| =================================== | |
| HTM (Hardware Trace Macro) | |
| =================================== | |
| Athira Rajeev, 2 Mar 2025 | |
| .. contents:: | |
| :depth: 3 | |
| Basic overview | |
| ============== | |
| H_HTM is used as an interface for executing Hardware Trace Macro (HTM) | |
| functions, including setup, configuration, control and dumping of the HTM data. | |
| For using HTM, it is required to setup HTM buffers and HTM operations can | |
| be controlled using the H_HTM hcall. The hcall can be invoked for any core/chip | |
| of the system from within a partition itself. To use this feature, a debugfs | |
| folder called "htmdump" is present under /sys/kernel/debug/powerpc. | |
| HTM debugfs example usage | |
| ========================= | |
| .. code-block:: sh | |
| # ls /sys/kernel/debug/powerpc/htmdump/ | |
| coreindexonchip htmcaps htmconfigure htmflags htminfo htmsetup | |
| htmstart htmstatus htmtype nodalchipindex nodeindex trace | |
| Details on each file: | |
| * nodeindex, nodalchipindex, coreindexonchip specifies which partition to configure the HTM for. | |
| * htmtype: specifies the type of HTM. Supported target is hardwareTarget. | |
| * trace: is to read the HTM data. | |
| * htmconfigure: Configure/Deconfigure the HTM. Writing 1 to the file will configure the trace, writing 0 to the file will do deconfigure. | |
| * htmstart: start/Stop the HTM. Writing 1 to the file will start the tracing, writing 0 to the file will stop the tracing. | |
| * htmstatus: get the status of HTM. This is needed to understand the HTM state after each operation. | |
| * htmsetup: set the HTM buffer size. Size of HTM buffer is in power of 2 | |
| * htminfo: provides the system processor configuration details. This is needed to understand the appropriate values for nodeindex, nodalchipindex, coreindexonchip. | |
| * htmcaps : provides the HTM capabilities like minimum/maximum buffer size, what kind of tracing the HTM supports etc. | |
| * htmflags : allows to pass flags to hcall. Currently supports controlling the wrapping of HTM buffer. | |
| To see the system processor configuration details: | |
| .. code-block:: sh | |
| # cat /sys/kernel/debug/powerpc/htmdump/htminfo > htminfo_file | |
| The result can be interpreted using hexdump. | |
| To collect HTM traces for a partition represented by nodeindex as | |
| zero, nodalchipindex as 1 and coreindexonchip as 12 | |
| .. code-block:: sh | |
| # cd /sys/kernel/debug/powerpc/htmdump/ | |
| # echo 2 > htmtype | |
| # echo 33 > htmsetup ( sets 8GB memory for HTM buffer, number is size in power of 2 ) | |
| This requires a CEC reboot to get the HTM buffers allocated. | |
| .. code-block:: sh | |
| # cd /sys/kernel/debug/powerpc/htmdump/ | |
| # echo 2 > htmtype | |
| # echo 0 > nodeindex | |
| # echo 1 > nodalchipindex | |
| # echo 12 > coreindexonchip | |
| # echo 1 > htmflags # to set noWrap for HTM buffers | |
| # echo 1 > htmconfigure # Configure the HTM | |
| # echo 1 > htmstart # Start the HTM | |
| # echo 0 > htmstart # Stop the HTM | |
| # echo 0 > htmconfigure # Deconfigure the HTM | |
| # cat htmstatus # Dump the status of HTM entries as data | |
| Above will set the htmtype and core details, followed by executing respective HTM operation. | |
| Read the HTM trace data | |
| ======================== | |
| After starting the trace collection, run the workload | |
| of interest. Stop the trace collection after required period | |
| of time, and read the trace file. | |
| .. code-block:: sh | |
| # cat /sys/kernel/debug/powerpc/htmdump/trace > trace_file | |
| This trace file will contain the relevant instruction traces | |
| collected during the workload execution. And can be used as | |
| input file for trace decoders to understand data. | |
| Benefits of using HTM debugfs interface | |
| ======================================= | |
| It is now possible to collect traces for a particular core/chip | |
| from within any partition of the system and decode it. Through | |
| this enablement, a small partition can be dedicated to collect the | |
| trace data and analyze to provide important information for Performance | |
| analysis, Software tuning, or Hardware debug. |