Perf 是一个 Linux 性能分析工具。它可以帮助我们找出程序的性能瓶颈,提高代码运行效率。Perf 的全称是 Performance Counters for Linux (PCL)。它是 Linux 内核中一种用于性能分析的子系统,通过统计硬件和软件事件,帮助我们了解程序的运行情况。
一、Perf 的用法
Perf 提供了许多子命令来完成不同的性能分析任务,常用的子命令如下:
二、Perf 的原理
Perf 是基于硬件性能计数器(Hardware Performance Counters,HPC)的性能分析工具。硬件性能计数器是 CPU 内部的一种特殊寄存器,用于记录特定事件的发生次数。通过读取这些计数器的值,我们可以了解程序的运行情况,如缓存未命中次数、分支预测错误次数等。Perf 通过与 Linux 内核的 perf_event 子系统交互,获取这些硬件性能计数器的值。
三、Perf 的使用示例
1. 使用 perf stat 统计程序运行时的硬件事件:
2. 使用 perf record 记录程序运行时的性能事件:
3. 使用 perf report 分析记录的性能事件:
4. 使用 perf top 实时显示系统中占用 CPU 最多的函数:
5. 使用 perf annotate 对特定函数进行详细的性能分析:
四、注意事项
五、Perf 子命令详解
1. perf stat
perf stat 用于统计程序运行时的硬件事件。它可以帮助我们了解程序的运行状况,如 CPU 使用率、缓存未命中次数等。常用选项:
2. perf record
perf record 用于记录程序运行时的性能事件。它会将记录的性能事件保存到文件(默认为 perf.data),以便后续分析。常用选项:
3. perf report
perf report 用于分析 perf record 保存的性能事件。它会生成一个报告,展示程序中各个函数的性能消耗。常用选项:
4. perf top
perf top 用于实时显示系统中占用 CPU 最多的函数。它类似于 top 命令,但展示的是函数级别的性能信息。常用选项:
5. perf annotate
perf annotate 用于对特定函数进行详细的性能分析。它会展示函数的汇编代码以及每条指令的性能消耗。常用选项:
六、Perf 使用技巧