perf
是一个用于分析 Linux 系统性能的强大工具
perf record
:用于记录性能事件。它会在指定的时间间隔内收集系统中的性能事件数据,并将它们写入一个名为perf.data
的文件中。例如,要记录 CPU 使用率、内存访问和磁盘 I/O 事件,可以使用以下命令:
sudo perf record -e cpu-clock -e memory-access -e disk-io -- sleep 60
这将记录 60 秒内的性能事件数据。
perf report
:用于分析perf.data
文件中的性能事件数据。它会生成一个易于理解的报告,显示各种性能事件的计数、百分比和耗时等信息。例如,要分析刚刚记录的perf.data
文件,可以使用以下命令:
sudo perf report -n --stdio
这将显示一个类似于以下的报告:
# Overhead Command Shared Object Symbol # ........ ........ ............. ...... # 50.00% myprog myprog [.] my_function | |--50.00%-- main | start_thread | |--50.00%-- main | clone
这个报告表示 my_function
函数占用了 50% 的 CPU 时间,而 main
函数也占用了 50% 的 CPU 时间。
perf stat
:用于收集和报告系统性能统计信息。它可以帮助您了解系统的整体性能,例如 CPU 使用率、内存访问次数和磁盘 I/O 操作等。例如,要收集系统性能统计信息,可以使用以下命令:
sudo perf stat -I 1000
这将每 1000 毫秒收集一次性能统计信息。
perf diff
:用于比较两个perf.data
文件之间的性能差异。它可以帮助您了解在两个不同版本之间的性能变化。例如,要比较两个版本的perf.data
文件,可以使用以下命令:
sudo perf diff --stdio file1.perf.data file2.perf.data
这将显示一个类似于以下的报告:
# Diff: myprog-0.1 vs myprog-0.2 # # Overhead Command Shared Object Symbol # ........ ........ ............. ...... # -5.00% myprog myprog [.] my_function | |--5.00%-- main | start_thread | |--5.00%-- main | clone
这个报告表示 my_function
函数在 myprog-0.2
版本中比 myprog-0.1
版本慢了 5%。
这些只是 perf
命令的一些基本用法。您可以通过查看手册页(man perf
)和在线文档来了解更多关于 perf
的信息。