专栏算法工具链dataflow的perfetto的工具使用

dataflow的perfetto的工具使用

TROS.Assist2024-03-05
40
1

1. 概述

dataflow 提供 perfetto 工具抓取框架内部关键路径的执行流程,并统一到同一时间轴,用户通过 perfetto 可以实现系统性能、数据流分析。perfetto 仅支持linux,j3,j5。

2. 使用方式

当前 perfetto 的配置组合后可以总结为以下三种方式:

  • perfetto 为 system 模式并使用 perfetto 命令行工具启动 trace

  • perfetto 为 in_process 模式 并使用 perfetto 命令行工具启动 trace

  • perfeeto 为 in_process 模式 并配置框架内部自启动 trace,程序结束后结束 trace

三者的主要区别在于:

  1. system 模式下会收集系统调度信息,CPU信息,整个系统中所有进程信息等,perfetto 规定此模式下只能使用 perfetto 提供的命令行工具启动 trace。

  2. in_process 模式下只会收集进程内的信息, 此模式下可以选择通过 perfetto 命令行工具启动,也可以通过配置 trace_config 与 trace_record_file 字段由框架启动 trace 。

  3. perfetto 命令行工具可以灵活控制 trace 的周期(什么时候开始收集,什么时候结束收集),框架内自启动 trace 则固定在程序初始化时启动,程序结束时停止收集,推荐用户选择perfetto模式,可以更为灵活的抓取分析。

3. trace信息

dataflow 对于框架内部的关键节点进行记录,主要包括关键路径执行耗时(Slice event)和关键节点传递的消息(Flow event)

3.1 Slice event

slice event 关注一段时间的执行耗时,可以从 ui 中观察到 event 的开始时间,结束时间,总耗时等,目前框架内部主要提供了下面四种 slice event:

  • OutputPort::Send()接口耗时统计

  • dataflow 内部 sub 回调整体耗时(所有filter的 check 耗时)

  • dataflow 内部 sub 回调单个 filter 的 check 耗时

  • Proc执行耗时

3.2 Flow event

flow event 主要关注消息的流转情况,在 ui 中消息的传递以箭头进行其流转展示,对于flow event,框架内部提供三处流转点调用用户回调:

  • 消息传入框架

  • 消息内部流转:消息加入缓冲队列

  • 消息传出框架:准备执行proc回调

注:flow event需要根据flow_id进行串联,框架层面无法感知,因此提供给用户 flow event 回调的注册,框架内部在以上三处流转点调用用户回调来完成trace信息记录。

4. 配置

4.1 字段配置

perfetto 对外提供以下配置字段:

  • init_perfetto { false / true }

是否在dataflow中进行 perfetto 的初始化操作,默认否,如需使用请设置为 true

  • backend { “system” / “in_process”}

perfetto 的统计模式,”in_process” 或 “system”,默认”system”。in_process 模式下只统计框架内关键路径,system 模式下会统计系统性能相关信息。

(以下字段配置仅在 backend == in_process 下生效)

  • trace_config { “” }

此字段用于传入跟踪会话的配置文件路径

  • trace_record_file{ “perfetto.pftrace” }

此字段用于传入输出的记录文件路径及名称,默认输出至 ./perfetto.pftrace

4.1.1 mainboard方式配置

如通过mainboard方式启动程序,则 perfetto 相关配置在process.json配置文件中进行配置:

4.1.2 main方式配置

如使用main()启动程序,则需要在dataflow::Init()前设置PerfettoContext:

4.2 回调配置

用户可以根据自己的需求进行回调的配置,并通过RegisterFlowTraceCallback()接口进行注册。若不设置回调,则 UI中只能展示关键节点的耗时情况,消息传递情况无法展示。

注意:

  • 此接口不支持线程安全,用户需要一开始就将相应的callback注册好

  • 此回调需要调用 TRACE_EVENT_INSTANT() 宏进行打点,其中FromPointer()中传入 flow_id 需要确保唯一性。

5. 使用

5.1 框架托管

若用户使用 in_process 模式并配置 trace_config,则进程内数据收集由框架代理,程序结束后用户只需要去配置的输出路径下载文件通过perfetto UI打开即可。

5.2 用户手动管理

其他情况下( in_process 模式但未配置 trace_config 或 system 模式),跟踪数据的收集完全由用户决定,主要包括三个步骤:

5.2.1 启动traced

traced 即 trace service 进程,需要在进程运行前启动(框架 perfetto Init 操作中需要向 traced 注册相关的数据源)

5.2.2 启动traced_probes

system 模式下需要使用该进程,在 traced 启动后选择启动与否, 若用户需要关注系统性能信息,则需要启动该进程:

5.2.3 perfetto控制跟踪的启动和终止

通过perfetto命令行工具控制跟踪会话的启动和终止:

其中 -c 传入配置文件, -o 传入最终 trace 文件的输出路径

ctrl + c 可以随时终止跟踪会话,结束后可以在 -o 设置的路径下下载输出的文件,perfetto UI打开分析。

6. FAQ

6.1 trace_config文件

trace_config 文件主要存储用户侧需要关心的配置,无论跟踪会话由框架创建托管或由用户手动管理,trace_config 配置文件都需要用户设置,具体配置文件的内容可以参考:trace_config,用户的配置文件以json文件传入,格式可以参考:

6.2 如何拿到traced、traced_probe与perfetto

dataflow内部不提供traced、traced_probe 与 perfetto,用户可以前往perfetto 仓库进行下载使用。

6.3 最后一个event的ui展示问题

UI展示中,perfetto最后一个event会偶现丢失,UI上表现为以下情况,可以忽略不计。
Description

6.4 运行程序是否需要root权限

系统模式下需要开启root权限

算法工具链
杂谈
评论1
0/1000
  • peanuty
    Lv.1

    dataflow的编译怎么带入perfetto工具?由于perfetto代码的确实导致我编译dataflow时报错并提示没有perfetto

    2024-04-25
    0
    0