Perfetto 安装与配置:支持平台、Android/Linux 安装、下载预编译工具、源码编译
Perfetto 的安装,说白了就是两步:拿到可执行文件,然后跑起来。但不同平台、不同场景下,路径差别还挺大。我先给你画一张总览图,把整个安装体系的骨架搭起来。
支持平台:不是所有系统都原生伺候
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—— 一个把所有组件打包在一起的“瑞士军刀”,调试时特别方便
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
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 本身的时候。等你把环境跑通了,下一站就是学会如何用它定位真正的性能瓶颈。嗯,这章就到这儿,该动手装了。