啟動(dòng)耗時(shí)統(tǒng)計(jì)
printk time
打開(kāi)kernel配置:
kernel hacking --- >
[*] Show timing information on printks
打開(kāi)后,每個(gè)printk的前面都會(huì)顯示時(shí)間戳
主要用來(lái)測(cè)量?jī)?nèi)核啟動(dòng)過(guò)程各個(gè)階段的耗時(shí)
initcall_debug
眾所周知,kernel
啟動(dòng)時(shí)會(huì)執(zhí)行不同等級(jí)的initcall
,而每個(gè)initcall
的耗時(shí)也是可以統(tǒng)計(jì)的。
在kernel
的cmdline
中加入參數(shù)initcall_debug=1
:
initcall_debug=1
setargs_nand=setenv bootargs console=${console} earlyprintk=${earlyprintk} root=${nand_root} initcall_debug=${initcall_debug} init=${init}
開(kāi)啟后,就能打印每個(gè)initcall
函數(shù)調(diào)用及耗時(shí)。
bootgraph
內(nèi)核自帶了一個(gè)工具用于統(tǒng)計(jì)啟動(dòng)時(shí)間:scripts/bootgraph.pl
使用該工具需要打開(kāi)內(nèi)核配置CONFIG_PRINTK_TIME=y
,并且在cmdline
中加上"initcall_debug=1
"
系統(tǒng)啟動(dòng)之后,執(zhí)行命令:
dmesg|perl $(kernel_dir)/script/bootgraph.pl > out.svg
用瀏覽器查看out.svg
文件,可以看到內(nèi)核啟動(dòng)過(guò)程中各個(gè)階段的耗時(shí)。
這個(gè)工具有點(diǎn)類似于perf
的火焰圖,可以統(tǒng)計(jì)啟動(dòng)各階段的耗時(shí)。
bootchart
除了內(nèi)核自帶的工具,也有開(kāi)源的工具可用:bootchart
。
bootchart是一個(gè)用于linux啟動(dòng)過(guò)程性能分析的開(kāi)源軟件工具,在系統(tǒng)啟動(dòng)過(guò)程自動(dòng)收集CPU占用率、進(jìn)程等信息,并以圖形方式顯示分析結(jié)果,可用作指導(dǎo)優(yōu)化系統(tǒng)啟動(dòng)過(guò)程。
- 修改
kernel cmdline
。將其中的init
修改為“init=/sbin/bootchartd
”。 - 收集信息。
bootchartd
會(huì)從/proc/stat
,/proc/diskstat
,/proc/[pid]/stat
中采集信息,經(jīng)過(guò)處理后保存為bootchart.tgz
文件 - 轉(zhuǎn)換圖片。在
pc
上通過(guò)pybootchartgui.py
工具將bootchart.tgz
轉(zhuǎn)換為bootchart.png
,方便分析
最后也會(huì)成圖片供做分析,例如:
bootchar
主要用來(lái)測(cè)量掛載文件系統(tǒng)到主應(yīng)用程序啟動(dòng)過(guò)程中的耗時(shí)
gpio+示波器
可以找一個(gè)在系統(tǒng)啟動(dòng)過(guò)程中空閑的GPIO
,在適當(dāng)位置設(shè)置GPIO
電平。
通過(guò)示波器抓取波形可以得到各階段耗時(shí)。
通常該方法被用來(lái) 測(cè)量整個(gè)啟動(dòng)的耗時(shí),或者各階段的耗時(shí) ,該方法也是用的比較多的。
-
示波器
+關(guān)注
關(guān)注
113文章
6173瀏覽量
184357 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1362瀏覽量
40194 -
Linux
+關(guān)注
關(guān)注
87文章
11215瀏覽量
208740
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論