LWN:小話(huà)題:Realtime, Futex, ntfs3!
關(guān)注了就能看到更多這么棒的文章哦~
Short subjects: Realtime, Futexes, and ntfs3
By Jonathan Corbet
August 16, 2021
DeepL assisted translation
https://lwn.net/Articles/866112/
即使在(北半球)夏天大家都因?yàn)檠籽紫娜斩浅c紤械娜兆永?,?nèi)核社區(qū)也仍然保持著繁忙。編者看到了許多方面的進(jìn)展。但是因?yàn)楦鞣N原因無(wú)法為它們專(zhuān)門(mén)寫(xiě)出一系列專(zhuān)題文章。因此現(xiàn)在是時(shí)候該補(bǔ)上這些話(huà)題了。請(qǐng)繼續(xù)閱讀本文來(lái)了解 realtime patch set、重新塑造 futexes,以及對(duì) ntfs3 文件系統(tǒng)的更新。
Realtime
realtime preemption (實(shí)時(shí)搶占)是一個(gè)歷史悠久的話(huà)題。它第一次出現(xiàn)在 LWN 上是在 2004 年。多年來(lái),這項(xiàng)工作對(duì)整個(gè)內(nèi)核開(kāi)發(fā)產(chǎn)生了重大影響。許多最近才加入 core kernel 的一些功能,其實(shí)都起源于 realtime 代碼庫(kù)。不過(guò),realtime 相關(guān)工作中最早的一部分,也就是可搶占的鎖功能(preemptible locking infrastructure),仍然游離在 mainline 之外。如果不合入這些鎖相關(guān)的改動(dòng)的話(huà),mainline 就不可能滿(mǎn)足那些實(shí)時(shí)性高的場(chǎng)景所需要的響應(yīng)時(shí)間要求。
這個(gè)特別的鎖實(shí)現(xiàn),將幾乎所有的鎖(包括 spinlock),都變成了睡眠鎖(sleeping lock)。這就確保了更高優(yōu)先級(jí)的任務(wù)總是能夠迅速加進(jìn)來(lái)占有處理器。這是一種讓內(nèi)核開(kāi)發(fā)者感到非常擔(dān)憂(yōu)的改動(dòng),因?yàn)樵谶@個(gè)位置如果有 bug 會(huì)導(dǎo)致各種莫名其妙的問(wèn)題。因此,沒(méi)人有膽子敢預(yù)測(cè)這個(gè)鎖功能何時(shí)會(huì)被合并到 mainline。編者很清楚這一點(diǎn),因?yàn)榫幷咴浅W孕诺仡A(yù)測(cè)它將在一年內(nèi)被合入 mainline,那是在 2007 年的時(shí)候。
不過(guò),人們傾向于認(rèn)為最終的日子已經(jīng)快要到來(lái)了。Realtime 的開(kāi)發(fā)者 Thomas Gleixner 已經(jīng)將這部分鎖基礎(chǔ)設(shè)施功能重新帶回到了郵件列表,開(kāi)始了 review。這是由 72 個(gè) patch 組成的改動(dòng),其第五版已于 8 月 15 日發(fā)布。使用了正常 config 配置的內(nèi)核在帶上這些 patch 后的表現(xiàn)應(yīng)該沒(méi)有什么差異,但那些打開(kāi)了 realtime 配置的內(nèi)核則可以用上 realtime 專(zhuān)用的 mutex、wait/wound mutex、reader/writer semaphore 信號(hào)量、spinlock 以及 reader/writer lock。
回復(fù)這組 patch 的 comment 已經(jīng)越來(lái)越少了,目前看起來(lái)并沒(méi)有什么人反對(duì)。不過(guò)我們還是要注意,Linus Torvalds 尚未就這個(gè)問(wèn)題發(fā)表他的看法。除非有什么意外,否則的話(huà)這部分核心的 realtime 代碼最終會(huì)進(jìn)入 mainline。然而,編者還是太有經(jīng)驗(yàn)了,也很聰明、膽小,可不敢猜測(cè)這件事的具體時(shí)間。
A smaller step for futex2
關(guān)于 realtime 這個(gè)改動(dòng)的 review 很少,也許是因?yàn)榇蠖鄶?shù)開(kāi)發(fā)者都害怕深入分析如此復(fù)雜的代碼。然而,在內(nèi)核中還有一些地方更讓人害怕,比如 futex 子系統(tǒng)肯定是其中之一。Futexes 為用戶(hù)空間提供了 fast mutex 功能。起初這只是一個(gè)很簡(jiǎn)單的子系統(tǒng),但沒(méi)能一直保持下去。隨著時(shí)間的推移,很明顯,人們?cè)絹?lái)越意識(shí)到 futexes 需要進(jìn)行一些改進(jìn),從而能更適合當(dāng)前的工作場(chǎng)景。同時(shí),也拋棄 multiplexer futex() 這個(gè)系統(tǒng)調(diào)用。
近來(lái) André Almeida 一直在推動(dòng)他提出的 futex2 提案,希望對(duì)這方面進(jìn)行改進(jìn)。他的改動(dòng)是將 futex 功能分成幾個(gè)各自獨(dú)立的系統(tǒng)調(diào)用,并支持 lock size,當(dāng)然還有別的改動(dòng)。雖然人們對(duì)這項(xiàng)工作很感興趣,但進(jìn)展卻很緩慢(情況其實(shí)比緩慢更糟)。內(nèi)核目前基本上比起一兩年前的 futex 子系統(tǒng)基本上沒(méi)有多大變化。
為了推動(dòng)進(jìn)展,Almeida 發(fā)布了一個(gè)新的 patch set,先大大地降低了自己的雄心。這組 patch 不再試圖加入一個(gè)使用了一套完全不同的系統(tǒng)調(diào)用的子系統(tǒng),而是增加了一個(gè)能與現(xiàn)有 futexes 一起配合工作的系統(tǒng)調(diào)用:
struct futex_waitv {
uint64_t val;
void *uaddr;
unsigned int flags;
};
int futex_waitv(struct futex_waitv *waiters, unsigned int nr_futexes,
unsigned int flags, struct timespec *timo);
這個(gè)函數(shù)將使得調(diào)用進(jìn)程可以同時(shí)等待好幾個(gè) futex,當(dāng)一個(gè)或多個(gè) futexes 能夠被獲取到(或發(fā)生超時(shí))時(shí)就返回。目前的 futex API 尚不支持這一功能,但事實(shí)證明它對(duì)游戲引擎這種場(chǎng)景特別有用,在使用新的系統(tǒng)調(diào)用時(shí)性能明顯得到了提高。相關(guān)的 documentation patch 里更詳細(xì)地介紹了新的 API。
這個(gè)補(bǔ)丁集在發(fā)布后的一周內(nèi)沒(méi)有得到任何評(píng)論。如果我們假設(shè)這些沉默意味著沒(méi)有反對(duì)意見(jiàn)(而不是人們沒(méi)興趣 review)的話(huà),這項(xiàng) futex2 的改動(dòng)可能會(huì)在不久之后進(jìn)入 mainline。futex2 的其他工作是否會(huì)在接下來(lái)繼續(xù)跟進(jìn),這取決于推動(dòng)這些功能的使用場(chǎng)景的說(shuō)服力有多大。如果 futex_waitv() 已經(jīng)解決了最糟糕的問(wèn)題了的話(huà),那可能就沒(méi)有什么動(dòng)力去推動(dòng)其他的改動(dòng)了。
Waiting for ntfs3
內(nèi)核長(zhǎng)期以來(lái)一直帶 NTFS 文件系統(tǒng)的支持,但它的性能和功能方面一直都有些不足。用戶(hù)社區(qū)很希望能擁有更好的實(shí)現(xiàn)。從各方面來(lái)看,Konstantin Komarov 發(fā)布的 ntfs3 實(shí)現(xiàn)確實(shí)就是人們所期望的 “更好的東西”,但是目前仍然不清楚它何時(shí)會(huì)被合并。這項(xiàng)工作是在一年前首次發(fā)布的,而第 27 版改動(dòng)是在 7 月 29 日發(fā)布。
事實(shí)證明,這個(gè)功能遲遲未進(jìn)入 mainline 使得用戶(hù)感到很沮喪。Neal Gompa 的抱怨就很典型:
我知道和你們這些了不起的人相比,我只是一個(gè)低級(jí)用戶(hù)而已,但是看到這個(gè)對(duì)很多人會(huì)有重大影響的功能在這幾個(gè)月沒(méi)有任何進(jìn)展,這讓人很沮喪。
這是一個(gè)恥辱,因?yàn)?ntfs3 驅(qū)動(dòng)比目前的 ntfs 驅(qū)動(dòng)要好得多,而且是對(duì)無(wú)人維護(hù)的 ntfs-3g FUSE 實(shí)現(xiàn)版本的一種可靠替代方案。
Torvalds 說(shuō),也許現(xiàn)在是時(shí)候合并這些代碼了,但是,這可能并不會(huì)馬上發(fā)生。
目前,ntfs3 面臨的最大障礙似乎是對(duì)其背后的開(kāi)發(fā)工作的擔(dān)憂(yōu)。從公開(kāi)的信息來(lái)看,ntfs3 似乎是一個(gè)人進(jìn)行開(kāi)發(fā)的項(xiàng)目,這讓其他的文件系統(tǒng)開(kāi)發(fā)者感到有些緊張。因?yàn)檫@些開(kāi)發(fā)者一直在報(bào)告 ntfs3 相關(guān)的 test 失敗,但并沒(méi)有得到解決。同時(shí),Komarov 有時(shí)候?qū)θ藗兊奶釂?wèn)沒(méi)有回應(yīng)。例如,在 4 月初發(fā)布的第 26 版上的各種 review 意見(jiàn)并沒(méi)有得到答復(fù)。這種沉默,帶給人的印象是 ntfs3 背后沒(méi)有很多開(kāi)發(fā)精力在支持它。(值得注意的是,其他一些開(kāi)發(fā)者對(duì) Komarov 的回復(fù)情況感到滿(mǎn)意)
不足為奇,文件系統(tǒng)開(kāi)發(fā)者對(duì)要承擔(dān)一個(gè)新的 NTFS 實(shí)現(xiàn)并不多么熱心,因?yàn)樗赡軙?huì)有嚴(yán)重的問(wèn)題,而且沒(méi)有人許諾提供可靠的支持。ntfs3 要想得到合并,就需要以某種方式來(lái)解決這些擔(dān)憂(yōu)。正如 Ted Ts'o 所建議的那樣,一種方法是其他開(kāi)發(fā)者(也許是一個(gè)或多個(gè)希望在內(nèi)核中看到更好的 NTFS 實(shí)現(xiàn)的發(fā)行版提供商的開(kāi)發(fā)者),能開(kāi)始為 ntfs3 貢獻(xiàn)補(bǔ)丁,并承諾幫助作者繼續(xù)維護(hù)。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開(kāi)源社區(qū)的各種新近言論~
