天天看點

linux 核心 列印耗時時間,Linux系統啟動時間優化方案

(1)首先是對Linux啟動過程的跟蹤和分析,生成詳細的啟動時間報告。

較為簡單可行的方式是通過PrintkTIme功能為啟動過程的所有核心資訊增加時間戳,便于彙總分析。PrintkTIme最早為CELF所提供的一個核心更新檔,在後來的Kernel 2.6.11版本中正式納入标準核心。是以大家可能在新版本的核心中直接啟用該功能。如果你的Linux核心因為某些原因不能更新為2.6.11之後的版本,那麼可以參考CELF提供的方法修改或直接下載下傳它們提供的更新檔:http://tree.celinuxforum.org/CelfPubWiki/PrintkTImes

開啟PrintkTIme功能的方法很簡單,隻需在核心啟動參數中增加“time”即可。當然,你也可以選擇在編譯核心時直接指定“Kernel hacking”中的“Show timing information on printks”來強制每次啟動均為核心資訊增加時間戳。這一種方式還有另一個好處:你可以得到核心在解析啟動參數前所有資訊的時間。是以,我選擇後一種方式。

當完成上述配置後,重新啟動Linux,然後通過以下指令将核心啟動資訊輸出到檔案:

dmesg -s 131072 > ktime

然後利用一個腳本“show_delta”(位于Linux源碼的scripts檔案夾下)将上述輸出的檔案轉換為時間增量顯示格式:

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

這樣,你就得到了一份關于Linux啟動時間消耗的詳細報告。

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

必須明确一點:報告中的時間增量和核心資訊之間沒有必然的對應關系,真正的時間消耗必須從核心源碼入手分析。

這一點對于稍微熟悉程式設計的朋友來說都不難了解,因為時間增量隻是兩次調用printk之間的時間內插補點。通常來說,核心啟動過程中在完成一些耗時的任務,如建立hash索引、probe硬體裝置等操作後會通過printk将結果列印出來,這種情況下,時間增量往往反映的是資訊對應過程的耗時;但有些時候,核心是在調用printk輸出資訊後才開始相應的過程,那麼報告中核心資訊相應過程的時間消耗對應的是其下一行的時間增量;還有一些時候,時間消耗在了兩次核心資訊輸出之間的某個不确定的時段,這樣時間增量可能就完全無法通過核心資訊反應出來了。

是以,為了準确判斷真正的時間消耗,我們需要結合核心源碼進行分析。必要的時候,例如上述第三種情形下,還得自己在源碼中插入printk列印,以進一步确定實際的時間消耗過程。