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 本身的调度逻辑。
基础使用与效果展示
Perfetto Trace
Perfetto 是 Google 开发和开源的系统性能分析工具,能够收集来自不同数据源的性能数据,同时提供 Perfetto UI 用于数据的可视化和分析。更多 Perfetto 的详细信息,请参考 Perfetto 官方文档。
in_process 模式示例
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 模式示例
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:
配置与工具说明
工具和配置文件位置
UCP trace 工具和配置文件位于 samples/ucp_tutorial/tools 路径下,目录结构如下:
环境变量
Perfetto trace 的优先级更高。如果 export HB_UCP_ENABLE_PERFETTO=true 的同时 export HB_UCP_TRACE_LOG_LEVEL=0,那么只启动 Perfetto trace,忽略 UCP trace 日志级别。
配置文件参数信息
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。
DSP Trace 配置文件模板
在 system 模式下支持抓取 DSP trace,只需在 Perfetto 配置文件中加入 DSP trace 的数据源即可。ucp_dsp_trace.cfg 中已默认添加了 DSP trace 数据源,有效配置项如下所示:
dsptrace_period_ms 用于设置读取 DSP trace 的周期,您可根据实际使用场景调整该参数。当 DSP 负载较大时,可以适当缩短读取周期,避免发生因读写速度不匹配导致 trace 数据被覆盖的问题。
当前 DSP Trace 功能暂不支持运行时动态开启。若需在应用运行期间实时捕获 DSP Trace 数据,需在应用启动前通过命令手动开启该功能,参考操作指令如下:
UCP Trace 记录点
UCP 在应用程序 API 及内部关键调度路径嵌入了 trace 记录,其中包括任务 trace 记录和算子 trace 记录。
