LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

rocprofv3+Perfetto用于分析ROCm软件

通过rocprofv3抓取pftrace格式的Trace数据,然后通过Perfetto进行离线分析ROCm软件的行为。

1 rocprofv3 核心功能总结

rocprofv3 是 AMD ROCm 平台上的第三代性能分析工具,用于收集和分析运行在 AMD GPU 上应用程序的跟踪数据和硬件性能计数器。

1.1 基本用法结构

rocprofv3 [分析选项] -- <要分析的应用> [应用参数]
# 示例
rocprofv3 --hip-trace -- ./myapp
必须使用双破折号--来分隔 rocprofv3 的选项和要分析的应用命令。

1.2 主要功能选项(分类总结)

1.2.1 输入/输出 (I/O) 选项

  • -i, --input:指定输入配置文件(JSON/YAML)或计数器列表文件(TXT)。
  • -o, --output-file:指定输出文件名。
  • -d, --output-directory:指定输出目录。
  • --output-format:指定输出格式(支持 csv, json, pftrace, otf2)。
  • -E, --extra-counters:指定包含自定义计数器定义的 YAML 文件。

1.2.2 跟踪 (Tracing) 选项

这部分选项用于捕获 API 调用、内核分发、内存操作等运行时信息。
  • 聚合跟踪(一键启用常用功能):
    • -r, --runtime-trace:收集 HIP 运行时、Markers (ROCTx)、RCCL、ROCDecode、内存操作和内核分发的跟踪数据。
    • -s, --sys-trace:更全面的跟踪,比 -r 多了 HIP 编译器 API 和 HSA API。
  • 基础跟踪(按模块启用):
    • --hip-trace:跟踪 HIP API(包括运行器和编译器)。
    • --hsa-trace:跟踪 HSA API(包括核心和扩展)。
    • --marker-trace / --kokkos-trace:跟踪 ROCTx 标记或 Kokkos 工具事件。
    • --kernel-trace:跟踪内核分发。
    • --memory-copy-trace / --memory-allocation-trace / --scratch-memory-trace:跟踪各种内存操作。
    • --rccl-trace / --rocdecode-trace:跟踪通信库或解码器操作。
  • 细粒度跟踪(更精细的控制):
    • --hip-runtime-trace vs --hip-compiler-trace:区分 HIP 运行器和编译器生成的调用。
    • --hsa-core-trace vs --hsa-amd-trace vs --hsa-image-trace vs --hsa-finalizer-trace:区分 HSA 的不同扩展 API。

1.2.3 性能计数器收集 (PMC) 选项

  • --pmc:指定要收集的硬件性能计数器(如 SQ_WAVESTA_FLAT_READ_WAVES)。多个计数器可用逗号或空格分隔。**注意**:所有计数器必须能在一次运行中同时采集,否则会失败。

1.2.4 PC 采样选项 (Beta功能)

  • --pc-sampling-beta-enabled:启用程序计数器采样(测试版功能)。
  • 可配置采样单元(instructions, cycles, time)、方法(stochastic, host_trap)和间隔。

1.2.5 后处理与摘要选项

对收集到的跟踪数据进行统计和摘要生成。
  • --stats:为启用的跟踪类型收集统计信息(如调用次数、耗时)。
  • -S, --summary:在分析结束时输出一个总的摘要。
  • -D, --summary-per-domain:为每个跟踪域(如 HIP_API, KERNEL_DISPATCH)分别输出摘要。
  • --summary-groups:使用正则表达式自定义摘要分组(如 KERNEL_DISPATCH|MEMORY_COPY)。
  • -u, --summary-units:设置摘要中时间显示的单位(秒、毫秒、微秒等)。

1.2.6 内核命名选项

  • -M, --mangled-kernels:显示内核的原始混淆名称(不进行反混淆)。
  • -T, --truncate-kernels:截断反混淆后的内核名称(只显示基名)。
  • --kernel-rename:使用 roctxRangePush/Pop 定义的区域名称来重命名内核。

1.2.7 过滤选项

用于缩小分析范围。
  • --kernel-include-regex / --kernel-exclude-regex:通过正则表达式包含或排除特定的内核。
  • -p, --collection-period:设置数据采集的时间周期(启动延迟:采集时长:重复次数),可用于周期性采样或分析特定阶段。
  • --collection-period-unit:设置 -p 选项中使用的时间单位。

1.2.8 信息显示选项

  • -L, --list-avail:列出所有可用的性能计数器和 PC 采样配置。

1.2.9 其他选项

  • --log-level:设置日志级别。
  • --preload:预加载指定的库(常用于调试器或 sanitizer)。
  • --rocm-root:手动指定 ROCm 的安装路径。

1.3 总结

rocprofv3 是一个功能极其丰富的工具,其选项主要围绕以下几个方面:
  • 采集什么:跟踪 API/内核/内存,还是硬件计数器。
  • 如何输出:输出格式、文件名、目录。
  • 如何处理数据:生成摘要、统计信息。
  • 如何过滤:按内核名称、按时间范围过滤数据。
建议通过 -i 使用配置文件来管理复杂的分析会话,而不是在命令行中列出所有选项。

2 Perfetto分析pftrace

Perfetto 是 Google 开发的一套用于性能检测和跟踪分析的工具,而 ​Perfetto UI​ 是其基于网页的可视化界面,用于加载、可视化和分析通过 Perfetto 或系统跟踪(如 Android systrace)生成的性能跟踪文件(.perfetto-trace.ftrace等格式)。

image

Perfetto UI提供了在线分析pftrace功能:

  • 抓取pftrace:rocprofv3 --sys-trace --output-format pftrace -o app.pftrace -- ./you_app
  • 点击界面中的 ​​"Open trace file"​​ 按钮,从你的本地文件系统选择 .perfetto-trace, .ftrace, .ctrace, .pftrace或其他支持的跟踪文件。
  • Perfetto UI 会将跟踪数据以时间线的形式展示出来。

 打开后可以看到根据时间线排列的API和事件等:

image

posted on 2025-09-07 23:59  ArnoldLu  阅读(113)  评论(0)    收藏  举报

导航