2007 年 3 月 26 日 對(duì)于 Linux? 的最大抱怨(尤其來自開發(fā)人員)就是 Linux 的引導(dǎo)速度。默認(rèn)情況下,Linux 是一個(gè)通用的操作系統(tǒng),可以作為一個(gè)開箱即用的客戶機(jī)桌面或服務(wù)器使用。由于 Linux 具有很好的靈活性,因此可以用作各種用途的基礎(chǔ),但對(duì)于任何特定的配置來說,尚不是最理想的選擇。本文將向您展示可以提高 Linux 引導(dǎo)速度的一些方法,包括兩種可以對(duì)初始化過程進(jìn)行并行化操作的方法。本文還介紹了如何圖形化地表現(xiàn)引導(dǎo)過程的性能。 對(duì)于 GNU/Linux 常見的抱怨之一(除了缺乏良好的內(nèi)核調(diào)試器之外)就是操作系統(tǒng)的啟動(dòng)需要花費(fèi)大量時(shí)間。您可以將這個(gè)過程概括為引導(dǎo),不過實(shí)際上已經(jīng)有幾個(gè)獨(dú)立的項(xiàng)目開始從冷系統(tǒng)改進(jìn)到可以通過 shell 或窗口管理器與系統(tǒng)進(jìn)行交互。讓我們來回顧一下 Linux 的引導(dǎo)和初始化過程。 Linux 引導(dǎo)的主要階段 盡管引導(dǎo) Linux 會(huì)涉及很多步驟,不過您可以將整個(gè)過程劃分為 3 個(gè)基本步驟,我將它們分別稱之為 BIOS、內(nèi)核引導(dǎo) 和 系統(tǒng)初始化,如圖 1 所示。 圖 1. Linux 引導(dǎo)過程的短暫視圖 BIOS 當(dāng)?shù)谝淮螁?dòng)計(jì)算機(jī)或重啟時(shí),計(jì)算機(jī)的處理器會(huì)在一個(gè)眾所周知的位置開始執(zhí)行,即基本輸入/輸出系統(tǒng)(BIOS)。BIOS 通常存儲(chǔ)在系統(tǒng)主板的一個(gè)閃存設(shè)備中。BIOS 需要執(zhí)行很多工作,例如對(duì)基本組件(例如系統(tǒng)內(nèi)存)進(jìn)行初始測(cè)試,確定如何引導(dǎo)操作系統(tǒng)。由于基于 PC 的計(jì)算機(jī)都非常靈活,因此引導(dǎo)設(shè)備可以是連接到主板上的各種設(shè)備之一,包括硬盤、CD-ROM 或其他設(shè)備,例如網(wǎng)絡(luò)接口。 通過選擇最經(jīng)常引導(dǎo)的設(shè)備(通常是硬盤)可以優(yōu)化確定引導(dǎo)設(shè)備的過程。不過到目前為止,BIOS 階段最耗時(shí)的過程就是內(nèi)存測(cè)試。將這個(gè)測(cè)試的某些部分禁用(例如內(nèi)存完全測(cè)試)確實(shí)有助于加快引導(dǎo)速度,不過這樣做的代價(jià)是丟失了引導(dǎo)時(shí)對(duì)系統(tǒng)的完整性測(cè)試。 內(nèi)核引導(dǎo) 找到引導(dǎo)設(shè)備后,開始 Linux 內(nèi)核引導(dǎo)過程。這個(gè)過程發(fā)生在兩個(gè)階段(大約) —— 第一階段引導(dǎo) 和第二階段引導(dǎo)。第一階段包含了一個(gè)簡單的引導(dǎo)加載程序(這可以在引導(dǎo)設(shè)備的主引導(dǎo)記錄 MBR 中找到),其作用是加載第二階段的引導(dǎo)加載程序。第一階段的引導(dǎo)加載程序使用分區(qū)表來找到第二階段的引導(dǎo)加載程序。第一階段的引導(dǎo)加載程序?qū)Ρ磉M(jìn)行掃描,查找活動(dòng)分區(qū);當(dāng)加載程序找到分區(qū)時(shí),就將第二階段的引導(dǎo)加載程序加載到 RAM 中并調(diào)用它。 在第二階段的引導(dǎo)加載程序加載到 RAM 中之后,Linux 內(nèi)核映像和初始 RAM 磁盤映像(initrd )也會(huì)被加載到 RAM 中。當(dāng)調(diào)用內(nèi)核時(shí),它會(huì)自解壓到高端內(nèi)存中,并拷貝 initrd 以供稍后安裝和使用。 | LILO 和 GRUB 第一階段的引導(dǎo)加載程序和第二階段的引導(dǎo)加載程序通常被稱為 LInux LOader (LILO)或 GRand Unified Bootloader(GRUB),這取決于您的系統(tǒng)使用的名稱。 | | 內(nèi)核引導(dǎo)過程通常相當(dāng)復(fù)雜,不過卻非常迅速,因?yàn)榇蟛糠执a都是使用系統(tǒng)的機(jī)器語言編寫的。在內(nèi)核引導(dǎo)序列的結(jié)尾,會(huì)啟動(dòng) init 進(jìn)程。由于 init 是 Linux 系統(tǒng)中創(chuàng)建的第一個(gè)進(jìn)程,因此它是所有其他進(jìn)程的祖先(所有的進(jìn)程都是 init 的后代)。 系統(tǒng)初始化 init 進(jìn)程 —— 本文的重點(diǎn) —— 是內(nèi)核引導(dǎo)過程完成時(shí)創(chuàng)建的第一個(gè)進(jìn)程。Linux 使用了 init 進(jìn)程來對(duì)組成 Linux 的服務(wù)和應(yīng)用程序進(jìn)行初始化。 當(dāng) init 進(jìn)程啟動(dòng)時(shí),它會(huì)打開一個(gè)名為 /etc/inittab 的文件。這個(gè)文件是 init 的配置文件,定義了如何對(duì)系統(tǒng)進(jìn)行初始化。這個(gè)文件還包含了有關(guān)出現(xiàn)電源故障時(shí)執(zhí)行的操作(如果系統(tǒng)支持)、以及在檢測(cè)到 Ctrl-Alt-Delete 鍵序列時(shí)應(yīng)該如何反應(yīng)的信息。請(qǐng)參看 清單 1 中該文件的簡短片段,了解它所提供的內(nèi)容。 inittab 配置文件使用通用格式定義了幾項(xiàng)內(nèi)容:id:runlevels:action:process。其中 id 是惟一標(biāo)識(shí)該項(xiàng)的字符序列。runlevels 定義了操作所使用的運(yùn)行級(jí)別。action 指定了要執(zhí)行的特定操作。最后,process 定義了要執(zhí)行的進(jìn)程。 清單 1. inittab 文件摘錄 # The default runlevel id:2:initdefault # Boot-time system configuration/initialization script si::sysinit:/etc/init.d/rcS # Runlevels l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 z6:6:respawn:/sbin/sulogin # How to react to ctrl-alt-del ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now | | Init 和 telinit 您可以使用 telinit 工具(這是一個(gè)指向 init 工具的鏈接)與 init 進(jìn)程進(jìn)行通信。例如,如果目前在多用戶模式下(runlevel 2),希望切換到單用戶模式(runlevel 1),使用命令 telinit 1 即可(使用超級(jí)用戶模式)。 | | 在 init 加載 /etc/inittab 之后,就會(huì)將系統(tǒng)切換到 initdefault 操作所定義的運(yùn)行級(jí)別。如 清單 1 所示,即運(yùn)行級(jí)別 2。我們可以將運(yùn)行級(jí)別看作是系統(tǒng)的狀態(tài)。例如,運(yùn)行級(jí)別 0 定義了系統(tǒng)掛起狀態(tài),運(yùn)行級(jí)別 1 是單用戶模式。運(yùn)行級(jí)別 2 到 5 是多用戶狀態(tài),運(yùn)行級(jí)別 6 表示重啟。(注意有些發(fā)行版對(duì)于運(yùn)行級(jí)別的表示是不同的)。還可以以另一種方式考慮運(yùn)行級(jí)別,即它是一種定義可以執(zhí)行哪些進(jìn)程(定義系統(tǒng)狀態(tài)的進(jìn)程)的方法。 注意: 要查看系統(tǒng)的當(dāng)前運(yùn)行級(jí)別,請(qǐng)使用命令 runlevel 。 正如 清單 1 定義的一樣, initdefault 指定默認(rèn)的 init 級(jí)別是 2 (多用戶模式)。在定義初始的運(yùn)行級(jí)別之后,則調(diào)用 rc 腳本以及參數(shù) 2 (運(yùn)行級(jí)別)來啟動(dòng)系統(tǒng)。這個(gè)腳本然后會(huì)調(diào)用各種服務(wù)和應(yīng)用程序腳本來啟動(dòng)或停止特定的元素。在本例中,文件都是在 /etc/rc2.d/ 中定義的。例如,如果要啟動(dòng) MySQL 應(yīng)用程序(例如系統(tǒng)啟動(dòng)),可以這樣調(diào)用:/etc/rc2.d/S20mysql start 。在關(guān)閉系統(tǒng)時(shí),則使用 stop 參數(shù)調(diào)用相同的腳本集。 | 修改 init 進(jìn)程 修改初始化進(jìn)程非常的簡單。在引導(dǎo)時(shí)(使用 LILO 或 GRUB),指定一個(gè)新進(jìn)程來開始處理系統(tǒng)初始化。指定 init=/sbin/mynewinit 作為內(nèi)核引導(dǎo)行的一部分從而調(diào)用這個(gè)進(jìn)程,而不是默認(rèn)的 init 進(jìn)程。在 ./linux/init/main.c 的內(nèi)核源代碼中您可以看到這種用法。如果在內(nèi)核引導(dǎo)行中提供了一個(gè) init 命令,引導(dǎo)時(shí)就會(huì)使用它。否則,內(nèi)核就會(huì)嘗試啟動(dòng) 4 個(gè)備選方法之一(第一個(gè)是 /sbin/init)。 | | 最后,串行執(zhí)行大量的腳本以啟動(dòng)各種需要的服務(wù)(通常可以在 Linux 的引導(dǎo)屏幕中看到)。即使這些服務(wù)彼此無關(guān)時(shí),依然會(huì)順次啟動(dòng)它們。其結(jié)果是引導(dǎo)過程非常耗時(shí)(尤其在具有很多服務(wù)的大型系統(tǒng)上更是如此)。 關(guān)于這個(gè)問題的一個(gè)很明顯的解決方案是去掉 init 命令的串行特性,將其替換成并行化操作。在很多多處理系統(tǒng)中都可以看到這種用法。例如,socket striping,或者使用兩個(gè)或多個(gè) socket 并行地移動(dòng)數(shù)據(jù),就是一個(gè)基于這個(gè)主題的解決方案。獨(dú)立磁盤冗余陣列(RAID)系統(tǒng)也是通過將磁盤分成條狀(通常是并行的)來提高 I/O 性能。
Init 守護(hù)進(jìn)程的替換 | 簡單的 init 優(yōu)化 對(duì) init 進(jìn)程進(jìn)行優(yōu)化的最簡單方法是禁用不必要的服務(wù)。例如,如果您運(yùn)行的是一個(gè)桌面系統(tǒng)(而不是一個(gè)服務(wù)器),就可以禁用諸如 apache、sendmail 和 mysql 之類的服務(wù),這樣可以縮短 init 序列。 | | 由于傳統(tǒng)的 init 進(jìn)程(sysvinit )是一個(gè)串行化的進(jìn)程,因此可對(duì)這部分系統(tǒng)進(jìn)行充分優(yōu)化。實(shí)際上,您可以使用任何方法來對(duì) init 進(jìn)程進(jìn)行優(yōu)化。讓我們來了解其中一些方法,以及它們是如何解決這個(gè)問題的。前兩種方法是基于依賴關(guān)系的(即使用依賴關(guān)系來提供并行化),第三種方法是一個(gè)基于事件的系統(tǒng)(即進(jìn)程依賴于事件來表示自己何時(shí)啟動(dòng)或停止)。
initng 第一種方法 initng (下一代 init )將完全取代異步啟動(dòng)進(jìn)程的 init ,能夠更加快速地完成 init 進(jìn)程。在編寫本文時(shí),initng 是一個(gè) beta 版本的產(chǎn)品,其創(chuàng)建者是 Jimmy Wennlund。 initng 背后的基本思想是只要滿足了服務(wù)的依賴關(guān)系就可啟動(dòng)。這樣系統(tǒng)就可以在 CPU 和 I/O 之間實(shí)現(xiàn)較好的平衡。當(dāng)從磁盤上加載一個(gè)腳本或等待硬件設(shè)備啟動(dòng)的同時(shí),可以運(yùn)行另一個(gè)腳本來啟動(dòng)另外一個(gè)服務(wù)。 initng 工作原理 作為一個(gè)基于依賴關(guān)系的解決方案,initng 使用自己的初始化腳本集,它們對(duì)服務(wù)和守護(hù)進(jìn)程的依賴性進(jìn)行了編碼。清單 2 展示了一個(gè)示例。這個(gè)腳本指定了需要為給定的運(yùn)行級(jí)別啟動(dòng)的服務(wù)。該服務(wù)具有兩個(gè)依賴關(guān)系,使用 need 關(guān)鍵字定義,分別是 system/initial 和 net/all。在 system/my_service 可以啟動(dòng)之前,這些服務(wù)必須是可用的。當(dāng)這些服務(wù)可用時(shí),exec 關(guān)鍵字就開始起作用了。exec 關(guān)鍵字(以及 start 選項(xiàng))定義了如何使用任何可用的選項(xiàng)啟動(dòng)服務(wù)。要停止這個(gè)服務(wù),就會(huì)使用 exec 關(guān)鍵字以及 stop 選項(xiàng)。 清單 2. 為 initng 定義服務(wù) service system/my_service { need = system/initial net/all; exec start = /sbin/my_service --start --option; exec stop = /sbin/my_service --stop --option; } | 您可以使用服務(wù)定義對(duì)整個(gè)系統(tǒng)進(jìn)行編碼,如清單 2 所示。那些沒有依賴關(guān)系的服務(wù)可以立即(并行地)啟動(dòng),而具有依賴關(guān)系的服務(wù)則必須等待以安全啟動(dòng)。您可以將 initng 看作一個(gè)基于目標(biāo)的系統(tǒng)。其目標(biāo)就是要啟動(dòng)的服務(wù)。沒有進(jìn)行顯式的規(guī)劃;相反,依賴關(guān)系簡單地定義了服務(wù)初始化的流程,這個(gè)過程中隱含著并行化的操作。 使用 initng initng 包對(duì)于典型用法的安裝來說相對(duì)簡單。對(duì)于使用非標(biāo)準(zhǔn)包(不是默認(rèn)配置中出現(xiàn)的包)來說,必須要進(jìn)行一些匯編工作。 initng 的典型安裝需要 initng 發(fā)行版(源代碼或二進(jìn)制文件)和 ifiles 發(fā)行版。您可以使用 ./configure、make 和 make install 編譯自己的 initng 發(fā)行版。您必須使用 cmake 來編譯 ifiles 文件(這是腳本文件)。根據(jù)系統(tǒng)需求的不同,您可能需要?jiǎng)?chuàng)建新的服務(wù)/守護(hù)進(jìn)程定義(不過很可能 initng 社區(qū)中已經(jīng)有人這樣做了)。然后您還必須修改 LILO 或 GRUB 的配置以指向新的 /sbin/initng。 要控制 initng ,需要使用 ngc (比較 telinit 與傳統(tǒng)的 init )。它們的語法有些不同,不過功能是相同的。
upstart 替換 init 的另外一種選擇是 upstart ,它使用的方法與 initng 使用的方法稍有不同。 upstart 是一個(gè)基于事件的 init 的替代程序,這意味著服務(wù)的啟動(dòng)和停止都基于事件的通信。 upstart 正在由 Scott James Remnant 進(jìn)行開發(fā),用于 Ubuntu 發(fā)行版,不過它想要成為任何 Linux 發(fā)行版上 init 的通用替代程序。 upstart 的工作原理 Upstart 要求您更新初始化腳本來支持基于事件的操作模式。upstart 維護(hù)自己的在系統(tǒng)啟動(dòng)時(shí)啟動(dòng)的 init 進(jìn)程(對(duì)于所有其他方法也是如此)。 首先,init 會(huì)發(fā)出 startup 事件 —— 這是兩個(gè)核心事件之一。事件 startup 是由 init 在系統(tǒng)啟動(dòng)時(shí)發(fā)出的,事件 shutdown 則是在系統(tǒng)關(guān)閉時(shí)發(fā)出的。其他核心事件包括 ctrlaltdel,它說明您按下了 Ctrl-Alt-Delete,或 kbdrequest,它用來說明您按下了 Alt-Up(向上箭頭)鍵組合。 您可以為其他用法創(chuàng)建新事件。例如,您可以創(chuàng)建一個(gè)名為 myevent 的任意事件,并使用 echo 命令表示該事件的接收。請(qǐng)使用下面這個(gè)簡短的作業(yè): on myevent exec echo myevent received console output | 這段代碼指定在接收到 myevent 事件時(shí)將觸發(fā)該作業(yè)。然后代碼執(zhí)行指定的操作(向控制臺(tái)發(fā)出文本)。使用 upstart 配置(/etc/event.d)中給出的文件,可以使用 initctl 工具觸發(fā)它: upstart 使用的腳本文件的工作方式類似與傳統(tǒng)的 rc init 文件,它們是基于異步事件自發(fā)操作的。清單 3 提供了一個(gè)簡單的樣例腳本,它可以接收 3 個(gè)事件: startup,啟動(dòng)作業(yè);shutdown 和 runlevel-3,停止作業(yè)。shell 執(zhí)行作業(yè)的 script 部分的內(nèi)容(使用 -e 選項(xiàng)來結(jié)束出錯(cuò)腳本)。 清單 3. sysvinit rc 2 腳本的簡化 upstart 腳本 start on startup stop on shutdown stop on runlevel-3 script set $(runlevel --set 2 || true) exec /etc/init.d/rc 2 end script | initctl 工具提供了類似于 telinit 的功能,不過增加了一些特定于 upstart 的特性。正如您前面看到的一樣,您可以使用 initctl 和 emit 選項(xiàng)為 upstart 生成一個(gè)事件。list 選項(xiàng)讓您可以通過標(biāo)識(shí)作業(yè)狀態(tài)來深入了解系統(tǒng)操作。它告訴您目前正在等待哪些服務(wù),以及哪些服務(wù)目前是活動(dòng)的。initctl 工具還可以顯示用于調(diào)試而接收的事件。 Upstart 是 init 的一個(gè)有趣的替代程序,并且具有一些獨(dú)特的優(yōu)點(diǎn)。實(shí)際上已經(jīng)不存在什么理由再使用運(yùn)行級(jí)別了,因?yàn)橄到y(tǒng)將充分利用硬件進(jìn)行引導(dǎo)。任何沒有給出的硬件都不會(huì)觸發(fā)需要它的任務(wù)。Upstart 也可以很好地處理熱插拔設(shè)備。例如,如果在完成系統(tǒng)引導(dǎo)很長時(shí)間以后插入了一塊 PCMCIA 網(wǎng)卡,那就會(huì)生成 network-interface-added 事件。這個(gè)事件會(huì)引起動(dòng)態(tài)主機(jī)配置協(xié)議(Dynamic Host Configuration Protocol,DHCP)作業(yè)來對(duì)這個(gè)網(wǎng)卡進(jìn)行配置,生成一個(gè) network-interface-up 事件。當(dāng)為這個(gè)新接口分配一個(gè)默認(rèn)路由時(shí),會(huì)生成一個(gè) default-route-up 事件。此時(shí),需要網(wǎng)絡(luò)接口的作業(yè)(例如郵件服務(wù)器或 Web 服務(wù)器)就可以自動(dòng)啟動(dòng)(如果接口消失,這些服務(wù)將會(huì)自動(dòng)停止)。 使用 upstart 編譯和安裝 upstart 非常簡單,并且遵循典型的 configure 、make 和 make install 模式。 Upstart 提供了一組示例作業(yè),它們與典型的 init 配置兼容。與 initng 類似,新應(yīng)用程序必須要根據(jù)需求編寫自己的作業(yè)(可能還需要添加新事件)。不管怎樣,部署新的 init 系統(tǒng)都會(huì)有一些風(fēng)險(xiǎn)。不過 upstart 的優(yōu)點(diǎn)當(dāng)然值得去冒這些風(fēng)險(xiǎn)并執(zhí)行其他必要的操作。 正如上面介紹的一樣,initctl 工具提供了人們對(duì) telinit 所期望的功能。不過 initctl 也為跟蹤和調(diào)試提供了附加功能。
其他選項(xiàng) 本文中介紹的這兩種方法 —— initng 和 upstart —— 并不是只有這兩種程序可以替代 init 。您還會(huì)找到其他的 init 替代程序,例如 runit 、pardus 、 minit 和 einit 。所有這些程序在 Linux 社區(qū)中都有一些支持者和一定的促進(jìn)動(dòng)力?,F(xiàn)在,upstart 可能就是我們要了解的一個(gè),因?yàn)樗呀?jīng)被流行的 Ubuntu 發(fā)行版采納為 init 的替代程序。更多信息請(qǐng)參看 參考資料。
使用 bootchart 監(jiān)視 init 性能 在修改了系統(tǒng)引導(dǎo)進(jìn)程后,理解修改的內(nèi)容以及其如何影響系統(tǒng)引導(dǎo)的總時(shí)間會(huì)非常有幫助。Ziga Mahkovec 開發(fā)了一個(gè)非常有用的工具 bootchart ,可以可視化地表示啟動(dòng)進(jìn)程的組成。這個(gè)工具由幾個(gè)元素組成,包括一個(gè)數(shù)據(jù)日志記錄器工具和一個(gè)可視化工具。 數(shù)據(jù)日志記錄器在(bootchartd )是在 init 進(jìn)程中運(yùn)行的(通常,在 grub 或 lilo.conf 文件中指定)。在 bootchartd 完成初始化之后,就會(huì)將控制權(quán)交給真正的 init 進(jìn)程(通常是 /sbin/init)。Bootchartd 本質(zhì)上是一個(gè)分析器,它每隔一段時(shí)間定期對(duì)環(huán)境進(jìn)行采樣(默認(rèn)間隔是 200ms)。所謂對(duì)環(huán)境進(jìn)行采樣,就是說它可以讀取當(dāng)前 CPU 的統(tǒng)計(jì)信息、I/O 和空閑事件、磁盤使用情況以及每個(gè)活動(dòng)進(jìn)程的信息(通過 proc 文件系統(tǒng))。數(shù)據(jù)保存在一個(gè)臨時(shí)文件(/var/log/bootchart.tgz)中用于稍后進(jìn)行二次處理。 Bootchart 然后會(huì)使用一個(gè)二次處理工具將原始數(shù)據(jù)轉(zhuǎn)換成一個(gè)引導(dǎo)圖。這個(gè)過程可以在本地使用一個(gè) Java? 應(yīng)用程序(bootchart 發(fā)行版的一部分)來完成,不過更簡單的方法是通過 bootchart 主頁上的一個(gè) Web 表單來完成。圖 2 展示了引導(dǎo)圖表的部分示例。注意這些圖將會(huì)非常大(這取決于所啟動(dòng)的服務(wù)和應(yīng)用程序)。關(guān)于完整示例的鏈接,請(qǐng)參看 參考資料。 圖 2. bootchartd 所創(chuàng)建的引導(dǎo)圖片斷
結(jié)束語 與 Linux 本身一樣,存在很多方法和大量的靈活性對(duì)引導(dǎo)時(shí)間進(jìn)行優(yōu)化。從基于依賴關(guān)系的解決方案(如 initng )到基于事件的解決方案(如 upstart ),總會(huì)有一種優(yōu)化解決方案能夠滿足您的要求。使用 bootchart 包,您可以深入理解系統(tǒng)的引導(dǎo)時(shí)間是如何分配的,從而進(jìn)一步進(jìn)行優(yōu)化。
參考資料 學(xué)習(xí) 獲得產(chǎn)品和技術(shù) - 下一代
init 系統(tǒng)(initng )是替代 init 系統(tǒng)的一個(gè)基于依賴關(guān)系的方法。
- Ubuntu
upstart 系統(tǒng)是替代 init 系統(tǒng)的一個(gè)基于事件的方法。
Bootchart 是一個(gè)用于引導(dǎo)過程的性能分析和可視化工具。它可以搜集系統(tǒng)初始化過程中的性能數(shù)據(jù),然后在一條時(shí)間線上對(duì)其進(jìn)行二次處理。
einit 包是使用可擴(kuò)展標(biāo)記語言(XML)實(shí)現(xiàn)配置文件的初始化腳本的另一種方法。
- 另外一種有趣的
init 并行化模式是 Pardus 。這種方法不但可以刪除 Linux 引導(dǎo)的串行特性,而且還通過使用 Python 語言增加了系統(tǒng)的靈活性。
runit 包是使用服務(wù)管理的 init 方案的一個(gè)替代程序。
minit 包是 init 系統(tǒng)的一個(gè)小而全的版本。您可以研究 sysvinit 的源代碼。
- 定購免費(fèi)的 SEK for Linux,這是 2 張 DVD,其中包含了 IBM 在 Linux 平臺(tái)上的最新試用軟件,包括 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere?。
- 使用 IBM 試用版軟件 在 Linux 上構(gòu)建您的下一個(gè)開發(fā)項(xiàng)目,可從 developerWorks 上直接下載。
討論 |