亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

強悍!Linux啟動時間的極限優化

添加時間:2010-12-4  添加: admin 

  在上次完成嵌入式應用的Linux裁減后,Linux的啟動時間仍需要 7s 左右,雖然勉強可以接受,但仍然沒有達到我個人所追求的目標——2s 以內。況且,在實際的商用環境中,設備可靠性的要求可是“5個9”(99.999%,即OOS時間低于5分鐘/年),這就意味著每減少一秒鐘Linux啟動(設備復位)時間,對可靠性都是一個明顯的提升。

  言歸正傳,如何著手對Linux的啟動時間進行優化呢?

  CELF(The Consumer Electronics Linux Forum)論壇為我們指引了一個方向。

  (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打印,以進一步確定實際的時間消耗過程。

  以下是我上次裁減后Linux內核的啟動分析:

  內核啟動總時間: 6.188s

  關鍵的耗時部分:

  1) 0.652s - Timer,IRQ,Cache,Mem Pages等核心部分的初始化

  2) 0.611s - 內核與RTC時鐘同步

  3) 0.328s - 計算Calibrating Delay(4個CPU核心的總消耗)

  4) 0.144s - 校準APIC時鐘

  5) 0.312s - 校準Migration Cost

  6) 3.520s - Intel E1000網卡初始化

  下面,將針對上述各部分進行逐一分析和化解。

  (3)接下來,進行具體的分項優化。

  CELF已經提出了一整套針對消費類電子產品所使用的嵌入式Linux的啟動優化方案,但是由于面向不同應用,所以我們只能部分借鑒他們的經驗,針對自己面對的問題作出具體的分析和嘗試。

  內核關鍵部分(Timer、IRQ、Cache、Mem Pages……)的初始化目前暫時沒有比較可靠和可行的優化方案,所以暫不考慮。

  對于上面分析結果中的 2、3 兩項,CELF已有專項的優化方案:“RTCNoSync”和“PresetLPJ”。

  前者通過屏蔽啟動過程中所進行的RTC時鐘同步或者將這一過程放到啟動后進行(視具體應用對時鐘精度的需求而定),實現起來比較容易,但需要為內核打補丁。似乎CELF目前的工作僅僅是去掉了該過程,而沒有實現所提到的“延后”處理RTC時鐘的同步。考慮到這個原因,我的方案中暫時沒有引入這一優化(畢竟它所帶來的時間漂移已經達到了“秒”級),繼續關注中。

  后者是通過在啟動參數中強制指定LPJ值而跳過實際的計算過程,這是基于LPJ值在硬件條件不變的情況下不會變化的考慮。所以在正常啟動后記錄下內核信息中的“Calibrating Delay”數值后就可以在啟動參數中以下面的形式強制指定LPJ值了:

  lpj=9600700

  上面分析結果

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站