這是 Arjan van de Ven 與 Auke Kok 在 Linux Plumbers Conference 2008 上的展示畫面。
在讀 O’Really 對 Arjan van de Ven 的訪問 How PowerTOP, LatencyTOP, and Five-Second Boot Improve Desktop Linux) 時,知道了在 Intel Open Source Technology Center 工作的 Arjan 在 PowerTop, LatencyTop 上的努力,以及其他開發者如何利用這些工具來改進軟體的效能與品質。
在訪問後段提到了 Arjan 最近在 Linux Plumbers Conference 2008 上的實做展示,Arjan 的簡報中提到了開發的思維態度應該以五秒鐘內開機為目標,不要把加速開機當作目標。同時也不要弄先開機,再做後續處理,造成系統無法使用的暫時性解決方式。應該想辦法把正確的事情作對來加速速度,如開機時以平行執行方式 (Parallel boot) 啟動系統也不是正確的行為。
這樣的論點,當然讓長期使用這種解決方案的開發者不甚認同,像是 Mandriva 的 Frederic Crozat 就跳出來說明過去幾年來各種平行執行的策略,並說明在 EeePC 上碰到的一些硬體問題,經過調整後,可以讓 Mandriva 在 Eee PC 上以 15 秒內開機。
而 Arjan 的作法是將開機分成四個程序,分別是 Kernel, Early boot, X Server, GUI/Desktop。其中除了 Desktop 系統外,其他的程序都只能花用一秒鐘執行!
在核心的主要修改是利用從 RedHat readahead 改來的 sreadhead 加速軟體的檔案載入速度 (上個月我也介紹過 readahead 加速 Linux 開機速度 ? 。另外 sreadhead 的原始碼會在 Moblin Project 釋出) ,並將所需驅動程式先編入核心,關掉 initrd,預先建好 /dev 下需要的 device files, 同時利用新的 asynchronous initcall level 來載入較不重要的核心模組。如此可將核心載入時間壓縮在一秒。
相關的新 APIs 已經丟到 LKML 上供檢閱,希望可以納入 2.6.28 中。
而開機程序 (init scripts) 則還是利用 sysvinit,不用平行執行 (Parallel Boot) 之方法,也不利用 udev 動態產出 /dev 下的檔案,而是先固定寫死。另外雖說 initscripts 都還保持著原本的版本,在此預設也是不執行的。
另外 X Server 則稍加修改了 xorg-x11-drv-intel 顯示卡驅動程式,讓其在偵測硬體時,就一併先進行硬體設定,且修正了一些 PCI posting 的臭蟲。而且修改 XKB 快取 keyboard mappings,因為 XKB 居然會每次開啟時呼叫 C preprocessor 來編譯 keyboard mappings!至於桌面系統則使用輕量的 XFCE,稍加修改讓桌面程式同時執行。
如此如此,讓 Arjan 硬幹出來的版本,讓那天展示的跑在 ASUS EeePC 901 上 Fedora 與 Moblin 可以在五秒鐘內開機!相較於其他在 ASUS EeePC 901 上得套件系統開機動輒要約30秒到一分鐘,的確快了很多。
但是我要一個只有桌面沒有網路連線的機器要做什麼呢 ? 且許多硬幹的方法,必須針對特定硬體作調整,的確不適用一般新安裝的系統。不過 Arjan 的 Fastboot 的確很值得參考使用,另外許多低效能問題的解決方法也都可以採用。希望這些新的研究可以盡快的套用到更多的環境上才是。
對了 Arjan van de Ven 也是 Linux-ready Firmware Developer Kit 的發起人,Linux-ready Firmware Developer Kit 是協助 BIOS/EFI 開發工程師測試的工具,若你是開發主機板或 BIOS/EFI 軔體的工程師,請別忘了下載來玩玩,或許可以避免發生 Foxcomm 前陣子的窘狀。