Tutorial: Linux kernel profiling with perf
9 days ago
- #Linux
- #Performance
- #Profiling
- Perf 是面向 Linux 2.6+ 系统的性能分析工具,其抽象了 CPU 硬件差异并提供简洁的命令行界面。
- Perf 基于 Linux 内核新版导出的 perf_events 接口实现。
- 该工具提供丰富的命令集用于收集分析性能与追踪数据,其架构设计类似 git 命令体系。
- 常用命令包括 annotate(注解)、record(记录)、report(报告)、stat(统计)和 top(动态视图),各自服务于不同的性能分析场景。
- Perf 支持硬件事件(CPU相关)、软件事件(如上下文切换)和追踪点事件,可通过'perf list'查看完整列表。
- 硬件事件与处理器型号强相关,软件事件则包含 context-switches(上下文切换)和 minor-faults(轻微缺页)等指标。
- 追踪点事件由内核 ftrace 框架实现,要求 Linux 内核版本不低于 2.6.3x。
- Perf stat 用于统计进程执行期间的事件计数,最终输出聚合指标。
- Perf record 采集样本并存储至 perf.data 文件,后续可通过 report 或 annotate 命令解析。
- Perf top 提供类似 top 命令的实时分析视图,直观展示耗时最高的函数。
- Perf bench 包含针对 Linux 内核各子系统的微基准测试,适用于压力测试和性能回归测试。
- 故障排查建议包括管理文件打开上限,以及理解 build-id 在二进制识别中的作用。
- 通过 sched_stat 和 sched_switch 事件,Perf 可分析程序休眠状态及其持续时间。