Linux筆記-性能調優工具perf


參考文章:
http://blog.itpub.net/24585765/viewspace-2564885/
https://www.cnblogs.com/fattyCoder/p/10167740.html

Perf (Performance Event)是 Linux 系統原生提供的性能分析工具, 會返回 CPU 正在執行的函數名以及調用棧

常用命令:
perf record 記錄信息到perf.data

perf report 生成報告;

perf diff 對兩個記錄進行diff;

perf evlist 列出記錄的性能事件;

perf annotate 顯示perf.data函數代碼;

perf archive 將相關符號打包,方便在其它機器進行分析;

perf scriptperf.data輸出可讀性文本;


1. 以perf record開始:

perf record -F 99 -a  -g   -p 1234 -- sleep 30

執行完成后生成perf.data文件
參數解釋
perf record: 收集采樣信息,並將其記錄在數據文件中。隨后可通過其它工具對數據文件進行分析。
-F 99 :表示采樣頻率99HZ
-a: 表示對所有CPU采樣,如果只需針對特定的CPU,可以使用-C
-g:表示記錄調用棧
-p 1234 :表示要來分析的程序進程號為1234
sleep 30:表示分析持續30秒


生成火焰圖:

  1. 獲取 FlameGraph組件
git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph
  1. 根據perf.data畫圖
perf script > out.perf
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl out.folded > perf_your_name.svg

2.perf top: 查看實時信息,類似於linux的top命令,對系統性能進行實時分析。

-g:可以查看堆棧調用
-a:查看所有CPU

perf top -g -p 1234
輸出如下:
perf top

按?鍵,輸出如下:
perf top

ChlidrenSelf的含義
https://nanxiao.me/perf-note-4-profile-application/
如以下代碼,
Self表示函數本身的overhead:如果foo函數的overhead占60%,那么bar的Self overhead就是40%(刨除foo所占部分)。因為foo和bar都是main的子函數,所以二者的overhead都要計算入main的Children overhead。

void foo(void) {
    /* do something */
}

void bar(void) {
    /* do something */
    foo();
}

int main(void) {
    bar()
    return 0;
}

附錄:

序號 命令 作用
1 annotate 解析perf record生成的perf.data文件,顯示被注釋的代碼。
2 archive 根據數據文件記錄的build-id,將所有被采樣到的elf文件打包。利用此壓縮包,可以再任何機器上分析數據文件中記錄的采樣數據。
3 bench perf中內置的benchmark,目前包括兩套針對調度器和內存管理子系統的benchmark。
4 buildid-cache 管理perf的buildid緩存,每個elf文件都有一個獨一無二的buildid。buildid被perf用來關聯性能數據與elf文件。
5 buildid-list 列出數據文件中記錄的所有buildid。
6 diff 對比兩個數據文件的差異。能夠給出每個符號(函數)在熱點分析上的具體差異。
7 evlist 列出數據文件perf.data中所有性能事件。
8 inject 該工具讀取perf record工具記錄的事件流,並將其定向到標准輸出。在被分析代碼中的任何一點,都可以向事件流中注入其它事件。
9 kmem 針對內核內存(slab)子系統進行追蹤測量的工具
10 kvm 用來追蹤測試運行在KVM虛擬機上的Guest OS。
11 list 列出當前系統支持的所有性能事件。包括硬件性能事件、軟件性能事件以及檢查點。
12 lock 分析內核中的鎖信息,包括鎖的爭用情況,等待延遲等。
13 mem 內存存取情況
14 record 收集采樣信息,並將其記錄在數據文件中。隨后可通過其它工具對數據文件進行分析。
15 report 讀取perf record創建的數據文件,並給出熱點分析結果。
16 sched 針對調度器子系統的分析工具。
17 script 執行perl或python寫的功能擴展腳本、生成腳本框架、讀取數據文件中的數據信息等。
18 stat 執行某個命令,收集特定進程的性能概況,包括CPI、Cache丟失率等。
19 test perf對當前軟硬件平台進行健全性測試,可用此工具測試當前的軟硬件平台是否能支持perf的所有功能。
20 timechart 針對測試期間系統行為進行可視化的工具
21 top 類似於linux的top命令,對系統性能進行實時分析。
22 trace 關於syscall的工具。
23 probe 用於定義動態檢查點。

注:

sudo  perf record -F 99 -a  -g  -p 118521 -- sleep 30
Warning:
PID/TID switch overriding SYSTEMPermission error mapping pages.
Consider increasing /proc/sys/kernel/perf_event_mlock_kb,
or try again with a smaller value of -m/--mmap_pages.
(current value: -1)
sleep: Terminated

增加參數: -m 2后解決

sudo  perf record -F 99 -a  -g  -m 2 -p 118521 -- sleep 30


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM