再談 FastBoot 快速開機簡記

因為某些案子的關係,春節後多日被迫關在飯店當 L (Who's L? 請參閱死亡筆記本),果然,龍崎這角色不是人當的,再關下去真的連坐姿和行為都會變得和他一樣奇怪(話說那樣的坐姿真的會讓智商提高!好像有?!)。沒枉費多日的努力,一個使用 ubuntu 的標準 config 所編譯出來之 Kernel 已經可以達到 1 秒的速度,理論上,若是再修剪 built-in 的 driver 應該可以達到更快速度。當然,單單只是 Kernel 快很容易做到,但 X Server 必需要在第 1.3 秒左右啟動,並在 第 2 秒前看到畫面,最重要的是有可用系統狀態,才算有實用的意義。

而關於 Kernel 部份,2.6.28 已做過許多快速開機的處理,其啟動已經非常快速,但是還會慢的瓶頸在於 initrd 的檢查,和各 device 初始的等待。經過 patch 後,這兩部份依硬體不同,可減少近 1 秒左右甚至更多的消耗。此外,盡可能讓 Root Filesystem 先被 Mount 也是一種手段,尤其再配合 initram 可以在瞬間就上到 User Space 的 Early boot 甚至進到 X Server,一般使用者可以看到 boot loader 一消失,緊接著就出現 X 的背景圖和 Cursor。

X Server 的快速開機處理有些方法,主要的做法是減少緩慢 I/O 的 Input Device 的等待時間,甚至是拖出正常 Initializing Progress,讓畫面先啟動。另外的瓶頸是各家 Video Driver 的問題,減少許多多餘的檢查有助於加快初始化速度。全部 patch 過後,基本上 XServer 啟動速度可達到 1 秒出頭(測試環境中,配合使用新的 Intel Video Driver)。

到此,一切看起來都很好,但最後發現 EDID 吃掉大半時間,單單為這 Monitor 的 Detect 就會影響使用 0.5 秒以上的時間,對某些 Specific 的 Hardware 可直接拿掉,但如何提前甚至時移到 Kernel 去跑,才是比較正確的做法。

目前,Boot Loader 的速度太慢,變成主要瓶頸,尤其以 Grub 的速度更令人不敢恭維,Loading 的速度比用 USB Drive 上的 Syslinux 還慢,這是還有待改進的。所以在做一台單一整合產品時,採用標準的 Grub 可能不是正確的決定,當然,對一般電腦的系統,Grub 還是無可取代。

這個網誌中的熱門文章

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(一)

淺談 USB 通訊架構之定義(二)

JavaScript 好用的 async 異步函數!

使用 NodeJS + Express 從 GET/POST Request 取值