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

目录

Perfetto的设计
Perfetto的组成
traced
data source
tracebox
Trace Processor
Perfetto UI
Perfetto的作用
使用Perfetto的方法
总结
参考资料

Perfetto是google推出的性能分析工具,作为 Systrace 的继任者,Perfetto 从 Android 10 开始成为官方推荐的系统追踪工具,并逐步成为整个行业的标准工具。通过Perfetto可以快速解决性能问题

Perfetto的设计

引入了一种创新的用户态到用户态(userspace-to-userspace) 追踪协议,基于直接在共享内存缓冲区上进行 protobuf 序列化。这种设计带来了几个关键优势:

  1. 极低开销:直接在线程本地的共享内存上序列化,避免了内核态往返
  2. 动态配置:通过可扩展的 protobuf 机制动态配置所有追踪行为
  3. 灵活缓冲:不同数据源可以路由到不同的用户定义缓冲区
  4. 无限时长:支持将任意长度的 trace 流式写入文件系统

image.png

Perfetto的组成

traced

traced 是 Perfetto 的核心服务进程,负责:

  • 管理追踪会话(session)的生命周期
  • 协调多个数据生产者(producer)和消费者(consumer)
  • 管理共享内存缓冲区
  • 将 trace 数据写入输出文件

data source

通过配置data source,可以让perfetto支持多种数据源的解析,包括内核ftrace的如下信息

  • CPU 调度事件
  • CPU 频率和空闲状态
  • 内存计数器
  • 进程统计信息

同样也可以包括程序的自定义信息

tracebox

从 Perfetto v16 开始,tracebox 将所有必要的二进制文件打包到一个静态链接的可执行文件中(类似 busybox),方便在不同机器上复制和运行。 https://github.com/tracebox/tracebox

Trace Processor

支持 C++ 库解析多种格式的 trace 文件,并通过 SQL 接口进行查询 https://source.chromium.org/chromium/chromium/src/+/main:third_party/perfetto//src/trace_processor/ 编译这个可以获取二进制解析perfetto的文件trace_processor_shell

Perfetto UI

完全本地化的 Web UI https://www.ui.perfetto.dev/ ,特点包括:

  • 基于浏览器,无需安装
  • 支持离线使用
  • trace 数据完全在本地处理,不会上传到服务器
  • 基于 WebWorkers 的多线程设计,UI 始终响应流畅
  • 可处理多 GB 的 trace 文件

Perfetto的作用

Perfetto是一个快速定位性能问题的功能,其包括如下功能:

  • 启动问题
  • 内存泄漏问题
  • 组件之间的交互问题
  • 单应用的延迟问题
  • CPU调度结果
  • 锁竞争在哪里
  • IO瓶颈在哪里
  • 哪个函数耗时最长
  • 内存分配的热点

使用Perfetto的方法

其实使用工具的办法很统一,如下

采集Trace → 打开UI分析 → SQL深度分析 → 修改代码 → 优化验证

总结

本文简单介绍了perfetto的基本概念,后面我会通过实战的方法逐步深入探讨Perfetto在性能上的调试。欢迎关注

参考资料