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 的信息。