亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

嵌入式產(chǎn)品中,系統(tǒng)啟動速度是很關鍵的指標,對系統(tǒng)啟動速度的優(yōu)化,通常我們稱之為“快啟”。

要對系統(tǒng)啟動速度進行優(yōu)化,首先要知道如何統(tǒng)計系統(tǒng)啟動的時間。

下面介紹幾種統(tǒng)計內(nèi)核啟動耗時的方法,以及對內(nèi)核啟動速度優(yōu)化的幾個方法。

一、啟動耗時統(tǒng)計

printk time

打開kernel配置:

kernel hacking --->
[*] Show timing information on printks

登錄后復制

打開后,每個printk的前面都會顯示時間戳

主要用來測量內(nèi)核啟動過程各個階段的耗時

initcall_debug

眾所周知,kernel啟動時會執(zhí)行不同等級的initcall,而每個initcall的耗時也是可以統(tǒng)計的。

kernelcmdline中加入?yún)?shù)initcall_debug=1

initcall_debug=1
setargs_nand=setenv bootargs console=${console} earlyprintk=${earlyprintk} root=${nand_root} initcall_debug=${initcall_debug} init=${init}

登錄后復制

開啟后,就能打印每個initcall函數(shù)調(diào)用及耗時。

bootgraph

內(nèi)核自帶了一個工具用于統(tǒng)計啟動時間:scripts/bootgraph.pl

使用該工具需要打開內(nèi)核配置CONFIG_PRINTK_TIME=y,并且在cmdline中加上"initcall_debug=1"

系統(tǒng)啟動之后,執(zhí)行命令:

dmesg|perl $(kernel_dir)/script/bootgraph.pl > out.svg

登錄后復制

用瀏覽器查看out.svg文件,可以看到內(nèi)核啟動過程中各個階段的耗時。

這個工具有點類似于perf的火焰圖,可以統(tǒng)計啟動各階段的耗時。

bootchart

除了內(nèi)核自帶的工具,也有開源的工具可用:bootchart。

bootchart是一個用于linux啟動過程性能分析的開源軟件工具,在系統(tǒng)啟動過程自動收集CPU占用率、進程等信息,并以圖形方式顯示分析結果,可用作指導優(yōu)化系統(tǒng)啟動過程。

    修改kernel cmdline。將其中的init修改為“init=/sbin/bootchartd”。
    收集信息。bootchartd會從/proc/stat,/proc/diskstat/proc/[pid]/stat中采集信息,經(jīng)過處理后保存為bootchart.tgz文件
    轉換圖片。在pc上通過pybootchartgui.py工具將bootchart.tgz轉換為bootchart.png,方便分析

    最后也會成圖片供做分析,例如:

    bootchar主要用來測量掛載文件系統(tǒng)到主應用程序啟動過程中的耗時

    gpio+示波器

    可以找一個在系統(tǒng)啟動過程中空閑的GPIO,在適當位置設置GPIO電平。

    通過示波器抓取波形可以得到各階段耗時。

    通常該方法被用來測量整個啟動的耗時,或者各階段的耗時,該方法也是用的比較多的。

    二、內(nèi)核優(yōu)化方法

    kernel壓縮方式

    kernel有不同的壓縮格式,常見的如gz、xzlzma等。

    不同的壓縮格式,解壓速度就不同,通過比較不同壓縮方式的啟動時間和flash占用情況,選擇一種符合實際情況的,以此進行優(yōu)化。

    加載位置

    內(nèi)核鏡像可以由kernel自解壓,也可以由uboot進行解壓。

    對于kernel自解壓的情況,如果壓縮過的kernel與解壓后的kernel地址沖突,則會先把自己復制到安全的地方,然后再解壓,防止自我覆蓋。這就需要耗費復制的時間。

    即把加載地址運行地址設置為不同地址,可以減少耗時。

    內(nèi)核裁剪

    裁剪內(nèi)核是必要的,如果內(nèi)核鏡像太大,那么解壓內(nèi)核就需要很長時間,所以內(nèi)核要盡量裁剪。

    裁剪內(nèi)核,可以減少解壓耗時。初始化內(nèi)容少了,也會減少耗時。

    因此裁剪內(nèi)核時,要考慮將不需要的功能都去掉。

    預設置lpj數(shù)值

    LPJ也就是loops_per_jiffy,每次啟動都會計算一次,但如果沒有做修改的話,這個值每次啟動算出來都是一樣的,可以直接提供數(shù)值跳過計算。

    如下log所示,有skipped,lpjtimer計算得來,不需要再校準calibrate了。

    [ 0.019918] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)

    登錄后復制

    如果沒有skipped,則可以在cmdline中添加lpj=xxx進行預設

    initcall優(yōu)化

    如前面提到,initcall耗時是可以打印出來的,在cmdline中設置initcall_debug=1,即可打印跟蹤所有內(nèi)核初始化過程中調(diào)用的順序以及耗時。

    [ 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ù)打印信息,可以對耗時較多的initcall進行優(yōu)化。

    內(nèi)核initcall_module并行

    initcall有很多等級,但比較耗時的是module

    如果是多核,可以考慮將module_initcall并行執(zhí)行來節(jié)省時間。

    目前內(nèi)核do_initcalls是一個一個按照順序來執(zhí)行,可以修改成新建內(nèi)核線程來執(zhí)行

    減少pty/tty個數(shù)

    加入initcall打印之后,發(fā)現(xiàn)pty/tty init耗時很多,可減少個數(shù)來縮短init時間。

    initcall pty_init+0x0/0x3c4 returned 0 after 239627 usecs
    initcall chr_dev_init+0x0/0xdc returned 0 after 36581 usecs

    登錄后復制

    內(nèi)核module

    只把必須要加進內(nèi)核的才編譯進內(nèi)核,其他的編譯成模塊。

    例如將必要的clockttypinctrl等編譯進內(nèi)核

    三、其他優(yōu)化

    uboot

    如果是RISC-V架構,可以考慮去掉uboot

    XIP

    xipeXecute In Place。即芯片內(nèi)執(zhí)行,是指CPU直接從存儲器中讀取程序代碼執(zhí)行,而不用再讀到內(nèi)存中。

    一般我們的程序都是放到flash中,系統(tǒng)啟動時,把程序從flash拷貝到ddr中執(zhí)行,而xip技術則不需要拷貝程序到ddr,所以速度會很快。

    這項技術是必須要芯片支持才行,可以看看芯片手冊中對SPI的描述是否支持XIP功能。

    四、總結

    以上對系統(tǒng)啟動速度的優(yōu)化,歸根結底是提供一些思路、一些方法。

    要優(yōu)化啟動速度,通常來說需要對整個系統(tǒng)的啟動有比較深入的了解。

    優(yōu)化無止境,需要根據(jù)目標來進行優(yōu)化,綜合考慮啟動速度和效果。

以上就是很有用的速度優(yōu)化:讓系統(tǒng)啟動速度更快的詳細內(nèi)容,更多請關注www.92cms.cn其它相關文章!

分享到:
標簽:優(yōu)化 很有用 更快 系統(tǒng)啟動 速度
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定