编辑
2026-04-13
记录知识
0

目录

获取二进制
抓取办法
perfetto命令抓取
tracebox命令抓取
Perfetto UI 在线调试
总结
参考资料

上一篇文章介绍了perfetto的基本原理,本文开始实操

为了考虑到广泛性使用,本文基于标准linux平台实操,实际上可用将其迁移到android,chrome,linux等各种环境中。

获取二进制

https://github.com/google/perfetto/releases/tag/v54.0

直接下载对应平台编译的二进制即可

以linux平台为例

wget https://github.com/google/perfetto/releases/download/v54.0/linux-amd64.zip

抓取办法

主要有四种办法

  • perfetto命令抓取
  • tracebox命令抓取
  • 内置sdk抓取
  • peretto ui在线抓取

perfetto命令抓取

perfetto抓取需要traced进程开启

# mkdir -p /run/perfetto # ./traced --background 1087619

我们现在要测试ftrace的数据,所以需要打开ftrace的data source,如下

# traced_probes --background

此时我们看看data source是否正常打开

# ./perfetto --query --long PRODUCER PROCESSES CONNECTED: ID PID UID FLAGS NAME SDK == === === ===== ==== === 1 1092517 0 perfetto.traced_probes Perfetto v54.0-7616314b3 (7616314b391aa5fe69aa57705216c40727eb0160) DATA SOURCES REGISTERED: NAME PRODUCER DETAILS === ======== ======== linux.frozen_ftrace perfetto.traced_probes (1) linux.ftrace perfetto.traced_probes (1) linux.inode_file_map perfetto.traced_probes (1) linux.process_stats perfetto.traced_probes (1) linux.sys_stats perfetto.traced_probes (1) linux.sysfs_power perfetto.traced_probes (1) linux.system_info perfetto.traced_probes (1) perfetto.metatrace perfetto.traced_probes (1)

根据上一个文章 <性能工具-Perfetto-数据处理(2)> 可以知道,我们需要这个data source,且正常打开了,所以接下来就可以直接抓取数据

./perfetto -t 10s -b 32mb sched/sched_switch sched/sched_wakeup -o /tmp/sched.pftrace [940.327] perfetto_cmd.cc:1136 Connected to the Perfetto traced service, TTL: 10s [950.405] perfetto_cmd.cc:1293 Wrote 1166644 bytes into /tmp/sched.pftrace

等10s,我们可以获取到文件,然后在 https://ui.perfetto.dev/ 中查看

image.png

可以看到,我们成功获取到了整个系统的调度信息。接下来就可以更详细的分析调度问题了。

tracebox命令抓取

tracebox 是 Perfetto 提供的单文件工具,打包了 tracedtraced_probesperfetto ,这样我们启动一次调试就不需要启动 三个程序了,这对新手来说使用更加轻松,这里也演示一下

在使用tracebox之前,我们需要准备一下data source的描述,也就是pbtx文件,如下

buffers { size_kb: 16384 } # ============================================================ # Data Source: Ftrace CPU 调度事件 # ============================================================ data_sources { config { name: "linux.ftrace" ftrace_config { # 调度事件 ftrace_events: "sched/sched_switch" ftrace_events: "sched/sched_wakeup" buffer_size_kb: 16384 } } } # ============================================================ # Trace 配置 # ============================================================ duration_ms: 30000 write_into_file: true flush_timeout_ms: 30000 flush_period_ms: 604800000

然后用tracebox加载即可

bash
# ./tracebox --txt -c /tmp/docs/config_linux_ftrace_sched.pbtx -o /tmp/sched.pftrace [110.638] service.cc:267 Started traced, listening on @traced-p-1108237 @traced-c-1108237 [110.679] probes.cc:103 Starting traced_probes service [110.680] probes_producer.cc:397 Connected to the service [110.685] perf_producer.cc:1324 Connected to the service [110.686] perfetto_cmd.cc:1136 Connected to the Perfetto traced service, TTL: 30s [110.686] ng_service_impl.cc:1368 Configured tracing session 1, #sources:1, duration:30000 ms, #buffers:1, total buffer size:16384 KB, total sessions:1, uid:0 session name: "" [110.720] probes_producer.cc:141 Ftrace setup (target_buf=1) [110.720] tracefs.cc:636 disabled ftrace in /sys/kernel/tracing/ [110.803] tracefs.cc:633 enabled ftrace in /sys/kernel/tracing/

同样,tracebox可以一行命令直接抓到调度轨迹

image.png

Perfetto UI 在线调试

步骤如下

  1. 打开浏览器访问 https://ui.perfetto.dev

  2. 点击左侧菜单 "Record new trace"

  3. 选择目标设备和传输方式:

    • WebUSB:直接通过 USB 连接 Android 设备
    • ADB over WebSocket:通过 adb 转发
    • Chrome:追踪 Chrome 浏览器本身
  4. 配置数据源:

  5. 设置缓冲区大小和追踪时长

  6. 点击红色录制按钮开始追踪

  7. 操作你的应用,复现性能问题

  8. 追踪完成后自动在 UI 中打开分析

总结

本文通过perfetto和tracebox两种方式演示了调度轨迹的抓取,同时也说明了perfetto ui在线调试的办法。但是遗留了一个sdk方式埋点抓数据的方式,这个在下一篇文章介绍。

perfetto是非常方便系统性分析问题的核心工具,掌握其使用的意义非常重要

参考资料