Perfetto 安装与配置:支持平台、Android/Linux 安装、下载预编译工具、源码编译

Perfetto 的安装,说白了就是两步:拿到可执行文件,然后跑起来。但不同平台、不同场景下,路径差别还挺大。我先给你画一张总览图,把整个安装体系的骨架搭起来。

Perfetto 安装配置体系 Perfetto 工具包 预编译二进制 源码编译 系统内置集成 Linux x86_64 Mac arm64 Android ARM 获取源码 git clone GN 生成 ninja 文件 ninja 编译全部目标 Android 10+ 内置 traced Linux 发行版包管理器 个人建议:日常调试用预编译包最快;定制化需求或者需要修复 bug 时,再走源码编译。

支持平台:不是所有系统都原生伺候

Perfetto 跨平台做得还可以,但各平台的“友好度”完全不同。我列个表,你一眼就能看明白。

平台 安装方式 内核要求 我的评级
Android 9+系统内置,adb shell 直接跑5.4+ / 4.19 有部分支持★★★★★
Linux x86_64 / arm64预编译包或包管理器(apt/dnf)4.13+ for ftrace, 5.10+ for 最佳★★★★☆
macOS (arm64 / x86_64)brew install perfetto不支持 ftrace,仅用户态跟踪★★★☆☆
Windows预编译 exe,仅 traceconv 和 UI不支持内核跟踪★★☆☆☆

说点实在的: 如果你主要做 Android 性能分析,系统已经自带 traced 守护进程,你只需要一个 perftetto 命令行客户端就能抓 trace。Linux 上反而要自己装,但一旦装完,功能是最全的。macOS 和 Windows 基本只能做 trace 的解析和可视化——别指望在上面抓内核事件。

下载预编译工具:最快上手的方式

我个人最喜欢这招。尤其当你刚接到一个紧急性能问题,没时间折腾编译环境的时候,直接下载二进制文件是最理智的选择。

从哪里下载?

官方 Release 页面(github.com/google/perfetto/releases)提供了各平台的压缩包。文件名格式很清晰,比如:

# Linux x86_64
perfetto-37.0-linux-x86_64.tar.gz

# macOS arm64
perfetto-37.0-mac-arm64.tar.gz

# Android ARM64
perfetto-37.0-android-arm64.tar.gz

解压后你会看到一堆可执行文件。核心的几个:

  • perfetto —— 客户端命令行工具,用来发起抓 trace 的指令
  • traced —— 后台守护进程,在 Linux/Android 上必须跑这个才能抓数据
  • traced_probes —— 负责采集 ftrace 等内核数据的进程
  • traceconv —— 将原始 trace 转换为其他格式(如 JSON、systrace)
  • tracebox —— 一个把所有组件打包在一起的“瑞士军刀”,调试时特别方便
小技巧: 我经常把 tracebox 放到 /usr/local/bin,因为它一个文件就包含了 traced、perfetto 和 traceconv,省得来回切换。在 Linux 上直接 chmod +x tracebox && sudo cp tracebox /usr/local/bin 就完事了。

在 Android 上快速部署

记得 Android 10+ 的内置 traced 版本可能较老。如果你想用最新版,可以手动推送预编译包:

adb root
adb push perfetto /data/local/tmp/
adb push traced /data/local/tmp/
adb push traced_probes /data/local/tmp/
adb shell chmod 755 /data/local/tmp/*

接下来通过 adb shell /data/local/tmp/perfetto --help 验证是否可用。嗯,这里要注意:如果设备没有 root,你只能用系统的 traced,不要尝试替换系统分区里的文件。

源码编译:掌握定制能力

当预编译包满足不了你的时候——比如你想加自己的数据源、或者需要交叉编译给嵌入式 Linux——就得走源码编译。我记得第一次编译 Perfetto 时有个坑:它的构建系统用的 GN + Ninja,跟 Chrome 一样。会点 Chromium 编译的人会觉得亲切,否则得适应一下。

环境准备

你需要以下依赖:

  • Git(废话)
  • Python 3.6+
  • 构建工具:Ninja 和 GN。GN 需要自行下载,Perfetto 源码里自带了一个工具脚本帮你搞定
  • C++ 编译器:clang 或 gcc,建议 clang-12+

编译步骤

直接上命令,我拆成几步讲:

# 1. 克隆代码(记得加 --recursive,不然 submodule 会缺失)
git clone --recursive https://github.com/google/perfetto.git
cd perfetto

# 2. 设置工具链(这一步会下载 GN 和 Ninja)
python3 tools/install-build-deps

# 3. 使用 GN 生成构建配置(out/android 只是一个例子)
# 常见目标:linux_x86_64_release, android_arm64_release, host(当前系统)
tools/gn gen out/linux_x86_64_release --args='is_debug=false'

# 4. 用 Ninja 编译全部目标(-j 根据你的 CPU 核心数调整)
tools/ninja -C out/linux_x86_64_release perfetto traced traceconv tracebox

编译完成后,产物在 out/linux_x86_64_release/ 目录下。你甚至可以只编译某个特定工具:

tools/ninja -C out/linux_x86_64_release traceconv

交叉编译到 Android

如果你需要给 Android 设备编译最新版,加一个 --android 参数:

# 下载 Android NDK(脚本会自动处理)
python3 tools/install-build-deps --android

# 生成 Android arm64 构建
tools/gn gen out/android_arm64_release --args='is_debug=false target_os="android" target_cpu="arm64"'

# 编译
tools/ninja -C out/android_arm64_release traced traced_probes perfetto tracebox
我曾经踩过的坑: 如果你在 macOS 上交叉编译 Android 版本,务必先运行 python3 tools/install-build-deps --android 把 NDK 和 sysroot 下载好。直接 gn gen 会因为缺少 NDK 而报错,而且报错信息不明显,会让你怀疑人生的。

验证安装是否成功

不管用哪种方式装完,我都习惯跑个最小测试:

# 检查版本(perfetto 版本号应该显示)
perfetto --version

# 尝试启动 traced 守护进程(Linux/Android)
sudo traced --background
# 确认进程是否存在
ps aux | grep traced

# 抓一个 5 秒的短 trace(不指定数据源的话默认只抓 ftrace)
perfetto --out /tmp/test_trace.pb --time 5s

# 用 traceconv 转为 json,看能否正常解析
traceconv json /tmp/test_trace.pb /tmp/test_trace.json

如果以上命令都能跑通,恭喜你,Perfetto 环境已经就绪。

一张表总结安装路径

场景 推荐方式 耗时 备注
快速验证/临时调试下载预编译包2 分钟推荐用 tracebox
持续开发 & 定制跟踪源码编译 host 版10~15 分钟第一次要下载依赖
Android 靶机部署交叉编译 android 版10 分钟 + NDK root 后替换 /data/local/tmp
Linux 桌面长期使用apt install perfetto / 预编译1 分钟Ubuntu 22.04+ 官方源已有

最后说一句

安装这一步,说白了就是图个省心。我自己的开发机上常年备着一个最新的 tracebox 和一份源码编译的 traced——前者用来快速抓 trace,后者用在需要调试 Perfetto 本身的时候。等你把环境跑通了,下一站就是学会如何用它定位真正的性能瓶颈。嗯,这章就到这儿,该动手装了。