HTM (硬件追踪宏)¶
Athira Rajeev,2025 年 3 月 2 日
基本概述¶
H_HTM 被用作执行硬件追踪宏 (HTM) 功能的接口,包括 HTM 数据的设置、配置、控制和转储。要使用 HTM,需要设置 HTM 缓冲区,并且可以使用 H_HTM hcall 来控制 HTM 操作。可以在分区内部为系统中的任何内核/芯片调用此 hcall。为了使用此功能,在 /sys/kernel/debug/powerpc 下提供了一个名为 “htmdump” 的 debugfs 文件夹。
HTM debugfs 使用示例¶
# ls /sys/kernel/debug/powerpc/htmdump/
coreindexonchip htmcaps htmconfigure htmflags htminfo htmsetup
htmstart htmstatus htmtype nodalchipindex nodeindex trace
每个文件的详细信息
nodeindex、nodalchipindex、coreindexonchip 指定配置 HTM 的分区。
htmtype:指定 HTM 的类型。支持的目标是 hardwareTarget。
trace:用于读取 HTM 数据。
htmconfigure:配置/取消配置 HTM。向该文件写入 1 将配置追踪,写入 0 将取消配置。
htmstart:启动/停止 HTM。向该文件写入 1 将启动追踪,写入 0 将停止追踪。
htmstatus:获取 HTM 的状态。这对于在每次操作后了解 HTM 状态是必要的。
htmsetup:设置 HTM 缓冲区大小。HTM 缓冲区的大小为 2 的幂。
htminfo:提供系统处理器配置详细信息。这对于理解 nodeindex、nodalchipindex、coreindexonchip 的适当值是必要的。
htmcaps:提供 HTM 功能,如最小/最大缓冲区大小、HTM 支持的追踪类型等。
htmflags:允许向 hcall 传递标志。目前支持控制 HTM 缓冲区的循环(wrapping)。
查看系统处理器配置详细信息
# cat /sys/kernel/debug/powerpc/htmdump/htminfo > htminfo_file
可以使用 hexdump 来解释结果。
要收集由 nodeindex 为 0、nodalchipindex 为 1 和 coreindexonchip 为 12 表示的分区的 HTM 追踪:
# 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 )
这需要 CEC 重启以分配 HTM 缓冲区。
# 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
上述操作将设置 htmtype 和核心详细信息,随后执行相应的 HTM 操作。
读取 HTM 追踪数据¶
开始追踪收集后,运行感兴趣的工作负载。在所需的时间段后停止追踪收集,并读取追踪文件。
# cat /sys/kernel/debug/powerpc/htmdump/trace > trace_file
此追踪文件将包含工作负载执行期间收集的相关指令追踪。并可用作追踪解码器的输入文件以理解数据。
使用 HTM debugfs 接口的优势¶
现在可以在系统的任何分区内收集特定内核/芯片的追踪信息并对其进行解码。通过此功能,可以将一个小分区专门用于收集追踪数据并进行分析,从而为性能分析、软件调优或硬件调试提供重要信息。