Perfetto 命令行工具(Android 10 及更高版本)
- 1、快速入门
- 1.1 启动跟踪服务
- 1.2 记录跟踪
- 1.2.1 通过 Perfetto UI 记录跟踪
- 1.2.2 通过 cmdline 记录跟踪
- 1.2.3 System Tracing 的系统级应用抓取
- 2、perfetto 工具
- 2.1 数据源选择
- 2.2 语法参数
- 2.2.1 轻量模式
- 2.2.2 普通模式
- 3、支持的数据源
- 3.1 ftrace
- 3.2 进程统计信息
- 3.3 heapprofd
- 3.4 其他来源
1、快速入门
1.1 启动跟踪服务
Perfetto 基于自 Android 9 (P)
以来可用的平台服务,但默认情况下仅在 Android 11 (R)
。 在 Android 9 (P) 和 10 (Q)
上,您需要执行以下操作以确保 在开始之前启用跟踪服务:
# Needed only on Android 9 (P) and 10 (Q) on non-Pixel phones.
adb shell setprop persist.traced.enable 1
1.2 记录跟踪
命令行工具:
- 使用
tools/record_android_trace
帮助程序脚本。 - 直接使用设备上的命令:
/system/bin/perfetto
用户界面工具:
- 通过 Perfetto UI 中的记录页面。
- 使用设备上的系统跟踪应用
1.2.1 通过 Perfetto UI 记录跟踪
浏览器打开 ui.perfetto.dev,然后从左侧菜单中选择“记录新跟踪”。
如果不确定,请首先打开“CPU”选项卡下的“计划详细信息”。(这里生成命令需要的 CONFIG_FILE ,可查看 Recording settings )
确保设备已连接,然后选择“添加 ADB 设备”。一旦您的设备 已成功配对(您可能需要在设备上允许USB调试),选择“开始录制”按钮。
1.2.2 通过 cmdline 记录跟踪
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s \
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
/system/bin/perfetto
这个下面单独说明
1.2.3 System Tracing 的系统级应用抓取
捕获设备上的系统跟踪记录
- 启用开发者选项(如果尚未启用此选项)
- 打开开发者选项设置
- 在调试部分中,选择 System Tracing (系统跟踪)。此时会打开 System Tracing 应用,其中显示了应用菜单。
- 在应用菜单中,启用 显示 “快捷设置”图块
- 启用录制跟踪记录开关,该图块会变为启用状态,并且系统会显示常驻通知,通知您系统正在录制跟踪记录
- 完成这些操作后,可通过停用录制跟踪记录开关来停止跟踪
使用 ADB 导出报告
adb pull /data/local/traces/ .
2、perfetto 工具
如下命令生成文件格式.perfetto-trace
,导出报告adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace
,源码位置 external/perfetto/
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s \
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
使用 perfetto 工具,您可以通过 Android 调试桥 (adb) 在 Android 设备上收集性能信息。使用 adb shell perfetto … 命令调用 perfetto 工具。 perfetto 从您的设备上收集性能跟踪数据时会使用多种来源,例如:
- 使用 ftrace 收集内核信息
- 使用 atrace 收集服务和应用中的用户空间注释
- 使用 heapprofd 收集服务和应用的本地内存使用情况信息
2.1 数据源选择
- 轻量模式:只能选择一部分数据源,具体来说就是 atrace 和 ftrace。但此模式可提供类似于 systrace 的接口。
- 普通模式:从协议缓冲区获取其配置,并允许您更充分地利用 perfetto 功能,方法是使用 atrace 和 ftrace 之外的数据源。
2.2 语法参数
2.2.1 轻量模式
adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ]
[ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]...
--out FILE
选项 | 说明 |
---|---|
--time TIME[s|m|h] | -t TIME[s|m|h\] | 指定轨迹的持续时间(以秒、分钟或小时为单位)。例如,–time 1m 指定持续 1 分钟的跟踪记录。默认持续时间为 10 秒。 |
--buffer SIZE[mb|gb] | -b SIZE[mb|gb] | 指定环形缓冲区空间大小,以兆字节 (mb) 或千兆字节 (gb) 为单位。默认参数为 --buffer 32mb。 |
--size SIZE[mb|gb] | -s SIZE[mb|gb] | 指定文件大小上限,以兆字节 (mb) 或千兆字节 (gb) 为单位。默认情况下,perfetto 仅使用内存中的环形缓冲区。 |
--app | -a | Android (atrace) 应用名称 |
事件 | 说明 |
---|---|
ATRACE_CAT | 指定您想为其记录跟踪数据的 atrace 类别。 例如,以下命令会使用 atrace 跟踪窗口管理器:adb shell perfetto --out FILE wm 如需记录其他类别,请参 atrace 类别列表 :adb shell atrace --list_categories |
FTRACE_GROUP/FTRACE_NAME | 指定您想为其记录跟踪数据的 ftrace 事件。例如,以下命令会跟踪 sched/sched_switch 事件:adb shell perfetto --out FILE sched/sched_switch |
2.2.2 普通模式
adb shell perfetto [ --txt ] --config CONFIG_FILE --out FILE
选项 | 说明 |
---|---|
--config CONFIG_FILE | -c CONFIG_FILE | 指定配置文件的路径。在普通模式下,某些配置可能会在配置协议缓冲区中进行编码。此文件必须符合 AOSP trace_config.proto 中定义的协议缓冲区架构。根据 AOSP data_source_config.proto 中的定义,可以使用 TraceConfig 的 DataSourceConfig 成员来选择和配置数据源。可使用 Perfetto UI 生成 CONFIG_FILE |
--txt | 指示 perfetto 将配置文件解析为 pbtxt。此标志仅用于本地测试,不建议将其用于生产环境。 |
3、支持的数据源
3.1 ftrace
ftrace 数据源允许 perfetto 从内核获取事件。
可以通过在 DataSourceConfig 中设置 ftrace_config
来启用此来源。
可以启用的事件包括:
调度 activity:
- sched/sched_switch
- sched/sched_wakeup
- sched/sched_wakeup_new
- sched/sched_process_exec
- sched/sched_process_exit
- sched/sched_process_fork
- sched/sched_process_free
- sched/sched_process_hang
- sched/sched_process_wait
文件系统事件:
- ext4
- f2fs
- block
- atrace 事件
3.2 进程统计信息
通过进程统计信息数据源,您可以获取有关系统和各个进程的轮询计数器。
可以通过在 DataSourceConfig 中设置 process_stats_config
和 sys_stats_config
来启用此来源。
perfetto 生成的数据包括:
系统级
- /proc/meminfo
- /proc/vmstat
- /proc/stat
每个进程
- /proc/<pid>/status
- /proc/<pid>/oom_score_adj
3.3 heapprofd
借助 heapprofd,您可以对使用本地内存的原因进行采样。
可以通过在 DataSourceConfig 中设置 heapprofd_config
来启用此来源。此设置会生成 ProfilePackets
,包括调用堆栈的 Java 框架。
data_sources: {
config {
name: "android.heapprofd"
target_buffer: 0
heapprofd_config {
sampling_interval_bytes: 4096
shmem_size_bytes: 8388608
block_client: true
}
}
}
data_sources: {
config {
name: "android.java_hprof"
target_buffer: 0
java_hprof_config {
}
}
}
3.4 其他来源
可能会有更多可用数据源,具体取决于您的设备、操作系统版本以及内核。如需了解详情,请参阅 数据源配置 proto。