4. perf top 基本使用:启动、界面布局与快捷键
perf top 是 Linux 性能分析中最常用的实时采样工具,它能够以极低的开销持续采集 CPU 上正在执行的函数,并按采样命中次数排序展示。本节将带你从零启动 perf top,解读其界面布局,并掌握高频快捷键,为后续定位内核热函数打下操作基础。
4.1 启动 perf top
perf top 的启动命令非常简洁,但根据分析目标不同,常用参数组合有所区别。以下是最常用的启动方式:
| 场景 | 命令 | 说明 |
|---|---|---|
| 基础启动 | sudo perf top |
默认以 1ms 周期采样所有 CPU,显示内核与用户态函数 |
| 仅内核态 | sudo perf top -k vmlinux |
只显示内核符号,适合定位内核热函数 |
| 指定 CPU | sudo perf top -C 0,1 |
只采样 CPU 0 和 CPU 1,减少干扰 |
| 指定进程 | sudo perf top -p 1234 |
只分析 PID 为 1234 的进程 |
| 调整采样频率 | sudo perf top -F 99 |
每秒采样 99 次,降低开销 |
权限提示:perf top 需要 root 权限才能访问硬件 PMU 计数器,因此命令前必须加
sudo。如果遇到 "No permission to collect stats" 错误,请检查 /proc/sys/kernel/perf_event_paranoid 的值,建议设为 1 或更低。
启动后,终端会进入一个实时刷新的交互界面,默认每 2 秒刷新一次采样数据。下图展示了 perf top 启动后的核心流程:
4.2 界面布局解读
perf top 的终端界面分为四个主要区域,每个区域承载不同的信息。理解这些区域是高效使用 perf top 的前提。
各区域详细说明如下:
| 区域 | 内容 | 关键信息 |
|---|---|---|
| 状态栏 | 采样频率、事件类型、丢失率、总采样数 | 丢失率 > 5% 说明采样频率过高,需降低 -F 参数 |
| 列标题 | Samples(采样数)、Function(函数名) | 默认显示采样占比百分比 |
| 函数列表 | 按采样占比降序排列的函数名 | 占比最高的函数即为当前热函数 |
| 底部提示栏 | 快捷键提示、当前过滤条件 | 按 h 可查看完整快捷键列表 |
4.3 常用快捷键
perf top 提供了丰富的交互式快捷键,让你无需退出即可动态调整分析视角。以下是最高频使用的快捷键:
| 快捷键 | 功能 | 使用场景 |
|---|---|---|
h |
显示/隐藏帮助页面 | 初次使用或忘记快捷键时 |
d |
切换显示延迟(采样间隔) | 默认 2 秒,按 d 可改为 1 秒或 0.5 秒 |
e |
打开/关闭符号过滤输入框 | 只显示包含特定关键词的函数 |
z |
将当前列设置为排序基准 | 按采样数、占比或其他列排序 |
0-9 |
切换事件类型 | 0=cycles, 1=instructions, 2=cache-misses 等 |
q |
退出 perf top | 结束分析 |
实战技巧:当发现某个函数占比异常高时,立即按
e 输入该函数名进行过滤,可以排除其他函数干扰,专注观察该函数的采样波动。例如输入 native_write_msr 后,界面将只显示包含该字符串的函数。
4.4 实战:首次定位内核热函数
下面通过一个完整的操作序列,演示如何用 perf top 快速定位内核热函数:
- 启动采样:执行
sudo perf top -F 99 -k vmlinux,以 99Hz 频率仅采样内核态。 - 观察顶部函数:等待 10 秒,记录占比最高的 3 个函数。
- 过滤分析:按
e,输入排名第一的函数名,观察其采样占比是否持续增长。 - 切换事件:按
1切换到 instructions 事件,查看该函数的指令数占比。 - 记录数据:按
q退出,准备后续使用perf record进行深度采样。
常见误区:不要只看一次采样的结果。perf top 是实时工具,建议至少观察 30 秒,确认热函数占比稳定后再下结论。如果某个函数占比忽高忽低,可能是系统负载波动导致,需要结合
perf stat 做全局确认。