UCP Trace 使用说明
UCP trace通过在UCP执行的关键路径上嵌入trace记录,提供深入分析UCP应用程序调度逻辑的能力。在出现性能异常时,可以通过分析UCP trace,快速找到异常发生的时间点。
UCP trace提供了两种trace后端选项:Perfetto Trace 和 Chrome Trace。您可以通过设置环境变量,在这两者之间进行选择,以满足您特定的性能跟踪需求。
Perfetto Trace可以获取到UCP记录的trace,以及系统状态,ftrace等信息。Chrome Trace只能获取UCP记录的trace ,主要用于分析UCP本身的调度逻辑。
UCP trace工具和配置文件位于samples/ucp_tutorial/tools路径下,目录结构为:
QNX操作系统不支持Perfetto Trace后端选项。
环境变量
Perfetto trace的优先级更高,如果export HB_UCP_ENABLE_PERFETTO=true的同时export UCP_TRACE_LOG_LEVEL=0,那么只启动Perfetto trace,忽略UCP trace日志级别。
UCP Trace 记录点
UCP在应用程序API及内部关键调度路径嵌入了trace记录,其中包括任务trace记录和算子trace记录。
任务 Trace 记录点
算子 Trace 记录点
Perfetto Trace
Perfetto 是Google开发和开源的系统性能分析工具,能够收集来自不同数据源的性能数据,
同时提供了Perfetto UI用于数据的可视化和分析。更多perfetto的详细信息,请参考 Perfetto 官方文档。
配置文件参数信息
UCP trace配置文件参数信息
| 参数 | 数据类型 | 参数说明 | 关联参数 |
backend | string | 功能描述:
| 无。 |
trace_config | string | 功能描述:该参数为protobuf文本格式的配置文件。 | backend设置为"in_process"时,该参数才有效。 |
UCP trace配置文件非必须指定,如果您的应用程序已经初始化了Perfetto,那么只需要export HB_UCP_ENABLE_PERFETTO=true即可开启Perfetto。
Long trace配置文件参数信息
默认情况下,Perfetto将trace数据存储在内存中的缓冲区,直至trace会话终止时,才会将缓冲区的数据转储至文件。若trace数据量超出缓冲区容量,则无法保证数据的完整性。
Perfetto支持周期性地将缓冲区的数据写入到文件中,只需在trace配置文件中增加以下字段即可。
配置文件模板
UCP Trace 配置文件模板
用于配置UCP如何使用Perfetto,您可以通过环境变量HB_UCP_PERFETTO_CONFIG_PATH来指定。
in_process 模式
system 模式
backend选择system时,无需单独为UCP指定trace_config。
Perfetto 配置文件模板
关于Perfetto配置文件的详细信息可以参考 Perfetto TraceConfig Reference。
UCP提供了参考配置文件ucp_in_process.cfg和ucp_system.cfg,您可根据应用场景进行修改。
BPU Trace配置文件模板
在system模式下支持抓取BPU trace,只需在perfetto配置文件中加入BPU trace的数据源即可,ucp_bpu_trace.cfg中已默认添加了BPU trace数据源,具体配置项如下所示:
bputrace_period_ms用于设置读取BPU trace的周期,您可根据实际使用场景调整该参数,当BPU负载较大时,可以适当缩短读取周期,避免发生因读写速度不匹配导致的trace数据被覆盖的问题。
当前BPU Trace功能暂不支持运行时动态开启,若需在应用运行期间实时捕获BPU Trace数据,需在应用启动前通过命令手动开启该功能,具体操作指令为:echo 1 > /sys/devices/system/bpu/bpu0/trace,
执行该命令前需要确保 /sys/devices/system/bpu/bpu0/power_enable 的值为0,如果不为0,请先执行 echo 0 > /sys/devices/system/bpu/bpu0/power_enable。
使用示例
UCP trace示例
in_process模式抓取进程内trace信息
in_process模式下只能抓取UCP进程内的trace信息,可以不用启动perfetto的后台进程。具体操作步骤如下:
- 配置环境变量。
ucp_in_process.json中指定了Perfetto的配置文件ucp_in_process.cfg,其中output_path指定了trace文件的输出路径。由于Perfetto不支持直接覆盖原有的trace文件,若该文件已经存在,则需要先将其删除。
- 运行UCP应用程序,这里以
hrt_model_exec为例。
由于指定的文件路径是相对路径,因此trace配置文件和脚本需要放置在运行程序的同级目录下。同时,需要确保在同一个shell环境中配置环境变量和运行程序。
- 生成的trace保存在
ucp.pftrace,您可以使用 Perfetto UI 打开。
- 在时间线上点击创建的任务,可以看到任务从创建到释放的完整调度流程。
-
Perfetto UI常用操作如下,更详细的操作说明,请参考
help界面。
system模式抓取进程内trace信息
system模式下,UCP trace只是其中的一个数据源,因此需要运行tracebox相对应的指令来完成trace的捕获。具体操作步骤如下:
- 运行Perfetto后台进程。
- 触发数据抓取。
- 另起一个终端,配置UCP环境变量。
- 运行UCP应用程序,这里以
hrt_model_exec为例。
为了能够抓取完整的数据,需要确保hrt_model_exec执行结束前,perfetto进程未退出。
- 生成的trace保存在
perfetto命令指定的输出文件ucp.pftrace,您可以使用 Perfetto UI 打开。
BPU Trace示例
为了展示多个模型推理过程中的BPU trace,这里提供了一个多进程应用的示例。除了启动的运行程序有所不同外,其余的步骤与前一章节相同。
BPU Trace的可视化需要使用地平线定制开发的hbperfetto工具进行打开,您可以通过联系地平线系统软件技术支持人员来获取该工具。使用hbperfetto打开trace文件的效果如下图所示:
BPU Trace中所呈现的不同模型推理任务的调度情况如下图所示:
hbperfetto 支持UCP trace和BPU trace的关联。以下图示展示了从UCP模型推理任务的创建,提交,调度执行,直至任务完成执行并最终释放的完整流程。
此外,您可通过SQL查询BPU trace的原始数据。
常用数据源介绍
Chrome Trace
Chrome trace只支持捕获UCP trace,不支持多数据源的捕获,多数据源的捕获请使用Perfetto trace。Chrome trace的特点是简单,易用, 使用文本日志来记录trace,不依赖于额外的三方库和工具。如果只关心UCP的调度逻辑,可以使用Chrome trace来进行捕获。
使用示例
- 配置环境变量。
在开始新的捕获前,建议先删除旧的日志文件,避免旧的数据带来的干扰。
- 运行UCP应用程序,这里以
hrt_model_exec为例。
- 执行trace抓取脚本。
在完成trace日志的捕获后,运行UCP发布包中提供了catch_trace.sh,将原始的trace日志转换为json格式的trace文件。
- 使用 Perfetto UI打开
ucp_trace_task.json和ucp_trace_thread.json。
Perfetto UI 打开 ucp_trace_thread.json:

