LWN:5.18 開發(fā)周期數(shù)據(jù)分析!
關(guān)注了就能看到更多這么棒的文章哦~
Statistics from the 5.18 development cycle
By Jonathan Corbet
May 23, 2022
DeepL assisted translation
https://lwn.net/Articles/895800/
5.18 版內(nèi)核在經(jīng)歷了 9 周的開發(fā)周期后于 5 月 22 日發(fā)布。這說明又到了該看看這次 release 背后的一些統(tǒng)計(jì)數(shù)據(jù)的時(shí)候了,這是近期最繁忙的一次 release。請繼續(xù)閱讀來了解 5.18 內(nèi)核中的代碼都來自哪里,以及是如何進(jìn)入 mainline 的。
在 5.18 開發(fā)周期中,有 2024 名開發(fā)者提交了 14954 個(gè) non-merge changeset,其中 289 人是首次給內(nèi)核提供代碼貢獻(xiàn)。這些數(shù)字都不是歷史最高值,盡管開發(fā)者的數(shù)量已經(jīng)很接近迄今為止的最高值了(5.13 版本時(shí)的 2062)。這個(gè)版本中內(nèi)核增加了 756,00 行代碼。
對 5.18 貢獻(xiàn)最大的人是:
Most active 5.18 developers
By changesets Krzysztof?Kozlowski 214 1.4% Matthew Wilcox 164 1.1% Christoph Hellwig 154 1.0% Geert?Uytterhoeven 140 0.9% Ville Syrj?l? 135 0.9% Jonathan Cameron 119 0.8% Andy Shevchenko 118 0.8% Lorenzo Bianconi 117 0.8% Vladimir Oltean 111 0.7% Hans de Goede 110 0.7% Martin Kaiser 110 0.7% Colin Ian King 104 0.7% Sean?Christopherson 100 0.7% Jakub Kicinski 100 0.7% Christophe JAILLET 89 0.6% Michael Straube 87 0.6% Jani Nikula 86 0.6% Trond Myklebust 81 0.5% Eric Dumazet 80 0.5% Christophe Leroy 80 0.5%
By changed lines Leo Li 227676 19.4% Qingqing Zhuo 197757 16.9% Ian Rogers 72008 6.1% Alan Kao 15814 1.3% Ming Qian 12176 1.0% Linus Walleij 8881 0.8% Krzysztof Kozlowski 8844 0.8% Dimitris Michailidis 8791 0.7% Christoph Hellwig 7165 0.6% Matt Roper 7114 0.6% Jakub Kicinski 7040 0.6% Jacob Keller 6877 0.6% Geert Uytterhoeven 6039 0.5% Ranjani Sridharan 5768 0.5% Evan Quan 5232 0.4% Guodong Liu 4944 0.4% Mauro?Carvalho?Chehab 4816 0.4% Vladimir Oltean 4776 0.4% Brett Creeley 4660 0.4% Adrian Hunter 4651 0.4%
Krzysztof Kozlowski 是為 5.18 貢獻(xiàn)最多 patch 的開發(fā)者。他的工作主要是對 device-tree 的更新。Matthew Wilcox 成功地合并了另一組 folio patch。Christoph Hellwig 繼續(xù)對 block 和文件系統(tǒng)層進(jìn)行大規(guī)模重構(gòu)。Geert Uytterhoeven 為 Renesas 的 pin-control 代碼進(jìn)行了大量的改進(jìn),Ville Syrj?l? 在英特爾 i915 圖形驅(qū)動(dòng)上做了大量工作。
在 "changed lines" 這一列中,Leo Li 僅用 5 個(gè) patch 就為 AMD 圖形驅(qū)動(dòng)增加了超過 20 萬行的寄存器定義,然后 Qingqing Zhuo 又添加了近 20 萬行。Ian Rogers 對 perf 工具進(jìn)行了一些改進(jìn),Alan Kao 貢獻(xiàn)了一個(gè)刪除 nds32 架構(gòu)的 patch,Ming Qian 貢獻(xiàn)了若干 Amphion media driver。
給所有 patch 進(jìn)行過最多的 test 和 review 的人員是:
| Test and review credits in 5.18 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Daniel Wheeler 繼續(xù)提供了最多的 test 工作,他在許多 AMD 圖形驅(qū)動(dòng) patch 中都加上了自己的 Tested-by tag。值得注意的是,Wheeler 不定期地發(fā)布對已經(jīng)完成的測試的總結(jié)。Damien Le Moal 測試了許多 folio patch。Konrad Jankowski 在定期測試英特爾的網(wǎng)絡(luò)驅(qū)動(dòng) patch。
關(guān)于 review 這一列,Rob Herring 在經(jīng)常 review 那些 device-tree 的 patch。Christoph Hellwig 則 review 了許多 block 和文件系統(tǒng)子系統(tǒng)中的 patch–也 review 了一些 folio patch。Andy Shevchenko 則 review 了許多 driver patch,主要是在 I2C、GPIO 和 pin-control 子系統(tǒng)中。
過去我們這些數(shù)字經(jīng)常持懷疑態(tài)度,因?yàn)樗鼈儾]有完全捕捉到到社區(qū)中發(fā)生的所有 test 和 review 工作,而且很容易被人利用??隙ㄟ€有很多工作沒有反映出來,但是毫無疑問這些名單上的 test 人員和 review 人員肯定是不會錯(cuò)的。也許這反映了開發(fā)人員和他們的雇主(尤為重要)對這些活動(dòng)的價(jià)值有了更多的了解。
對于 bug report 方面的情況就留給讀者來判斷了:
Top bug-report credits for 5.18 kernel test robot 232 19.3% Zeal Robot 76 6.3% Syzbot 72 6.0% Abaci 62 5.2% Dan Carpenter 29 2.4% Hulk Robot 27 2.2% Stephen Rothwell 26 2.2% Igor Zhbanov 19 1.6% Randy Dunlap 12 1.0% Rob Herring 9 0.7%
如今,bug report 顯然是 robot 的工作了。但請注意,雖然有 2249 個(gè)(這是到目前為止的數(shù)字) 5.18 patch 被 backport 到 5.17 穩(wěn)定版的更新中了,但只有 1075 個(gè) patch 包含 Reported-by tag。這表明,有一半以上的 fix 并沒有使用這些 tag。也就是說可能有不少 bug report 都沒有記錄好該感謝誰報(bào)出了這個(gè)問題。
在這個(gè)開發(fā)周期中貢獻(xiàn)最積極的雇主是:
Most active 5.18 employers
By changesets Intel 1708 11.4% (Unknown) 1155 7.7% Red Hat 958 6.4% 886 5.9% (None) 818 5.5% AMD 781 5.2% Linaro 560 3.7% Huawei?Technologies 471 3.1% 446 3.0% NVIDIA 396 2.6% (Consultant) 363 2.4% SUSE 344 2.3% IBM 334 2.2% Oracle 325 2.2% Arm 294 2.0% Renesas Electronics 262 1.8% MediaTek 249 1.7% NXP Semiconductors 236 1.6% Canonical 227 1.5% Microchip?Technology 201 1.3%
By lines changed AMD 467642 39.9% Intel 107081 9.1% 103801 8.8% (Unknown) 49669 4.2% Linaro 29631 2.5% Red Hat 28807 2.5% (None) 27989 2.4% NXP Semiconductors 21418 1.8% NVIDIA 19203 1.6% MediaTek 18980 1.6% 16036 1.4% Andes Technology 15814 1.3% (Consultant) 14314 1.2% Huawei Technologies 13483 1.1% IBM 11960 1.0% Microchip?Technology 11853 1.0% Renesas Electronics 11427 1.0% SUSE 10128 0.9% Canonical 8984 0.8% Fungible 8791 0.7%
像往常一樣,這里沒有什么特別的意外驚喜。
Patch flow and signed tags
【圖太大,讀者自己去LWN 上看吧?https://lwn.net/Articles/895911/】
上邊這個(gè)難以辨認(rèn)的圖表展示了 patch 進(jìn)入 mainline 內(nèi)核的路徑。每個(gè)矩形框代表一個(gè) Git 倉庫,箭頭則展示了 patch 從一個(gè)倉庫到另一個(gè)倉庫的移動(dòng)過程。這張圖是由 gitdm 這一組 git 分析工具(可從 git://git.lwn.net/gitdm.git 獲得)中的 treeplot 來生成的,它可以展示代碼在維護(hù)者社區(qū)中移動(dòng)的總體情況。
這張圖仍然相對比較平坦;大多數(shù)維護(hù)者直接向 Linus Torvalds 推送他們的修改。然而,中間途徑的倉庫所的作用在穩(wěn)步增長,其中最大的那幾個(gè)中間庫分別是負(fù)責(zé)處理 networking、graphics、system-on-chip 和字符驅(qū)動(dòng)子系統(tǒng)的。該圖展示了我們當(dāng)前的系統(tǒng)是如何使內(nèi)核開發(fā)進(jìn)程擴(kuò)展到目前的規(guī)模的,而且很可能還會繼續(xù)超越當(dāng)前的規(guī)模。
每個(gè)箭頭的顏色表示了這個(gè)倉庫是否在被推送到下一級倉庫的 patch 上使用了 signed tag;紅線就表示沒有這種 tag。在 tag 上使用 GPG 簽名的話就可以讓收到請求的維護(hù)者來驗(yàn)證這個(gè) pull request 是真的由它代表的人來創(chuàng)建的。如果所有的 pull request 都包含 signed tag,那么攻擊者就很難欺騙維護(hù)者去從惡意的分支拉取數(shù)據(jù)了。
正如多年來在 LWN 記錄的那樣,普遍使用 signed tag 的進(jìn)展一直在緩慢推進(jìn)。但最近,Torvalds 變得更加堅(jiān)持了,明確要求那些頑固不化的維護(hù)者要加入到這個(gè)計(jì)劃中來。最終結(jié)果是在 5.18 版本中,只有 714 個(gè) patch 不是來自 signed tag 的,其中 565 個(gè)是由 Torvalds 直接合入的,根本沒有通過別的 Git 倉庫來到達(dá)。因此,在這個(gè)樹狀結(jié)構(gòu)的最頂層,轉(zhuǎn)換來使用 signed tag 的工作幾乎已經(jīng)完成了,僅僅是在開始采用這種做法 11 年后。不過,一些中層的維護(hù)者顯然仍未要求在 pull request 上使用 signed tag,所以這個(gè)過程中仍有一些漏洞。
Older bugs
許多應(yīng)用于 5.18 的 patch 都是用來修復(fù) bug 的,這些 bug 有多老?對這個(gè)問題有一個(gè)近似回答的方法,就是看看有多少出現(xiàn)在 stable update 中的 fix 是在 5.18 中才首次出現(xiàn)的。一個(gè) bug fix 肯定是不會 backport 到最早出現(xiàn)該 bug 的版本的。5.18 的情況如下:
| Release | Backports |
|---|---|
| 5.17 (Mar 2022) | 2,249 |
| 5.15 (Oct 2021) | 1,762 |
| 5.10 (Dec 2020) | 1,185 |
| 5.4 (Nov 2019) | 756 |
| 4.19 (Oct 2018) | 532 |
| 4.14 (Nov 2017) | 422 |
| 4.9 (Dec 2016) | 331 |
從上面可以看出,有 331 個(gè) fix(到目前為止)已經(jīng)從 5.18 一路移植到了 5 年多前發(fā)布的 4.9 內(nèi)核。換句話說,經(jīng)過五年多的密集 fix(4.9 的 stable update 已經(jīng)添加了將近 22000 個(gè) fix),我們?nèi)匀黄骄刻爝€在對 4.9 要修復(fù)差不多 5 個(gè) bug。我們也需要到內(nèi)核的生命終止之前才會修完所有 bug 吧。
總而言之,內(nèi)核開發(fā)仍然猶如一個(gè)高速運(yùn)轉(zhuǎn)的機(jī)器。其中有很多 bug 正在被修復(fù),毫無疑問,更多的 bug 正在被引入。最終我們得到的成果就是當(dāng)前咱們在使用的 kernel 了。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~
