新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Linux系統(tǒng)啟動時間優(yōu)化方案

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

作者: 時間:2011-05-20 來源:網(wǎng)絡(luò) 收藏

(1)首先是對過程的跟蹤和分析,生成詳細(xì)的報告。

本文引用地址:http://butianyuan.cn/article/150727.htm

  較為簡單可行的方式是通過PrintkTime功能為過程的所有內(nèi)核信息增加戳,便于匯總分析。PrintkTime最早為CELF所提供的一個內(nèi)核補(bǔ)丁,在后來的Kernel 2.6.11版本中正式納入標(biāo)準(zhǔn)內(nèi)核。所以大家可能在新版本的內(nèi)核中直接啟用該功能。如果你的內(nèi)核因為某些原因不能更新為2.6.11之后的版本,那么可以參考CELF提供的方法修改或直接下載它們提供的補(bǔ)?。篽ttp://tree.celinuxforum.org/CelfPubWiki/PrintkTimes

  開啟PrintkTime功能的方法很簡單,只需在內(nèi)核啟動參數(shù)中增加“time”即可。當(dāng)然,你也可以選擇在編譯內(nèi)核時直接指定“Kernel hacking”中的“Show timing information on printks”來強(qiáng)制每次啟動均為內(nèi)核信息增加戳。這一種方式還有另一個好處:你可以得到內(nèi)核在解析啟動參數(shù)前所有信息的時間。因此,我選擇后一種方式。

  當(dāng)完成上述配置后,重新啟動,然后通過以下命令將內(nèi)核啟動信息輸出到文件:

  dmesg -s 131072 > ktime

  然后利用一個腳本“show_delta”(位于Linux源碼的scripts文件夾下)將上述輸出的文件轉(zhuǎn)換為時間增量顯示格式:

  /usr/src/linux-x.xx.xx/scripts/show_delta ktime > dtime

  這樣,你就得到了一份關(guān)于Linux啟動時間消耗的詳細(xì)報告。

  (2)然后,我們就來通過這份報告,找出啟動中相對耗時的過程。

  必須明確一點:報告中的時間增量和內(nèi)核信息之間沒有必然的對應(yīng)關(guān)系,真正的時間消耗必須從內(nèi)核源碼入手分析。

  這一點對于稍微熟悉編程的朋友來說都不難理解,因為時間增量只是兩次調(diào)用printk之間的時間差值。通常來說,內(nèi)核啟動過程中在完成一些耗時的任務(wù),如創(chuàng)建hash索引、probe硬件設(shè)備等操作后會通過printk將結(jié)果打印出來,這種情況下,時間增量往往反映的是信息對應(yīng)過程的耗時;但有些時候,內(nèi)核是在調(diào)用printk輸出信息后才開始相應(yīng)的過程,那么報告中內(nèi)核信息相應(yīng)過程的時間消耗對應(yīng)的是其下一行的時間增量;還有一些時候,時間消耗在了兩次內(nèi)核信息輸出之間的某個不確定的時段,這樣時間增量可能就完全無法通過內(nèi)核信息反應(yīng)出來了。

  所以,為了準(zhǔn)確判斷真正的時間消耗,我們需要結(jié)合內(nèi)核源碼進(jìn)行分析。必要的時候,例如上述第三種情形下,還得自己在源碼中插入printk打印,以進(jìn)一步確定實際的時間消耗過程。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉