Ready to upstart?
使用 RHEL 6 第一個感覺就是開機速度明顯變快了,這一篇將探討 RHEL6 採用了 upstart 之後是什麼原因讓 Linux 的開機速度加快呢!
我們先來看看官方網頁怎麼解釋 upstart 的.
Upstart is an event-based replacement for the /sbin/init daemon which handles starting of tasks and services during boot, stopping them during shutdown and supervising them while the system is running.
It was originally developed for the Ubuntu distribution, but is intended to be suitable for deployment in all Linux distributions as a replacement for the venerable System-V init.
上面原文大概的意思為 Upstart (event-based) 是替代 /sbin/init (Dependency-based) 這一開機引導服務程序,它 (init , upstart) 服務程序主要是來處理開機時 tasks 與 services 的啟動,並在執行時監督在他們的行為.關機的時候也是一樣,協助 tasks 與 services 關閉.
Upstart 最初是由 Ubuntu 開發,不過現在已經適用於所有的 Linux 發行版,一樣是為了取代作古老的System-V init .
那問題是什麼是 Event-based 與 Dependency-based
傳統 Linux 開機的方式為透過 Dependency-based 的方式將 Daemon (服務)一一開起,但 upstart 採用了 event-based 的方式不需要依序開起個別的 daemon.他可以同時開啟多個 Daemon,這也就是為什麼 RHEL 6 的開機速度可以加速了.
看起來很空洞的說明,什麼是 Dependency-based 那什麼又是 Event-based 呢!! 跟傳統的 Linux 開機方式的差別又在哪裡!!
目前 Linux 系統是由 UNIX System V (“System five”) 為基礎所設計出的.這就是所謂的 sysvinit.而 Upstart 主要為了取代傳統的 init daemon Upstart 是由 Kernel 所生成用以啟動(starting)監控(supervising)和停止(stopping)其他系統行程 (processes). 先來看看
Dependency-based:
Dependency-based 在硬體裝置支援上面只能使用在比較固定不太會變動的裝置上面, 如熱插拔的裝置支持度不高.其他固定的硬體裝置在使用上也必須遵固定模式啟動,比如:
- 硬碟要先被使用前,第一步必須可以被偵測到,初始化並格式化.
- 而網路裝置也一樣在使用前,第一步必須可以被偵測到,我們才能啟動網路功能.
這樣的工作模式也已經被使用了 10 幾年,但面對越來越多不同的裝置,這樣的模式可能會發生下列的缺點.
- 像是 USB 裝置必須支援在任何時間點都可以做熱插拔.
- 儲存裝置的匯流排號碼必須為可變動的模式.
- 為了減少電源消耗, the drive may not actually be spun up until the bus scan so will not appear for an even longer time(??).
- 網路裝置必須支援在任何時間點都可以安裝及移除.
- 韌體(Firmware) 的載入點必須為裝置被偵測到, but before it is usable by the system.
- 掛載 /etc/fastb 定義的磁區需要 /usr 裡的工具,但如果磁區是透過網路裝置連結時的前提是必須要先將啟動網路裝置.
Event-based:
Upstart 所採用的方式是平行啟動不同的 daemons 以及 services 甚至於驅動程式.這樣的方式可以讓系統快速開啟.不需再像傳統的方式必須等待其他服務或是裝置啟動,所有的行程( processes )可以同時在背景執行,不會影響到其他行程的啟動( processes )!如果有服務非預期下死亡,在固定時間內會自動再被產生一次.
傳統的 Dependency-based 只有分為 SysV init 以及 BSD init ,但在 Event-based 可多了,除了這裡介紹的 Ubuntu 所使用的 Upstart,以及 Apple 的 lauchd 還有 Sun Microsystems 的 SMF .
目前採用 upstart 的 Linux 版本如下:
- Ubuntu – Upstart
- RHEL6 – 不同 Linux 以往的開機方式
- Debian
- Fedora 11 以及 12
- SUSE 11.3 以及 SLES12
參考說明:
Upstart 官方網站.
upstart 的 Event-based init 看了很久還是有看沒有懂.
這一篇寫的零零落落,我自己寫的都看不懂了.可能是我對於 Linux 的程式並不熟悉,有機會再來深入討論.