之前小弟一直在宣傳推廣火焰圖,結(jié)果是很多童鞋凡事都用火焰圖。說實(shí)話,火焰圖特別適合分析運(yùn)行時熱點(diǎn)(無論是on-cpu、off-cpu、還是內(nèi)存等,火焰圖的想象力可以無窮放大),但是你要分析一個的如果是一個時序問題,比如系統(tǒng)啟動的慢、一個軟件啟動的慢,用火焰圖固然可能有一點(diǎn)幫助,但是幫助肯定很微妙。
因?yàn)檫@種某個過程慢的問題,是一個時序問題。不是一個運(yùn)行時熱點(diǎn)的問題,所以你最重要的是畫出來你的這個過程的時序圖。這里面說不定有I/O的牽絆,說不定就是狂占CPU,說不定誰傻不拉幾地在sleep。
Linux界有一個殺手級分析Linux本身啟動慢的工具,叫做bootchart,它其實(shí)把啟動過程中進(jìn)程的IO,CPU占用情況進(jìn)行了描述。注意這類圖都有一個共同特點(diǎn),橫軸是時間,縱軸是CPU、線程等的狀態(tài)(運(yùn)行、睡眠、IO什么的)。
bootchart確實(shí)有利于分析開機(jī)過程,但是你平時某個軟件啟動慢呢?或者更廣泛地說,某個特定過程特別慢呢?或者更加更加廣泛地說,我寫的程序在系統(tǒng)里面是怎么在運(yùn)行,幾個線程怎么在跑?我們則要描繪出它的時序圖。
這個時候,我們可以用perf的timechart,比如,下面我們寫一個很簡單的包含了2個線程周期循環(huán)做事情和睡眠的代碼:
我們運(yùn)行上面這個a.out,下面我們用perf錄制系統(tǒng)的sched情況:
~$ sudo perf sched record -a^C[ perf record: Woken up 1 times to write data ][perfrecord:Capturedandwrote1.909MBperf.data(9039samples)]
接下來生成timechart:
~$ sudo perf timechartWritten6.4secondsoftracetooutput.svg.
我們用firefox打開這個時序圖:
時序圖上我們看到了我的8個CPU的運(yùn)行情況,以及a.out中2個線程一會兒藍(lán)色(running)一會灰色(sleeping)的情況。我們看到,系統(tǒng)差不多在用CPU2和CPU7跑我們a.out里面的2個占用CPU比較高線程。
不過,這類工具里面壓軸的不是perf timechart,說實(shí)話,有點(diǎn)太粗糙了!我們來看看大名鼎鼎的內(nèi)核鯊魚——kernelshark。
下面我們用trace-cmd來錄制sched相關(guān)的trace點(diǎn):
~$ sudo trace-cmd record -e 'sched_wakeup*' -e sched_switch -e 'sched_migrate*'Hit Ctrl^C to stop recording^CCPU0 data recorded at offset=0x60e000 61440 bytes in sizeCPU1 data recorded at offset=0x61d000 184320 bytes in sizeCPU2 data recorded at offset=0x64a000 24576 bytes in sizeCPU3 data recorded at offset=0x650000 12288 bytes in sizeCPU4 data recorded at offset=0x653000 12288 bytes in sizeCPU5 data recorded at offset=0x656000 86016 bytes in sizeCPU6 data recorded at offset=0x66b000 172032 bytes in sizeCPU7 data recorded at offset=0x69500028672bytesinsize
用kernelshark來打開錄制的點(diǎn):
~$ kernelshark trace.datLoading"trace.dat"
看到下面的圖形界面:
我們可以在UI上面進(jìn)行各種操作,比如我們關(guān)注a.out,我們就選擇task:
我們得到這樣的視圖:
比如我圖上畫的那個點(diǎn),a.out的顏色發(fā)生了變化,而下面的文字則表達(dá)了發(fā)生變化的原因是調(diào)度,調(diào)度的目標(biāo)是swapper,這個調(diào)度點(diǎn)發(fā)生在CPU4上面:
如果你期待的是一個橫軸是時間,縱軸是每個線程、CPU在某個時間段里面在干什么的圖,kernelshark,你當(dāng)然值得擁有。
原文標(biāo)題:宋寶華:當(dāng)Linux內(nèi)核遭遇鯊魚—kernelshark
文章出處:【微信公眾號:Linuxer】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
Linux
+關(guān)注
關(guān)注
87文章
11432瀏覽量
212479
原文標(biāo)題:宋寶華:當(dāng)Linux內(nèi)核遭遇鯊魚—kernelshark
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
概倫電子芯片級HBM靜電防護(hù)分析平臺ESDi介紹

電機(jī)端蓋沖壓工藝分析與級進(jìn)模設(shè)計(jì)
電氣火災(zāi)的“隱形殺手”:故障電弧,你了解多少?

警惕靜電:電路板的隱形殺手? ?

工業(yè)級連接器的抗UV性能分析

電池(包級)測試系統(tǒng)的技術(shù)原理和應(yīng)用
汽車級PMIC在BDU和PDU中的應(yīng)用分析

工業(yè)級網(wǎng)線標(biāo)準(zhǔn)分析
電流隱患大揭秘:電氣短路——火災(zāi)背后的“無形殺手”

國產(chǎn)網(wǎng)表級功耗分析EDA大幅提升精度與性能

用opa847搭的兩級放大電路,出現(xiàn)震蕩的原因?
Moldex3D模流分析之晶圓級封裝(EWLP)制程

評論