整理丨諾亞
出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)
近日,一位Linux內(nèi)核工程師出于興趣用Rust編寫了一個(gè)Linux調(diào)度器。
這位來自Ubuntu制造商Canonical的工程師名叫Andrea Righi。他在X(推特)上發(fā)文談到,他利用圣誕假期進(jìn)行了這項(xiàng)實(shí)驗(yàn)。沒想到這個(gè)只是“出于好玩”而進(jìn)行的項(xiàng)目卻帶來了意外驚喜。
初步結(jié)果顯示:通過sched_ext實(shí)現(xiàn)并基于eBPF技術(shù)、能夠在運(yùn)行時(shí)加載的Rust調(diào)度器具有很大的潛力和希望。
1、令人意外的結(jié)果:Rust版超越默認(rèn)版
“結(jié)果讓我很驚訝。它不僅能夠正常工作,而且在某些負(fù)載(例如游戲)下甚至可以超越Linux內(nèi)核默認(rèn)的EEVDF調(diào)度器?!?/p>
Righi表示,盡管仍處于原型階段,但它成功完成了使命,即“證明在用戶空間實(shí)現(xiàn)運(yùn)行的工作調(diào)度器是可行的,并且在某些特定條件下甚至可以超越Linux默認(rèn)調(diào)度器的性能”。
他還分享了一段視頻:一個(gè)簡單的電腦游戲Terraria正常運(yùn)行,同時(shí)該機(jī)器正在后臺(tái)進(jìn)行內(nèi)核編譯。
基于廣大吃瓜群眾的要求,Righi將Linux默認(rèn)調(diào)度器和Rust版調(diào)度器的內(nèi)核構(gòu)建時(shí)間和游戲性能進(jìn)行了比對(duì)。
截圖:來自X@arighi
可以看到,其中:
- linux sched:內(nèi)核構(gòu)建280s,Terraria ~每秒30幀
- rustland:內(nèi)核構(gòu)建361s,Terraria ~每秒60幀
也就是說,切換到Rust版調(diào)度器后,游戲畫面提升到了每秒60幀,是之前的兩倍,而同期內(nèi)核編譯只是多花了約30%的構(gòu)建時(shí)間。由此可見,“scx_rustland”調(diào)度器在游戲中表現(xiàn)的確優(yōu)于Linux內(nèi)核默認(rèn)調(diào)度器。
Righi已將相關(guān)代碼托管在了GitHub上。感興趣的朋友可以繼續(xù)關(guān)注其未來的發(fā)展方向。
2、內(nèi)核調(diào)度器之爭:Linux需要更多的調(diào)度器嗎?
Linux內(nèi)核調(diào)度器負(fù)責(zé)執(zhí)行一項(xiàng)關(guān)鍵任務(wù),即分配給應(yīng)用程序一段段的CPU時(shí)間,旨在確保每個(gè)應(yīng)用程序都能公平地獲得執(zhí)行時(shí)間。
通常,這一目標(biāo)是通過使用完全公平調(diào)度(Completely Fair Scheduler, CFS)算法來實(shí)現(xiàn)的。(注:CFS算法致力于平衡各個(gè)應(yīng)用程序?qū)μ幚砥髻Y源的需求,以達(dá)到整體系統(tǒng)性能最優(yōu)化的效果。)
盡管Linux的“一刀切”式調(diào)度器在過去很長一段時(shí)間內(nèi)表現(xiàn)出色,但在如今分布式計(jì)算環(huán)境日益復(fù)雜、IT環(huán)境異構(gòu)化加劇的背景下,可能需要對(duì)其進(jìn)行更新升級(jí)。
當(dāng)傳統(tǒng)的單一調(diào)度策略難以滿足現(xiàn)實(shí)需求時(shí),人們?cè)趯で蟾嗥凭值穆窂?,比如,通過引入如BPF這樣的技術(shù)來實(shí)現(xiàn)更加靈活、可擴(kuò)展且針對(duì)性更強(qiáng)的調(diào)度機(jī)制。
簡單說明一下BPF。所謂BPF,是Berkeley Packet Filter的縮寫。BPF提供了一種當(dāng)內(nèi)核或應(yīng)用特定事件發(fā)生時(shí)候,執(zhí)行一段代碼的能力。BPF 采用了虛擬機(jī)指令規(guī)范,所以也可以看作一種虛擬機(jī)實(shí)現(xiàn),使我們可以在不修改內(nèi)核源碼和重新編譯的情況下,提供一種擴(kuò)展內(nèi)核的能力的方法。
2013 年由技術(shù)大牛Alexei Starovoitov 向Linux社區(qū)提交了重新實(shí)現(xiàn)BPF的內(nèi)核補(bǔ)丁,相關(guān)工作于2014年正式并入Linux 內(nèi)核主線。此舉將其擴(kuò)展成了通用的執(zhí)行引擎,稱為eBPF,其可以完成多種任務(wù),包括用來創(chuàng)建先進(jìn)的性能分析工具。
LWN.Net首席編輯Jonathan Corbett在今年2月評(píng)論道:“將BPF引入內(nèi)核CPU調(diào)度器只是時(shí)間問題?!?/p>
Corbett解釋說,基于BPF的調(diào)度器之所以有意義,有多個(gè)原因:它使得嘗試新的調(diào)度方法變得更加容易。如今的系統(tǒng)遠(yuǎn)比過去幾十年要復(fù)雜得多,因此需要更多領(lǐng)域特定和針對(duì)性的調(diào)度解決方案(例如針對(duì)游戲和網(wǎng)絡(luò)應(yīng)用的調(diào)度器)。此外,它還能為開發(fā)者提供一種針對(duì)其自身應(yīng)用程序優(yōu)化CPU使用方式的方法。
而Righi開發(fā)的scx_rustland是對(duì)sched_ext這一實(shí)驗(yàn)性Linux內(nèi)核特性的實(shí)現(xiàn),sched_ext允許運(yùn)行可在內(nèi)核中創(chuàng)建并加載的基于BPF的內(nèi)核線程調(diào)度器。該特性由來自Meta和Google的一組工程師以及其他內(nèi)核社區(qū)成員共同研發(fā),并希望有一天能將其合并到Linux內(nèi)核的核心代碼庫中。
值得注意的是,并非Linux社區(qū)中的每個(gè)人都支持動(dòng)態(tài)調(diào)度這一理念,其中包括Linus Torvalds本人。Linux調(diào)度器維護(hù)者Peter Zijlstra在評(píng)論sched_ext的首次發(fā)布時(shí)提到:“我討厭這一切”,并補(bǔ)充道,鑒于替代調(diào)度器引入的復(fù)雜性,Torvalds曾否決了之前關(guān)于此類調(diào)度器的所有嘗試。
此外,AMD和Google兩家公司也提出了各自的替代調(diào)度器方案。這些舉措表明,在如何優(yōu)化Linux內(nèi)核調(diào)度以適應(yīng)更復(fù)雜異構(gòu)環(huán)境的問題上,業(yè)內(nèi)依舊各執(zhí)一詞。
3、使用Rust,真的會(huì)比C更有優(yōu)勢(shì)嗎?
近年來,在編程語言界,Rust的存在感越來越強(qiáng)。不少公司、個(gè)人都開始對(duì)使用內(nèi)存安全的Rust進(jìn)行關(guān)鍵任務(wù)開發(fā)產(chǎn)生了濃厚興趣,以取代可能意外引入安全漏洞的C語言。
此前,我們也曾在《Linux 誕生32年:“暴君”Linus 平和了》一文中報(bào)道過,Torvalds對(duì)于在內(nèi)核中使用Rust持開放態(tài)度。他曾談到,從明年開始會(huì)著手將Rust引入驅(qū)動(dòng)程序、甚至是某些主要子系統(tǒng),總之“Rust確實(shí)有成為內(nèi)核重要部分的趨勢(shì)”。
因此,在Linux新聞網(wǎng)站Phoronix報(bào)道Righi的工作時(shí),將關(guān)注點(diǎn)放在了Rust的使用上。讓這篇文章引起討論的焦點(diǎn)從調(diào)度器本身挪開,集中到了關(guān)于使用Rust而非C語言是否更有優(yōu)勢(shì)上面。
有人質(zhì)疑:“這個(gè)調(diào)度器到底有何與眾不同,使其表現(xiàn)出了實(shí)質(zhì)性的差異?是因?yàn)樗形赐瓿蛇€是確實(shí)因?yàn)樗鼉?yōu)秀?因?yàn)槲也幌嘈臨ust本身會(huì)比C語言更好。究竟有什么是在Rust中能做而在C中做不到的呢?”
有人更是直接指出,調(diào)度器的設(shè)計(jì)始終涉及權(quán)衡取舍。顯然,這款為游戲優(yōu)化的調(diào)度器犧牲了一些其他功能以換取更好的游戲性能。
當(dāng)然也有人對(duì)此持更為積極的態(tài)度。在Hacker News討論中,有網(wǎng)友寫道:“這篇新聞告訴我們的是,Rust實(shí)現(xiàn)的調(diào)度器在這一領(lǐng)域可以與C語言實(shí)現(xiàn)相媲美。這一消息為我們解鎖了更多選擇,無論是C語言調(diào)度器還是Rust調(diào)度器,意味著Linux社區(qū)在處理各種工作負(fù)載時(shí)可以獲得更好的體驗(yàn)?!?/p>
而對(duì)于Righi本人,他在接受媒體采訪時(shí)表示,Rust提供了極大的靈活性,這使他能夠迅速啟動(dòng)并推進(jìn)這個(gè)項(xiàng)目。
“我不能說Rust在性能提升方面貢獻(xiàn)巨大,但它讓我能夠在幾周內(nèi)編寫出這個(gè)調(diào)度器,同時(shí)實(shí)現(xiàn)和重用了優(yōu)雅的高級(jí)抽象,并在我需要的時(shí)候能夠深入到底層細(xì)節(jié)?!?/p>
參考鏈接:
https://www.phoronix.com/news/Rust-Linux-Scheduler-Experiment
https://thenewstack.io/bpf-opens-a-door-to-linux-dynamic-scheduling-maybe-with-rust/