1.perf 是 Linux 系統中性能分析工具,用于收集性能相關的信息。它可以用于查看 CPU 使用情況、內存性能、磁盤 I/O 等,以幫助開發者找到性能瓶頸。
以下是一些 perf 常見用法和示例:
1. CPU Profiling
a. 查看 CPU 使用率
perf stat -e cpu-clock -a sleep 5
這個命令將統計所有 CPU 上運行的進程的 cpu-clock 事件,持續 5 秒鐘。b. 檢測函數耗時
perf record -e cycles -g -p <PID>
perf report
這個命令將在指定的進程上收集函數調用信息,然后通過 perf report 查看。
2. 內存分析
a. 查看內存分配情況
perf record -e malloc:*
perf report
這個命令將記錄程序中的內存分配事件,然后通過 perf report 查看。
3. I/O 分析
a. 查看磁盤 I/O 情況
perf record -e block:block_rq_insert -a
perf report
這個命令將記錄所有塊 I/O 請求的插入事件,然后通過 perf report 查看。
4. Trace 系統調用
perf trace -a
這個命令將跟蹤系統調用,顯示正在運行的進程的詳細信息。
當使用 perf 進行性能調優時,一般會經歷以下步驟:
收集性能數據: 使用 perf 工具收集程序運行時的性能數據。分析性能數據: 通過 perf 工具的報告,分析程序中的性能瓶頸。優化代碼: 根據分析結果,對程序進行優化。重新收集和分析: 重復上述步驟,直至達到滿意的性能。
編譯代碼
gcc -o fibonacci fibonacci.c啟動perf記錄
perf record -g -o perf.data ./fibonacci生成報告
perf report優化的方式可能包括改進算法、減少函數調用、并行化等。在每次優化后,都要重新運行 perf,直到達到滿意的性能水平。
2.lscpu 對于 Linux 機器,可以用 lscpu、cat /proc/info 等命令查看它的 CPU 信息, 比如下面這臺機器
看到有 48 個 CPU。 要理解這些 CPU 在物理上是怎么分布的(layout)。