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