2010年9月23日 星期四

ureadahead對Ubuntu Linux系統開機速度影響很大

經過了將近一個月的反覆實驗,我終於確定了可重複讓Ubuntu Linux快速開機的作法,我的Thinkpad X201i在插著SD卡啟動Ubuntu Studio 10.04的狀況,可以在26秒內完成,沒插SD卡,是22秒左右完成,如果是Ubuntu 10.04系統又沒有插SD卡等插拔式外部儲存裝置的話,可以在16秒開機完成。

經過很多的試驗以及爬文,首先,要調整開機,舊式的sysv、inittab一類的調整已經不適用,因為Ubuntu已經把絕大多數開機時啟動的服務,改放進新興的upstart-事件導向的啟動機制,但是upstart的文件很.....所以後來我專注的重點放在ureadahead。

本來我以為ureadahead這東西是可有可無的盲腸存在,因為我先前的測試,本來用generic的kernel開機速度正常,開機速度如前述爆快,但是裝了特製的realtime kernel以後,開機多了一道可怕的訊息:
ureadahead main process (485) terminated with status 5
而且開機時間長到40多秒,本來一直以為是它的錯,一直想把他除之而後快(試過,開機速度沒有改善),後來才發現....原來是我錯怪它了...

其實當前的Ubuntu快速開機有兩大支柱,一個是upstart,另一個是ureadahead,正確「設定」好的ureadahead可以大幅減少開機的時間到將近原來的一半而已,只是之前的我不清楚ureadahead的作用。 orz

ureadahead的作用,有點像所謂的cache,就是把開機時要「固定」啟動的東西整理起來成一個pack,然後開機時直接讀那個pack,提高開機速度。

那要知道哪些東西需要加到pack裡,當然需要一個profile的手續,這手續會在裝好系統第一次開機、套件管理程式安裝變更系統開機過程的套件時(例如安裝新的daemon、kernel等),系統會自動幫你作profile(看套件管理程式的標準輸出會看到提示),然而ureadahead要能正確的profile,必須kernel有被patched過,Ubuntu官方維護的kernel有patched過,但是我加裝的ppa realtime kernel沒有,或者自己編的kernel沒有被patched,那用新的kernel開機就會profile失敗出現這個訊息。
ureadahead main process (485) terminated with status 5

所以真的不是ureadahead的錯XD

那怎麼辦呢?沒關係,重新開機後,在開機到grub的階段,按shift不放,使開機選單出來,然後選到隨便一個generic核心按e,編輯開機選項,在quiet splash的那一行,後面空一格加上profile,然後按ctrl+x開機,開機完,ureadahead還可以幫你記開到桌面完成以後,一分鐘內常執行的事情,所以趁機趕快開個終端機或者你常用的瀏覽器、編輯器等等,以後這些程式可以減少啟動時間(只要開必要的就好囉),好了以後,請再連續用同一個核心開機兩次,來「訓練ureadahead」,以後就可以用回你平常用的那個核心,那個核心就可以正常的快速開機了。

但是請記得,ureadahead對固定的開機程序才有用,所以自己常用的那個kernel跟Ubuntu官方維護的generic kernel開機的程序不可以有不同,例如說用generic kernel訓練時沒開splash畫面,然後自己平常用的kernel卻有開機splash畫面,那當然就會慢下來,此外,前述有沒有插SD卡/隨身碟也有差,所以也要針對自己平常的使用習慣作profile。
  • 如果常態會插SD卡,那profile時就要插SD卡
  • 偶而才插,那profile時也不要插
以下附上我的Thinkpad x201i筆電+Ubuntu Studio 10.04的開機過程,請注意影片最後面的片斷,因為ureadahead的功能,有預讀進入桌面後常執行的的那些程式(包括gnome session、gnome panel、gnome-keyring、pulseaudio、bluetooth管理程式、network-manager等等),所以快速開機並非只是到GDM登入視窗結束,而是進入Gnome桌面以後,馬上進入可作業狀態,這是很有意義的!而不是GDM完,開機音效播完、桌布又秀了15多秒鐘,gnome 面板才珊珊來遲地出現(註一),這點就讓我周遭的windows使用者超流口水的(windows開機音效出來,還是卡卡的,要等常駐程式一個一個開完....,大概可以拖到1~2分鐘,其中有的人還無法按開始選單,例如我弟的電腦就是如此)

以下影片實際開機從第6秒按下按鈕開始(Thinkpad的硬體開機密碼機制)、第31秒聽到Moebuntu開機音效是Gnome開始啟動,第34秒gnome整個已經完全啟動完成可被操控,第38秒則是常用的無線網路登入完成。


註一:沒有ureadahead的加速幫助,Gnome啟動的過程,gnome-keyring的某常式會拖很久的時間(好像是連網找key又找不到的樣子),導致gnome panel很慢才出現,這段時間只有滑鼠游標,我們是動彈不得,被迫欣賞令人不悅的牛步化Gnome啟動過程,這也告訴我們,當開機出現不正常的"ureadahead main process (485) terminated with status 5"訊息,千萬不能無視,如果我們習慣把不正常的事情當成正常,就會喪失向上改良的機會

6 則留言:

cs8425 提到...

我也是出現"ureadahead main process (XXX) terminated with status 5",
但是照你的方法完全沒用說= =

有爬過文,/var跟root是同一分割區,
下了:
"~$ sudo ureadahead --dump
ureadahead:/var/lib/ureadahead/pack: 沒有此一檔案或目錄"

還有試過重新pack:
"sudo ureadahead --force"

結果:
"Counted 4 CPUs

ureadahead: Error while tracing: 沒有此一檔案或目錄"

kernel為自編的2.6.35.1...
請問一下該如何解決?
感激不盡.

魔法設計師 提到...

pack不是一個目錄,/var/lib/ureadahead 底下會有好幾個pack,例如說我的有:boot.pack home.pack media.0000-09XX.pack pack等等。然後重新profile請用Ubuntu官方的generic的來做,因為我們自編的kernel沒有patch過,就沒有辦法正確profile。請用generic的kernel profile過一次,然後再兩次用該核心開記,以後就可以改用自己編的核心享用ureadahead profile好的成果了。

ㄚ德 提到...

您好!
是否可以分享一下,如何讓x201i的無線網路在ubuntu下運作呢,謝謝~~

魔法設計師 提到...

hi,我的是X201i A22,沒有遇到無線網路問題,安裝光碟直接可以跑。

但我曾經在賣場試到無線網路有問題的X201i,可能是driver問題,建議查出你x201i的無線晶片是什麼?然後google看看solution或者上launchpad去找看看別人怎麼解決。

ㄚ德 提到...

您好..
我在您的建議下,有找到解決方式了,現在也可以用無線來上網了!
不過,我想請教另一個問題
我在連上無線AP後,無線網卡的燈會一直閃爍,您的x201也是會這樣嗎?

魔法設計師 提到...

有傳資料的時候會閃爍。沒傳資料的時候不會。

count