1. 使用场景


2. 相关文件
本文参考J6算法工具链用户手册,结合几个示例场景,介绍UCP Trace使用过程。
OE开发包的OE3.0.17/samples/ucp_tutorial/tools/trace路径下提供了UCP trace的相关配置和可执行文件,目录如下:
perfetto trace 和 chrome trace 两种后端选项。
perfetto trace 包含 in_process 和 system 两种模式。
本文会详细介绍in_process模式,用到的文件只有ucp_in_process.cfg、ucp_in_process.json这两个。
OE开发包OE3.0.17/samples/ucp_tutorial/dnn/basic_samples下的示例及模型。
- Perfetto 是 Google 开发的系统性能分析工具,能够收集来自不同数据源的性能数据, 同时提供了 Perfetto UI (https://ui.perfetto.dev/) 用于数据的可视化和分析。
Perfetto in_process 表示进程内模式,进程内直接保存 perfetto trace 到文件。
Perfetto system 表示系统模式,由后台服务 traced,traced_probe 两个工具统一进行 trace 捕获。
3. 详述in_process模式
in_process 模式下只能抓取 UCP 进程内的 trace 信息,无需启动 perfetto 的后台进程。
3.1 单帧示例运行
需要用到的工具配置文件有:
将其放在runtime 00_quick_start快速上手示例运行脚本目录下:
进入上述目录下,配置环境变量:
运行程序:

Perfetto 不支持直接覆盖原有的 trace 文件,若 trace 文件已经存在,则需要先将其删除。
ucp_in_process.json中指定的文件路径是相对路径,因此trace配置文件和脚本需要放置在运行程序的同级目录下。
确保在同一个shell环境中配置环境变量和运行程序。
3.2 单帧结果解读

上图中run_resnet 113105线程是工具内部新起的线程,用于OpFnish(接收BPU完成的信号),TaskSetDone(通知任务执行完成)、SubmitOp(算子提交)等任务。
在时间线上 点击创建的任务,可以看到任务从创建到释放的完整调度流程。

在这个示例中,你可以看到如下Trace点:

同理,运行runtime_sample示例roi_infer.sh,可视化如下:

3.3 单线程+多帧 运行与结果解读
文件准备:
环境变量参考上节,然后运行命令:

3.4 多线程+多帧 运行与结果解读
文件准备:
环境变量参考上节,然后运行命令:
产出pftrace文件(04_hrt_4thread_ucp.pftrace),可视化如下:



拿到这个多线程的可视化数据,能分析什么?
查看UCP内部调度耗时是否异常:例如哪块耗时明显高于预期,内部调度异常,可以联系地平线技术支持。
观察到BPU是否在持续使用:例如两个BPU OpFnish算子记录点之间的耗时是否符合预期,继而判断任务编排是否合理,任务下发是否及时等,这需要用户自行处理。

4. 简述system模式
地平线OE包中Trace相关文件,主要是用在system 模式中的,使用方式也非常简单。
以OE runtime 01_api_tutorial为例:
注意:为了能够抓取完整的数据,需要确保数据上一步perfetto进程 先执行,后退出。
可视化生成的ucp.pftrace:

由于 个人 在实际使用过程中应用system模式较少,故这儿不进行详细介绍,未来有必要,再详细研究。



