LWN: stable kernel 爭(zhēng)論的核心問(wèn)題!
關(guān)注了就能看到更多這么棒的文章哦~
The core of the -stable debate
By Jonathan Corbet
July 22, 2021
DeepL assisted translation
https://lwn.net/Articles/863505/
關(guān)于哪些補(bǔ)丁應(yīng)該進(jìn)入 stable update,一直有爭(zhēng)議存在,爭(zhēng)議還不少。因此,當(dāng)最近這個(gè)話題最近再次出現(xiàn)時(shí),我們基本上認(rèn)為不會(huì)有什么新的信息出來(lái)。而且,基本上這次的討論整體來(lái)說(shuō)也是這樣進(jìn)行的,但是從這次交流中我們也能夠看到推動(dòng)這些討論的核心問(wèn)題究竟是什么。歸根結(jié)底,對(duì)于 stable tree 應(yīng)該是什么樣的,有兩種根本不同的看法。
5.13.2 的 stable update 并不算是小更新了,甚至已經(jīng)包含了 800 個(gè)補(bǔ)丁。這相當(dāng)于 5.13 mainline 開(kāi)發(fā)周期總的 patch 規(guī)模的 5%。如果算上其他版本的 stable kernel 在同一天需要進(jìn)行 review 的 patch 數(shù)量,總共有超過(guò) 2000 個(gè) stable 版本相關(guān)的 patch 需要進(jìn)行 review。哪怕對(duì)于 Linux kernel 這么大的大的社區(qū)來(lái)說(shuō),要想在原定的兩天時(shí)限內(nèi)處理完這些 review 也是很難做到的。即便如此,Hugh Dickins 還是對(duì)其中加入的幾個(gè)內(nèi)存管理 patch 提出了反對(duì),因?yàn)檫@些 patch 并沒(méi)有專門(mén)標(biāo)明要加入到 stable release 中。他認(rèn)為這些 pat 不適合 stable kernel,不應(yīng)該被放進(jìn)去。
stable-kernel 的維護(hù)者 Greg Kroah-Hartman 回應(yīng)說(shuō),stable update 這次規(guī)模這么大,主要是由于維護(hù)者手里一直存著這些 fix 等待合并窗口放開(kāi)。所以等到 -rc1 版本一發(fā)布,這些 fix 就會(huì)全部落入 stable update 中,因此,stable update 的內(nèi)容就非常多了。但很明顯,隨著時(shí)間的推移,進(jìn)入 stable kernel 的改動(dòng)數(shù)量一直在不斷增加。如果我們看一下每個(gè)版本的前五次 stable update 中的改動(dòng)數(shù)量(應(yīng)該足夠能涵蓋 merge-window 相關(guān)的 fixle ),結(jié)果是這樣的:
| Release | Updates | Changes | |
|---|---|---|---|
| First 5 | Total | ||
| 4.19 | 198 | 754 | 19,682 |
| 5.0 | 21 | 408 | 2,387 |
| 5.1 | 18 | 353 | 1,747 |
| 5.2 | 21 | 779 | 2,429 |
| 5.3 | 18 | 561 | 2,178 |
| 5.4 | 134 | 435 | 14,414 |
| 5.5 | 19 | 653 | 2,516 |
| 5.6 | 19 | 364 | 1,864 |
| 5.7 | 19 | 581 | 2,984 |
| 5.8 | 18 | 899 | 2,755 |
| 5.9 | 16 | 1,244 | 2,339 |
| 5.10 | 52 | 841 | 7,295 |
| 5.11 | 22 | 948 | 3,588 |
| 5.12 | 19 | 1,446 | 3,843 |
| 5.13 | 4 | 1,416 | 1,416 |
開(kāi)發(fā)者和維護(hù)者可以加上 "CC: [email protected]" 的 tag 來(lái)表明一個(gè) mainline patch 應(yīng)該被移植到 stable kernel 上去,但大多數(shù) patch 并不是經(jīng)過(guò)這個(gè)流程來(lái)進(jìn)入 stable kernel 的。在 5.13.4 的 1416 個(gè) commit 中只有 259 個(gè)(18%)包含這樣的 tag。而 stable kernel 的維護(hù)者實(shí)際上在采用越來(lái)越積極地策略來(lái)主動(dòng)尋找那些看起來(lái)像 fix 的 mainline patch,并把它們加到 stable kernel 中去。他們會(huì)根據(jù)在許多 patch 中都帶有的 fixes 這個(gè) tag 用來(lái)判斷這個(gè) patch 是一個(gè)需要移植的 fix patch ,此外也在使用一些機(jī)器學(xué)習(xí)的方法來(lái)選擇 patch。最終的效果就是很多 commit 在沒(méi)有明確 tag 的情況下就被包含進(jìn)了 stable update。雖然截至目前,5.13 還沒(méi)有達(dá)到發(fā)布五個(gè)穩(wěn)定版本的階段,但基本上可以預(yù)測(cè)出,它的前五個(gè) stable-update 中會(huì)進(jìn)行的改動(dòng)應(yīng)該會(huì)比前幾個(gè) Release 的相應(yīng)數(shù)量都要多。總體來(lái)說(shuō),進(jìn)入 stable update 的 patch 數(shù)量正在增加,其增速似乎超過(guò)了內(nèi)核開(kāi)發(fā)周期中合入的改動(dòng)的增速?,F(xiàn)在可以看到那些,long-term stable (長(zhǎng)期穩(wěn)定版)內(nèi)核在其 "stable"期間收到的 patch 數(shù)量比在其的 "final" release 前的開(kāi)發(fā)周期中收到的 patch 都要多。換句話說(shuō),當(dāng) Linus Torvalds 打好 tag 離開(kāi)的時(shí)候,這個(gè)開(kāi)發(fā)周期其實(shí)還遠(yuǎn)遠(yuǎn)沒(méi)有完成。
這項(xiàng)工作一直有些爭(zhēng)議,特別是當(dāng)出現(xiàn) regression (質(zhì)量回退)的時(shí)候。實(shí)際上 regression 是不可避免的,但如果在三個(gè)月的短暫穩(wěn)定周期內(nèi)就給內(nèi)核添加了超過(guò) 3000 個(gè)改動(dòng)的話,很難想象說(shuō)其中沒(méi)有會(huì)導(dǎo)致出現(xiàn)問(wèn)題的。這次被 Dickins 挑出來(lái)的 patch 并沒(méi)有造成任何 regression(目前還沒(méi)有看到相關(guān)的質(zhì)量問(wèn)題),但是內(nèi)存管理的開(kāi)發(fā)者們顯然很擔(dān)心這種可能性。
為了避免這樣的結(jié)果,內(nèi)存管理維護(hù)者 Andrew Morton 要求在沒(méi)有特別要求的情況下,不要將帶有他的 Signed-off-by tag 的 patch 納入 stable update。"目前,這種 -stable 相關(guān)的亂象正在凌駕于 MM 開(kāi)發(fā)者(有時(shí)是深思熟慮)的決定之上,這有點(diǎn)可怕"。Kroah-Hartman 問(wèn)那么應(yīng)該如何決定將一個(gè) patch 標(biāo)記為應(yīng)該移植回 stable 呢?具體來(lái)說(shuō),為什么有一些些明確是 fix 的 patch 沒(méi)有加上這些標(biāo)記呢?Morton 這樣解釋他們的想法:
廣義上講:主要考慮對(duì)最終用戶的影響。如果我們沒(méi)有看到由于該問(wèn)題而導(dǎo)致用戶可見(jiàn)的問(wèn)題的報(bào)告,并且我們預(yù)期不會(huì)出現(xiàn)這樣的事情,那么就不要 backport 移植回去。當(dāng)我們不能確定有什么好處時(shí),為什么要冒著造成 regression 的風(fēng)險(xiǎn)?
Kroah-Hartman 的立場(chǎng)是,如果一個(gè) patch 修復(fù)了某個(gè) bug,那么它就應(yīng)該包含在 stable update 中:
但是,你們都愿意花時(shí)間來(lái)在 changelog 中加上類似 "嘿,這修復(fù)了這個(gè)特定的 commit 中的 bug!" 這樣的 tag,但卻不愿意去 fix 帶有這個(gè) commit 的 kernel,這真的讓人感覺(jué)很奇怪。這對(duì)于那些關(guān)注 changelog 的人來(lái)說(shuō)是一個(gè)奇怪的行為。
Sasha Levin(他也負(fù)責(zé)穩(wěn)定版的更新)補(bǔ)充說(shuō),如果只有明確標(biāo)記過(guò)的 patch 會(huì)被 backport 回到 stable kernel 中的話,那么很多重要的 fix 就會(huì)遺漏掉。其中一些 fix 會(huì)通過(guò)其他途徑來(lái)進(jìn)入發(fā)行版提供商的 kernel 中去,這似乎并不是我們的理想目標(biāo)。
歸根結(jié)底,這就是分歧的根源:對(duì)于開(kāi)發(fā)出真正 stable 和沒(méi)有問(wèn)題的 stable update 的最佳方式,一直存在兩種不同的意見(jiàn)。
許多開(kāi)發(fā)者認(rèn)為 stable kernel 是人們精心選擇出來(lái)的一些 fix 的集合,其中每一個(gè) fix 都經(jīng)過(guò)了深入的 review 從而確定這是一個(gè)重要的 fix,并且不會(huì)導(dǎo)致 regression。升級(jí)到這些內(nèi)核應(yīng)該都是完全安全可靠的,因?yàn)樗麄冎挥袠O小的可能會(huì)引入之前版本中不會(huì)有的問(wèn)題。這種立場(chǎng)往往是那些復(fù)雜的、很容易就出現(xiàn)一些微小的質(zhì)量回退的 core subsystem 開(kāi)發(fā)者的共同看法。
內(nèi)存管理子系統(tǒng)就是一個(gè)典型例子。在 2020 年底同 XFS 文件系統(tǒng)的開(kāi)發(fā)者們也有過(guò)類似的爭(zhēng)論。內(nèi)存管理經(jīng)常需要對(duì)未來(lái)的情況進(jìn)行預(yù)測(cè),因此相關(guān)代碼會(huì)有很多復(fù)雜的啟發(fā)式判斷,需要能配合各種各樣的 workload 來(lái)正常工作。因此一個(gè)看似無(wú)害的改動(dòng)有時(shí)候就會(huì)在幾年之后才發(fā)現(xiàn)它給某些客戶特有的工作場(chǎng)景帶來(lái)了性能回退。內(nèi)存管理開(kāi)發(fā)人員認(rèn)識(shí)到,如果沒(méi)有這類 regression 事件,那么他們的生活才會(huì)更順利,所以他們會(huì)不遺余力地避免對(duì) stable kernel 進(jìn)行不必要的修改。
其他人,包括 stable 維護(hù)者,認(rèn)為需要把每一個(gè)理論上應(yīng)該 backport 的 fix 都移植回去才能得到最好的 kernel。開(kāi)發(fā)者在 fix 許多問(wèn)題的時(shí)候可能并未意識(shí)到這些 bug 對(duì)用戶的影響(甚至可能是 security 影響)。還有很多 fix 實(shí)際上是在很多問(wèn)題被發(fā)現(xiàn)之前就阻止了問(wèn)題的發(fā)生。
一些發(fā)行版提供商已經(jīng)采取了這個(gè)立場(chǎng),因此,他們對(duì)目前的狀況感到滿意。Justin Forbes 寫(xiě)道:"目前的 stable
流程中修復(fù)的 bug 比起它引入的 bug 要多"。Android kernel 也越來(lái)越多地明顯地跟 stable update 緊密結(jié)合起來(lái),這是一種能夠獲得盡可能多的 fix 的方式?;谶@方面的經(jīng)驗(yàn),Kroah-Hartman 說(shuō):"我有數(shù)據(jù)支持這一方的論點(diǎn),還有安全相關(guān)的研究結(jié)論可以說(shuō)明忽視這些 stable release 會(huì)使系統(tǒng)由于已知風(fēng)險(xiǎn)而暴露給攻擊者"。
哪種立場(chǎng)是 "正確的",目前還并不完全清楚,但是哪種立場(chǎng)當(dāng)前 "勝出" 卻是毫無(wú)疑問(wèn)的。在 Linux 世界里,總是由做相關(guān)工作的人來(lái)決定該如何做這個(gè)工作,而 stable 維護(hù)者選擇了這種 "混雜" 的方法。很想知道是不是會(huì)有一個(gè)社區(qū)來(lái)按照上述的更加嚴(yán)格的策略來(lái)維護(hù)另一個(gè) ultra-stable kernel,不確定是否有人有時(shí)間來(lái)這樣做。
在邊緣地區(qū)總是有一些調(diào)整余地的,可以選擇對(duì)某些子系統(tǒng)采取特殊策略。似乎對(duì)于內(nèi)存管理方面來(lái)說(shuō)可能會(huì)作為特例處理。而且如果有更多的測(cè)試的話,肯定會(huì)有幫助。這些年來(lái) stable release 的測(cè)試情況已經(jīng)有了很大的改善,但仍然可以變得更好。Ted Ts'o 建議,如果有人能有時(shí)間來(lái)創(chuàng)建一個(gè) "perfbot" 系統(tǒng)專門(mén)來(lái)尋找性能上的 regression ,那會(huì)很有用處。不過(guò),性能方面的 regression 是特別難以測(cè)試的,它會(huì)占用大量資源,而且?guī)缀醪豢赡苣M出每一種類型的 workload。
無(wú)論如何,看起來(lái)這種大規(guī)模的 stable update 將繼續(xù)成為未來(lái)的主要規(guī)則。希望它們?nèi)阅芾^續(xù)保持很少的 regression,但沒(méi)有可能保證永遠(yuǎn)不會(huì)出現(xiàn) regression。因此,我們可以預(yù)測(cè)得到,這種關(guān)于什么應(yīng)該或者不應(yīng)該進(jìn)入 stable update 的爭(zhēng)論將無(wú)限期地持續(xù)下去。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開(kāi)源社區(qū)的各種新近言論~
