1. 概述
dataflow 提供 perfetto 工具抓取框架内部关键路径的执行流程,并统一到同一时间轴,用户通过 perfetto 可以实现系统性能、数据流分析。perfetto 仅支持linux,j3,j5。
2. 使用方式
当前 perfetto 的配置组合后可以总结为以下三种方式:
perfetto 为 system 模式并使用 perfetto 命令行工具启动 trace
perfetto 为 in_process 模式 并使用 perfetto 命令行工具启动 trace
perfeeto 为 in_process 模式 并配置框架内部自启动 trace,程序结束后结束 trace
三者的主要区别在于:
system 模式下会收集系统调度信息,CPU信息,整个系统中所有进程信息等,perfetto 规定此模式下只能使用 perfetto 提供的命令行工具启动 trace。
in_process 模式下只会收集进程内的信息, 此模式下可以选择通过 perfetto 命令行工具启动,也可以通过配置 trace_config 与 trace_record_file 字段由框架启动 trace 。
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 框架托管
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 文件的输出路径
6. FAQ
6.1 trace_config文件
6.2 如何拿到traced、traced_probe与perfetto
6.3 最后一个event的ui展示问题

6.4 运行程序是否需要root权限
系统模式下需要开启root权限

