Linux系統(tǒng)提速的必修課
像以往一樣,依然在不斷編譯新版 Linux kernel 內(nèi)核——Linux 系統(tǒng)提速的必修課。和 Linux kernel BFS 的相遇充滿(mǎn)了巧合下的必然?,F(xiàn)在看來(lái),BFS Kernel 是 Linux 在半年內(nèi)給我的最大驚喜——系統(tǒng)像電視購(gòu)物主持人一樣充滿(mǎn)了力量和激情!而且是人能感覺(jué)得到的快!特以此文獻(xiàn)給系統(tǒng)編譯狂人,桌面提速狂 Linux 控。向所有 Linux 桌面用戶(hù)力頂 BFS。
像以往一樣,依然在不斷編譯新版 Linux kernel 內(nèi)核——Linux 系統(tǒng)提速的必修課。和 Linux kernel BFS 的相遇充滿(mǎn)了巧合下的必然?,F(xiàn)在看來(lái),BFS Kernel 是 Linux 在半年內(nèi)給我的最大驚喜——系統(tǒng)像電視購(gòu)物主持人一樣充滿(mǎn)了力量和激情!而且是人能感覺(jué)得到的快!特以此文獻(xiàn)給系統(tǒng)編譯狂人,桌面提速狂 Linux 控。向所有 Linux 桌面用戶(hù)力頂 BFS。
最先在 Kindle 上看 xkcd 漫畫(huà),有漫畫(huà)如是:
A: 經(jīng)過(guò)某些人千百年的努力,最新的 Linux 補(bǔ)丁支持 4096 個(gè) CPU 的電腦了!原來(lái)只能支持 1024 個(gè)!
B: 全屏 Flash 視頻卡不卡啊?
A: 卡。不過(guò)誰(shuí)他丫的看視頻啊?
而關(guān)于 BFS 的消息是最先在 Linux Magazine 上看到的;不久之后 G1 Android 手機(jī) ROM 修改大神 CM 開(kāi)始在他的測(cè)試版 CyanogenMod 使用 BFS 作為 kernel 的 Scheduler,試用之后發(fā)現(xiàn)手機(jī)系統(tǒng)速度明顯加快。 用手滑動(dòng)左右翻屏就像 Opera 下滾動(dòng)網(wǎng)頁(yè)那么平滑,搞得屏幕覆膜上多了好多指紋印。心癢已久,恰逢 Linux kernel 2.6.31 新版正式發(fā)布,打上 BFS Patch 編譯,重啟。神一樣的提速再次出現(xiàn)在我 4 年高齡的筆記本電腦上,注入了雞血的 KDE4 讓人無(wú)比興奮。快!快!快!所以,BFS 是什么?
要知道 BFS 是什么最好先了解一下它的作者,傳說(shuō)中的澳洲猛士 CK。
CK,Con Kolivas,男, 澳大利亞中年男子,資深內(nèi)核 hacker。眾所周知,Linux Kernel 是聚集了一幫天才蠢才和暴君怪胎的地方,CK 貌似最適合這種地方的人。是真的貌似,一張電影里面典型高智商通緝犯的臉。
幾年前編譯 Linux kernel,ck 補(bǔ)丁集就是系統(tǒng)提速的代名詞。當(dāng)時(shí)編譯內(nèi)核的三部曲是下 kernel 源碼,打上 ck 補(bǔ)丁集,編譯安裝。后來(lái)上游代碼將 ck 補(bǔ)丁集穩(wěn)定的部分不斷吸收,它的影響力也漸漸消失。
CK 本身對(duì)任務(wù)調(diào)度有很深的造詣,他聰明而經(jīng)典地實(shí)現(xiàn)了 fair scheduling,而實(shí)現(xiàn)模式被 Igor 借鑒改進(jìn)最終寫(xiě)出了現(xiàn)在 kernel 用的進(jìn)程調(diào)度管理器 CFS (Completely Fair Scheduler)。不得不順便介紹一下任務(wù)調(diào)度。Kernel 的進(jìn)程調(diào)度主要是將 CPU 資源分配給各種驅(qū)動(dòng)、進(jìn)程等等。你可能聽(tīng)說(shuō)過(guò),一般人的大腦使用率不足 20% 這種科學(xué)或者偽科學(xué)言論。但事實(shí)是,你電腦上的 CPU 從來(lái)就沒(méi)有真正被 100% 的利用過(guò)(別跟我說(shuō)你在資源管理器里面看到過(guò) CPU 100%,我還見(jiàn)過(guò) 101% 呢)。如何將各種運(yùn)算任務(wù)一刻不停又有條不紊的塞給 CPU 處理是一門(mén)嚴(yán)肅的科學(xué),絕不是電視購(gòu)物導(dǎo)購(gòu)能解決的問(wèn)題。一次塞的運(yùn)算量少了,CPU 閑著,運(yùn)算時(shí)間增長(zhǎng),電腦慢了;而一次塞的運(yùn)算多了,CPU 忙不過(guò)來(lái),運(yùn)算又要在門(mén)口排隊(duì),電腦也慢了。進(jìn)程調(diào)度主要是用算法解決這個(gè)問(wèn)題,而現(xiàn)在 Linux Kernel 用的 CFS 據(jù)說(shuō)非常經(jīng)典,在不同情況下都可達(dá)到相當(dāng)高的 CPU 利用率。而現(xiàn)用 CFS 也是在 2.6.23 才加入的,取代原來(lái) O(1),直接將 Linux 桌面速度從 XX 時(shí)代帶入了 XX+N 時(shí)代。
兩年前,CK 淡出了內(nèi)核開(kāi)發(fā),忽然從江湖中蒸發(fā)。幾周前,CK 重出江湖,兩年磨一劍,帶來(lái)了 BFS ,全稱(chēng) Brain Fuck Scheduler (只認(rèn)識(shí)中間那個(gè)單詞的請(qǐng)參考谷歌翻譯),聲稱(chēng)專(zhuān)為低端硬件設(shè)計(jì)(我的理解是不超過(guò) 10 個(gè) CPU 的電腦電視手機(jī)游戲機(jī)都算低端機(jī)),說(shuō)白了就是比 Kernel 默認(rèn)要更加山崩地裂海枯石爛房?jī)r(jià)上漲油價(jià)飛升的快。BFS 為什么叫這個(gè)名字?為了中文用戶(hù),不能三個(gè)詞讓他們一個(gè)也不懂吧? 好吧,這名字有點(diǎn)不雅,不過(guò)算是直爽。對(duì)了,據(jù)說(shuō) CK 也是看到上面我提到的漫畫(huà)才開(kāi)始劍走偏鋒。真正有幾個(gè)人用有上千 CPU 的電腦呢?為什么要為這種擴(kuò)展性犧牲桌面性能。BFS 就在其間做了取舍,僅僅支持最多 16 個(gè) CPU ,把問(wèn)題外沿做小,讓算法更簡(jiǎn)單精悍高效。作為原理來(lái)講,這足夠解釋速度的來(lái)源。對(duì)于其它廢問(wèn)題, CK 專(zhuān)門(mén)寫(xiě)了一個(gè) FAQ。在可以預(yù)見(jiàn)的將來(lái),BFS 也不會(huì)進(jìn)入 mainline kernel,說(shuō)白了是取向問(wèn)題。
關(guān)鍵問(wèn)題是怎么用?
下 2.6.31 的 kernel 源代碼,如果你不知道在哪里下的話就不必往下看了,在當(dāng)前歷史時(shí)期您還是搞不定的。再去:http://ck.kolivas.org/patches/bfs/ 下第一個(gè) patch,現(xiàn)在是 2.6.31 開(kāi)頭的,表示適用該版本。解壓內(nèi)核源碼,打上 patch,配置以后編譯安裝。現(xiàn)在 BFS 還在測(cè)試期,沒(méi)有完全成熟,但已經(jīng)相當(dāng)可用。編譯的時(shí)候有什么需要配置的?不需要, Scheduler 這東西太底層了,打上補(bǔ)丁就把原來(lái)的 CFS 替換掉了,沒(méi)什么選項(xiàng)給你選。如果你非要問(wèn)的話,不就圖個(gè)快么,記著把配置弄到 1000Hz,開(kāi) preempt ,禁掉 dynamic ticks。編譯重啟不用說(shuō)了,我可以酷酷的扔下一個(gè) have fun 然后去玩 Mac 了,反正你機(jī)器啟動(dòng)不了不要找我。雖然我純凈 kernel 單加 BFS Patch 編譯成功啟動(dòng)沒(méi)問(wèn)題,依然有一位倒霉的推油編譯以后不知道怎么折騰的無(wú)法啟動(dòng)。可另外被我忽悠成功的推友們反應(yīng)一致:“快!人能感覺(jué)得到的快!”
到底值不值得上手 ,有沒(méi)有評(píng)測(cè)?
這是某些不夠剽悍的讀者會(huì)掙扎到最后的問(wèn)題。BFS 原理上講,機(jī)器配置越低,感受會(huì)越明顯。如果你非要評(píng)測(cè)的話,Phoronix 這個(gè)專(zhuān)業(yè)的 Linux 測(cè)評(píng)狂網(wǎng)站也出了一份。我可以提前劇透結(jié)論,區(qū)別都很小,BFS 勝出絕大部分測(cè)試,然而優(yōu)勢(shì)不明顯。我只是補(bǔ)充一下絕大多數(shù)折騰過(guò)的人的感受
——快 !人能感覺(jué)到的快!
【編輯推薦】