RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核啟動(dòng)速度優(yōu)化的幾個(gè)方法

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux充電站 ? 作者: Vincent ? 2023-10-04 15:07 ? 次閱讀

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所示,有skippedlpjtimer計(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)核,其他的編譯成模塊。

例如將必要的clocktty、pinctrl等編譯進(jìn)內(nèi)核

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2695

    瀏覽量

    47431
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40276
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209326
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式Linux啟動(dòng)時(shí)間優(yōu)化的秘密之三-內(nèi)核

    本文主要講述嵌入式Linux啟動(dòng)時(shí)間優(yōu)化的秘密之三-內(nèi)核,我們繼續(xù)上篇沒(méi)有講完的嵌入式Linux啟動(dòng)
    發(fā)表于 04-20 18:09 ?2455次閱讀

    嵌入式Linux啟動(dòng)時(shí)間優(yōu)化的秘密之四-啟動(dòng)腳本

    本文主要講述嵌入式Linux啟動(dòng)時(shí)間優(yōu)化的秘密,我們繼續(xù)上篇沒(méi)有講完的嵌入式Linux啟動(dòng)時(shí)間優(yōu)化
    發(fā)表于 04-21 09:22 ?2431次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>啟動(dòng)</b>時(shí)間<b class='flag-5'>優(yōu)化</b>的秘密之四-<b class='flag-5'>啟動(dòng)</b>腳本

    教你如何快速啟動(dòng)Linux 系統(tǒng)

    、 加速啟動(dòng)方法以上流程中每一步都可以進(jìn)行優(yōu)化,每步的優(yōu)化方法如下:1. 為加快從Flash 讀取內(nèi)核
    發(fā)表于 09-22 14:44

    linux內(nèi)核編譯

    title行下 Linux類(lèi) Title是指一個(gè)啟動(dòng)系統(tǒng)名稱(chēng) Root指定相應(yīng)內(nèi)核鏡像所在目錄/boot所在的磁盤(pán)分區(qū),hd[0-n]表示第幾個(gè)硬盤(pán),x表示[第
    發(fā)表于 10-26 14:14

    教你如何快速啟動(dòng)Linux 系統(tǒng)

    、 加速啟動(dòng)方法以上流程中每一步都可以進(jìn)行優(yōu)化,每步的優(yōu)化方法如下:1. 為加快從Flash 讀取內(nèi)核
    發(fā)表于 04-16 16:28

    全志Tina Linux 啟動(dòng)優(yōu)化

    本文轉(zhuǎn)載自全志V853在線文檔:https://v853.docs.aw-ol.com/soft/tina_boottime/ Tina Linux 啟動(dòng)優(yōu)化 啟動(dòng)
    發(fā)表于 05-24 10:32

    linux內(nèi)核啟動(dòng)內(nèi)核解壓過(guò)程分析

    linux啟動(dòng)時(shí)內(nèi)核解壓過(guò)程分析,一份不錯(cuò)的文檔,深入了解內(nèi)核必備
    發(fā)表于 03-09 13:39 ?1次下載

    Linux內(nèi)核文檔:ARM-啟動(dòng)

    Linux內(nèi)核文檔:ARM-啟動(dòng)
    發(fā)表于 10-30 10:15 ?6次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>文檔:ARM-<b class='flag-5'>啟動(dòng)</b>

    linux內(nèi)核啟動(dòng)流程

    Linux啟動(dòng)代碼真的挺大,從匯編到C,從Makefile到LDS文件,需要理解的東西很多。畢竟Linux內(nèi)核是由很多人,花費(fèi)了巨大的時(shí)間和精力寫(xiě)出來(lái)的。而且直到現(xiàn)在,這個(gè)世界上仍然
    發(fā)表于 11-14 16:19 ?4352次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>啟動(dòng)</b>流程

    linux內(nèi)核無(wú)法啟動(dòng)

     Linux啟動(dòng)過(guò)程中會(huì)出現(xiàn)一些故障,導(dǎo)致系統(tǒng)無(wú)法正常啟動(dòng),本文列舉了幾個(gè)應(yīng)用單用戶(hù)模式、GRUB命令操作、Linux救援模式的典型故障修
    發(fā)表于 11-14 17:26 ?3024次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b>無(wú)法<b class='flag-5'>啟動(dòng)</b>

    Linux系統(tǒng)啟動(dòng)時(shí)間優(yōu)化方案

    (1)首先是對(duì)Linux啟動(dòng)過(guò)程的跟蹤和分析,生成詳細(xì)的啟動(dòng)時(shí)間報(bào)告。 較為簡(jiǎn)單可行的方式是通過(guò)PrintkTime功能為啟動(dòng)過(guò)程的所有內(nèi)核
    發(fā)表于 12-01 12:54 ?466次閱讀

    linux啟動(dòng)優(yōu)化:mdev -s

    linux啟動(dòng)后加載根文件系統(tǒng)時(shí),會(huì)停留時(shí)間很久,跟人一種死機(jī)的感覺(jué),于是老大要求優(yōu)化linux啟動(dòng)時(shí)間。
    發(fā)表于 04-26 16:10 ?2024次閱讀

    Linux系統(tǒng)啟動(dòng)時(shí)間的極限優(yōu)化

    (1)首先是對(duì)Linux啟動(dòng)過(guò)程的跟蹤和分析,生成詳細(xì)的啟動(dòng)時(shí)間報(bào)告。?  較為簡(jiǎn)單可行的方式是通過(guò)PrintkTime功能為啟動(dòng)過(guò)程的所有
    發(fā)表于 04-02 14:38 ?553次閱讀

    Linux內(nèi)核定制方法

    Linux內(nèi)核定制方法說(shuō)明。
    發(fā)表于 03-25 11:25 ?9次下載

    Tina_Linux啟動(dòng)優(yōu)化開(kāi)發(fā)指南

    編寫(xiě)目的: 介紹TinaLinux下啟動(dòng)速度優(yōu)化使用方法
    的頭像 發(fā)表于 03-06 09:53 ?1269次閱讀
    Tina_<b class='flag-5'>Linux</b><b class='flag-5'>啟動(dòng)</b><b class='flag-5'>優(yōu)化</b>開(kāi)發(fā)指南
    RM新时代网站-首页