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