kernel壓縮方式
kernel
有不同的壓縮格式,常見(jiàn)的如gz
、xz
、lzma
等。
不同的壓縮格式,解壓速度就不同 ,通過(guò)比較不同壓縮方式的啟動(dòng)時(shí)間和flash占用情況,選擇一種符合實(shí)際情況的,以此進(jìn)行優(yōu)化。
加載位置
內(nèi)核鏡像可以由kernel
自解壓,也可以由uboot
進(jìn)行解壓。
對(duì)于kernel
自解壓的情況,如果壓縮過(guò)的kernel
與解壓后的kernel
地址沖突,則會(huì)先把自己復(fù)制到安全的地方,然后再解壓,防止自我覆蓋。這就需要耗費(fèi)復(fù)制的時(shí)間。
即把加載地址和運(yùn)行地址設(shè)置為不同地址,可以減少耗時(shí)。
內(nèi)核裁剪
裁剪內(nèi)核是必要的,如果內(nèi)核鏡像太大,那么解壓內(nèi)核就需要很長(zhǎng)時(shí)間,所以?xún)?nèi)核要盡量裁剪。
裁剪內(nèi)核,可以減少解壓耗時(shí)。初始化內(nèi)容少了,也會(huì)減少耗時(shí)。
因此裁剪內(nèi)核時(shí),要考慮將不需要的功能都去掉。
預(yù)設(shè)置lpj數(shù)值
LPJ
也就是loops_per_jiffy
,每次啟動(dòng)都會(huì)計(jì)算一次,但如果沒(méi)有做修改的話(huà),這個(gè)值每次啟動(dòng)算出來(lái)都是一樣的,可以直接提供數(shù)值跳過(guò)計(jì)算。
如下log
所示,有skipped
,lpj
由timer
計(jì)算得來(lái),不需要再校準(zhǔn)calibrate
了。
[ 0.019918] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
如果沒(méi)有skipped
,則可以在cmdline
中添加lpj=xxx
進(jìn)行預(yù)設(shè)
initcall優(yōu)化
如前面提到,initcall
耗時(shí)是可以打印出來(lái)的,在cmdline
中設(shè)置initcall_debug=1
,即可打印跟蹤所有內(nèi)核初始化過(guò)程中調(diào)用的順序以及耗時(shí)。
[ 0.021772] initcall sunxi_pinctrl_init+0x0/0x44 returned 0 after 9765 usecs
[ 0.067694] initcall param_sysfs_init+0x0/0x198 returned 0 after 29296 usecs
[ 0.070240] initcall genhd_device_init+0x0/0x88 returned 0 after 9765 usecs
[ 0.080405] initcall init_scsi+0x0/0x90 returned 0 after 9765 usecs
[ 0.090384] initcall mmc_init+0x0/0x84 returned 0 after 9765 usecs
根據(jù)打印信息,可以對(duì)耗時(shí)較多的initcall
進(jìn)行優(yōu)化。
內(nèi)核initcall_module并行
initcall
有很多等級(jí),但比較耗時(shí)的是module
。
如果是多核,可以考慮將module_initcall
并行執(zhí)行來(lái)節(jié)省時(shí)間。
目前內(nèi)核do_initcalls
是一個(gè)一個(gè)按照順序來(lái)執(zhí)行,可以修改成新建內(nèi)核線程來(lái)執(zhí)行
減少pty/tty個(gè)數(shù)
加入initcall
打印之后,發(fā)現(xiàn)pty/tty init
耗時(shí)很多,可減少個(gè)數(shù)來(lái)縮短init
時(shí)間。
initcall pty_init+0x0/0x3c4 returned 0 after 239627 usecs
initcall chr_dev_init+0x0/0xdc returned 0 after 36581 usecs
內(nèi)核module
只把必須要加進(jìn)內(nèi)核的才編譯進(jìn)內(nèi)核,其他的編譯成模塊。
例如將必要的clock
、tty
、pinctrl
等編譯進(jìn)內(nèi)核
-
模塊
+關(guān)注
關(guān)注
7文章
2695瀏覽量
47431 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40276 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209326
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論