2025-02-27 22:25:34 +08:00
|
|
|
|
# perf 功能强大的linux性能分析工具
|
|
|
|
|
|
|
|
|
|
`perf [command] [options] [arguments]`
|
|
|
|
|
子命令 额外选项 要分析的程序或命令
|
|
|
|
|
|
|
|
|
|
## 性能概览
|
|
|
|
|
`perf stat <command>`
|
|
|
|
|
> 性能计数器
|
|
|
|
|
```
|
|
|
|
|
0.60 msec task-clock # 0.589 CPUs utilized cpu利用率
|
|
|
|
|
0 context-switches # 0.000 /sec 上下文切换次数
|
|
|
|
|
0 cpu-migrations # 0.000 /sec cpu切换
|
|
|
|
|
68 page-faults # 113.661 K/sec 页错误次数
|
|
|
|
|
1,772,372 cycles # 2.963 GHz 时钟周期
|
|
|
|
|
1,247,336 instructions # 0.70 insn per cycle 指令数量
|
|
|
|
|
229,972 branches # 384.396 M/sec 分支数量
|
|
|
|
|
8,262 branch-misses # 3.59% of all branches 未命中分支
|
|
|
|
|
|
|
|
|
|
0.001016124 seconds time elapsed 总用时
|
|
|
|
|
|
|
|
|
|
0.000000000 seconds user
|
|
|
|
|
0.001106000 seconds sys
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 记录性能数据
|
|
|
|
|
`perf record -g -o output.data <command>`
|
|
|
|
|
+ -o 指定输出文件
|
|
|
|
|
+ -g 启用调用图
|
|
|
|
|
|
|
|
|
|
`sudo perf record -a -g -o system.data`
|
|
|
|
|
+ -a 采集系统级数据
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 分析性能数据
|
|
|
|
|
`perf report -i output.data`
|
|
|
|
|
+ -i 指定输入文件
|
|
|
|
|
|
|
|
|
|
## 实时性能监控
|
|
|
|
|
`sudo perf top`
|
2025-04-20 09:43:55 +08:00
|
|
|
|
|
|
|
|
|
## 操作快捷键
|
|
|
|
|
| 快捷键 | 功能说明 |
|
|
|
|
|
|----------------------|--------------------------------------------|
|
|
|
|
|
| **h / ? / F1** | 显示帮助窗口 |
|
|
|
|
|
| **↑/↓/PgUp/PgDn/空格** | 上下浏览数据 |
|
|
|
|
|
| **q / Esc / Ctrl+C** | 退出浏览器或返回上一屏 |
|
|
|
|
|
| **Tab / Shift+Tab** | 切换不同事件组(多事件会话) |
|
|
|
|
|
| **Enter** | 深入查看当前符号(DSO/线程)并注解 |
|
|
|
|
|
| **Esc** | 退回上一级视图 |
|
|
|
|
|
| **+** | 展开/折叠一级调用链(callchain) |
|
|
|
|
|
| **a** | 注解当前符号(显示汇编代码与采样分布) |
|
|
|
|
|
| **C** | 折叠所有调用链 |
|
|
|
|
|
| **d** | 聚焦到当前动态共享库(DSO) |
|
|
|
|
|
| **e** | 展开/折叠主入口调用链 |
|
|
|
|
|
| **E** | 展开全部调用链 |
|
|
|
|
|
| **F** | 切换显示过滤条目的百分比 |
|
|
|
|
|
| **K** | 显示/隐藏列标题 |
|
|
|
|
|
| **L** | 聚焦到内核映射区域 |
|
|
|
|
|
| **S** | 调整显示的百分比阈值 |
|
|
|
|
|
| **i** | 显示上下文菜单 |
|
|
|
|
|
| **P** | 聚焦到当前处理器插槽(Socket) |
|
|
|
|
|
| **r** | 显示头部信息(如记录参数) |
|
|
|
|
|
| **s** | 将直方图保存到 `perf.hist.N` 文件 |
|
|
|
|
|
| **t** | 运行可用脚本(如火焰图生成) |
|
|
|
|
|
| **V** | 切换到 PMD 文件中的其他数据文件 |
|
|
|
|
|
| **/** | 聚焦到当前线程 |
|
|
|
|
|
| **0-9** | 切换详细模式(如显示调用链中的 DSO 名称) |
|
|
|
|
|
| **输入符号名** | 按名称过滤符号 |
|
|
|
|
|
| **事件编号(如1/2/3)** | 按事件组中的特定事件排序 |
|