目錄
1. perf 作用
2. perf 安裝
3. perf 使用示例
3.1 耗時統(tǒng)計,畫出火焰圖
1. 下載繪制火焰圖的開源pl代碼
2. 執(zhí)行以下命令
3. 用瀏覽器打開svg文件,看當(dāng)前進(jìn)程各子模塊耗時占比
1. perf 作用
Perf 是Linux kernel自帶的系統(tǒng)性能優(yōu)化工具。 Perf的優(yōu)勢在于與Linux Kernel的緊密結(jié)合,它可以最先應(yīng)用到加入Kernel的new feature。pef可以用于查看熱點函數(shù),查看cashe miss的比率,從而幫助開發(fā)者來優(yōu)化程序性能,也可以分析程序運行期間發(fā)生的硬件事件,比如 instructions retired ,processor clock cycles 等;您也可以分析
軟件事件,比如 Page Fault 和進(jìn)程切換,這使得 Perf 擁有了眾多的性能分析能力,
通過它,應(yīng)用程序可以利用 PMU,tracepoint 和內(nèi)核中的特殊計數(shù)器來進(jìn)行性能統(tǒng)計。它不但可以分析指定應(yīng)用程序的性能問題 (per thread),也可以用來分析內(nèi)核的性能問題,當(dāng)然也可以同時分析應(yīng)用代碼和內(nèi)核,從而全面理解應(yīng)用程序中的性能瓶頸。
舉例來說,使用 Perf 可以計算每個時鐘周期內(nèi)的指令數(shù),稱為 IPC,IPC 偏低表明代碼沒有很好地利用 CPU。Perf 還可以對程序進(jìn)行函數(shù)級別的采樣,從而了解程序的性能瓶頸究竟在哪里等等。Perf 還可以替代 strace,可以添加動態(tài)內(nèi)核 probe 點,還可以做 benchmark 衡量調(diào)度器的好壞。。。
它和Oprofile性能調(diào)優(yōu)工具等的基本原理都是對被監(jiān)測對象進(jìn)行采樣,最簡單的情形是根據(jù) tick 中斷進(jìn)行采樣,即在 tick 中斷內(nèi)觸發(fā)采樣點,在采樣點里判斷程序當(dāng)時的上下文。假如一個程序 90% 的時間都花費在函數(shù) foo() 上,那么 90% 的采樣點都應(yīng)該落在函數(shù) foo() 的上下文中。運氣不可捉摸,那么只要采樣頻率足夠高,采樣時間足夠長,那么以上推論就比較可靠。因此,通過 tick 觸發(fā)采樣,我們便可以了解程序中哪些地方最耗時間,從而重點分析。
上面介紹了perf的原理,“根據(jù) tick 中斷進(jìn)行采樣,即在 tick 中斷內(nèi)觸發(fā)采樣點,在采樣點里判斷程序當(dāng)時的上下文”,我們可以改變采樣的觸發(fā)條件使得我們可以獲得不同的統(tǒng)計數(shù)據(jù),例如 以時間點 ( 如 tick) 作為事件觸發(fā)采樣便可以獲知程序運行時間的分布;以 cache miss 事件觸發(fā)采樣便可以知道 cache miss 的分布,即 cache 失效經(jīng)常發(fā)生在哪些程序代碼中。如此等等。
2. perf 安裝
sudo apt-get install linux-tools-common
sudo apt-get install linux-tools-"$(uname -r)"
sudo apt-get install linux-cloud-tools-"$(uname -r)"
sudo apt-get install linux-tools-generic
sudo apt-get install linux-cloud-tools-generic
若安裝出現(xiàn) 類似 “Unable to locate package linux-cloud-tools-4.4.50-040450-generic” 現(xiàn)象,
則 解決方法:
1).? 更換軟件源, 然后 sudo apt-get update, 以及?sudo apt-get upgrade, 然后 再次安裝
2).? 源碼安裝
sudo apt-get install linux-source
cd /usr/src/linux-source-4.4.0/tools/perf
make
make install
sudo cp ./perf /usr/bin/perf
測試是否安裝成功:perf --version, 例如
johnpc@john:~$ perf --version
perf version 5.15.99
3. perf 使用示例
3.1 耗時統(tǒng)計,畫出火焰圖
1. 下載繪制火焰圖的開源pl代碼
地址:GitHub - brendangregg/FlameGraph: Stack trace visualizer
主要使用其中的兩個腳本:stackcollapse-perf.pl 和?flamegraph.pl?
2. 執(zhí)行以下命令
top #查看你要監(jiān)控的進(jìn)程的PID, 此處比如wps的PID為?171622
sudo perf record -F 99 -a -g -p 171622 #在當(dāng)前目錄下生成 perf.data 記錄文件
sudo perf script -f > wps.perf # 將 perf.data文件轉(zhuǎn)換成 xxx.perf 文件
sudo /path-to/stackcollapse-perf.pl wps.perf > wps.folded #從 xxx.perf文件生成 xxx.folded文件
sudo /path-to/flamegraph.pl wps.perf > wps.svg #從 xxx.folded 文件生成 xxx.svg 制圖文件
perf record 各參數(shù)的含義:
-F 99:每秒采樣99
-a:記錄系統(tǒng)范圍內(nèi)所有cpu的集合
-g:記錄調(diào)用棧
-p:指定進(jìn)程id--sleep n
:n秒后停止
-f :File perf.data not owned by current user or root (use -f to override)
3. 用瀏覽器打開svg文件,看當(dāng)前進(jìn)程各子模塊耗時占比
?點擊每個長方塊,可以進(jìn)入看到其子模塊的耗時占比。
如果svg圖出現(xiàn) unknown 函數(shù),使用如下命令
sudo perf record -e cpu-clock?--call-graph dwarf
?-p pid
范例:perf record -e cpu-clock -g -p 29713 --call-graph dwarf
?
使用–call-graph dwarf 之后record生成的perf.data很大,大家生成的時候要時刻注意設(shè)備剩余空間是否足夠。
參考:
perf性能分析工具使用分享 - 知乎
【Ubuntu】Perf工具的使用 - 第一PHP社區(qū)
系統(tǒng)性能分析工具--Perf - 知乎
使用Flame Graph進(jìn)行系統(tǒng)性能分析文章來源:http://www.zghlxwxcb.cn/news/detail-527125.html
Flame Graphs文章來源地址http://www.zghlxwxcb.cn/news/detail-527125.html
到了這里,關(guān)于Debug_性能分析工具_(dá)Perf +的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!