Android perfetto - 什么是 Tracing?

0 阅读4分钟

本文旨在从整体视角介绍性能分析(Performance Analysis)Tracing,帮助不了解 tracing 的读者建立基础概念。

1、性能(Performance)简介

性能分析的目标是让软件运行得更好。“更好”的含义取决于场景,常见目标包括:

  • 用更少的资源完成相同工作(CPU、内存、网络、耗电等)
  • 更充分利用现有资源
  • 识别并消除不必要的工作

提升性能的主要难点是:如何找到性能问题的根因

现代软件系统复杂、组件众多、交互繁杂,工程师需要能让程序执行过程变得可理解的工具。Tracing 和 Profiling 就是最常用的两种工具。

2、Tracing 简介

Tracing(跟踪)是对系统执行过程进行高精度、细粒度的数据采集。 一次持续的采集称为trace 文件trace

Trace 通常可以完整还原程序执行的时间线,包括:

  • 内核事件(调度切换、线程唤醒、系统调用等)
  • 应用自定义的关键代码区域(函数执行时间、调用参数等)

有了足够详细的 trace,很多性能问题即使无法复现也可以通过 trace 找到原因。

由于 trace 数据量巨大,人无法直接阅读(不像日志)。为此需要:

  • trace 分析库:用于程序化提取和汇总事件
  • trace 可视化工具(如 Perfetto UI) :展示时间轴视图,帮助理解系统随时间的运行状况

3、Logging vs Tracing

可以这样理解:

日志(logging)之于功能调试,就像 tracing 之于性能分析。

Tracing 是一种“结构化日志”,用结构化数据记录系统状态,而不是随意打印字符串。

此外,Tracing 框架(如 Perfetto)极力降低开销,以避免影响被测程序的性能。现代 tracing 工具能在纳秒级别记录事件,同时只带来极低性能损耗。

4、Metrics vs Tracing

Metrics(指标)是在程序运行时持续收集的高层数值,例如:

  • CPU 使用率
  • 内存使用
  • 网络带宽

问题来了:

既然 trace 能提供比 metrics 更丰富的信息,为什么还要用 metrics?

原因在于 trace 的“重量级”:

  • trace 数据通常大得多(MB 级)
  • 无法在生产环境24/7 持续采集

因此 metrics 更适合长期监控性能趋势,而 trace 用来进行深度根因分析(root cause analysis)

典型流程:

  1. 指标发现异常
  2. 启动 targeted tracing
  3. 通过 trace 分析问题根因

5、Profiling 简介

Profiling(性能剖析)通过采样(sampling)方式记录资源使用情况。一段连续采样称为profile。

每个采样会采集:

  • 调用栈(callstack)

常见的两类 profilings:

  • 内存 profiling:哪些代码在分配内存、分配了多少字节
  • CPU profiling:哪些代码消耗了 CPU 时间

Profiling 通常依靠:

  • 定时采样(如每 50ms)
  • 或特定事件触发采样

6、Tracing vs Profiling

两个关键问题:

  1. 既然可以 trace 一切,为什么还要 profiling?
  2. 既然 profiling 能定位到具体代码行,为什么还需要 tracing?

6.1、什么时候使用 Profiling?

Trace无法捕获非常高频的事件(如每一次函数调用)。

Profiling 通过“采样”减少数据量,适用于:

  • 高频调用的热点代码
  • 长期性能趋势分析

采样是统计的,但结果通常足够准确。

6.2、什么时候使用 Tracing?

Profiling 能告诉你:

  • “哪些代码使用了资源”

但 tracing 能告诉你:

  • 为什么这些代码会被执行?”

例如 profiling 会说:

foo() 导致了大量的 malloc 调用

但 tracing 能告诉你:

foo() 是因为某个事件/输入/线程唤醒而执行的

Tracing 提供执行上下文,这是 profiling 无法提供的。

6.3、小结

目的TracingProfiling
解决问题为什么会卡?线程为什么被阻塞?发生了什么?哪些代码最耗 CPU/内存?热点在哪里?
数据来源事件、时间线、上下文采样调用栈、统计资源使用
开销较低(但主动记录大量事件)更低(定期采样)
输出时间轴 + 事件流函数热点分布
工具例子Perfetto, ftrace, eBPFperf, gperftools, VTune

7、Perfetto 同时支持 Profiling 和 Tracing

Perfetto 可以同时记录追踪和剖析数据,让两者互补。

8、参考