LWN: 5.12 開發(fā)周期的統(tǒng)計數(shù)據(jù)!
關(guān)注了就能看到更多這么棒的文章哦~
Some 5.12 development statistics
By Jonathan Corbet
April 26, 2021
DeepL assisted translation
https://lwn.net/Articles/853039/
5.12 kernel 最終發(fā)布之時,這個開發(fā)周期中已經(jīng)有 13,015 個 non-merge changeset 被合入 mainline 了。這導(dǎo)致 5.12 是 5.6(2020 年 3 月底發(fā)布)以來最慢的一個開發(fā)周期。在 5.12 中仍然有大量開發(fā)工作得以完成。請繼續(xù)閱讀 LWN 傳統(tǒng)的分析內(nèi)容來了解這些工作都是來自哪里,以及如何進入 kernel。
5.12 中有 1.873 位開發(fā)者貢獻了 patch,其中 262 位是首次貢獻者。這些數(shù)字都在正常水平,尤其是考慮到這次開發(fā)周期中的內(nèi)容偏少。最活躍的 5.12 開發(fā)者們是:
| Most active 5.12 developers | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
與 5.11 周期類似,Lee Jones 貢獻了最多的 changeset,因為他仍在繼續(xù)對編譯時以及 docs-build 的 warning 進行 fix。Chris Wilson 在開發(fā)的是 Intel i915 graphics driver。Pavel Begunkov 則主要在 io_uring 子系統(tǒng)里工作,Vladimir Oltean 對 network 子系統(tǒng)進行了許多改進,Christoph Hellwig 主要繼續(xù)在清理 block layer 以及 filesystem 里的代碼。
Arnd Bergmann 刪除了若干已經(jīng)廢棄的體系架構(gòu),以及它們特有的驅(qū)動程序,因此憑借刪除掉的代碼行數(shù)得以在"lines changed"這一列登頂。Po-Hao Huang 貢獻了 8 個 patch,主要都是在更新一些機器生成的 table。Viresh Kumar 刪除了已經(jīng)不再使用的 "oprofile" 這個 profiling 機制,Maximilian Luz 增加了對 Microsoft Surface 設(shè)備的支持,Andy SHevchenko 刪除了一些不再需要的 Intel 驅(qū)動代碼。
Report, test, and review credits
kernel 社區(qū)除了代碼以外,還需要很多其他的貢獻。包括需要人們報出問題,也需要人們進行測試以及 review 代碼。因此內(nèi)核開發(fā)者們也通過在相關(guān)的 patch 上加上 tag 來對這些貢獻者表示認(rèn)可。在 5.12 中修復(fù)的 bug 的報告者之中,最活躍的是:
| Most active 5.12 bug reporters | ||
|---|---|---|
| kernel test robot | 184 | 16.1% |
| Syzbot | 111 | 9.7% |
| Abaci Robot | 107 | 9.4% |
| Dan Carpenter | 44 | 3.9% |
| Hulk Robot | 41 | 3.6% |
| Stephen Rothwell | 28 | 2.5% |
| Randy Dunlap | 19 | 1.7% |
| Kent Overstreet | 12 | 1.1% |
| Guenter Roeck | 11 | 1.0% |
| TOTE Robot | 11 | 1.0% |
| Colin Ian King | 9 | 0.8% |
| Andrii Nakryiko | 8 | 0.7% |
| Juan Vazquez | 7 | 0.6% |
| Arnd Bergmann | 6 | 0.5% |
這里我們看到自動測試系統(tǒng)的貢獻不斷提升,我們也希望這些系統(tǒng)能在有 bug 影響到最終用戶之前就先報告出來。
這一輪中的最活躍的 tester 和 reviewer 人員是:
| Test and review credits in 5.12 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tested-by 這一列中最上面的幾位,看起來基本上都是在對他們的同僚提供的 patch 進行驗證,這種情況可能更多的時候是不會打上 tag 的。Matt Merhar,Nicolas Chauvet,Peter Geis 驗證的 patch 數(shù)量都差不多,這并不是一個巧合。實際上他們?nèi)唤?jīng)常是在測試來自同一位作者的同一批 patch。而 Reviewed-by 這一列情況則更加分散,其中主要是那些活躍的維護者,以及其他一些經(jīng)常投入時間來 review patch 的開發(fā)者。
Employer support
5.12 的開發(fā)工作中我們能識別出來的有 211 個公司和組織,比起上一版本來說略有下降,但是這也跟 5.12 版本中相對偏少的 patch 數(shù)量是吻合的。這一次最活躍的公司是:
| Most active 5.12 employers | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
不出意料,這些數(shù)字跟 5.11 的時候差不多,也跟之前很多時候的差不多。最大的變化是 Linaro 這次大刀闊斧的刪除代碼,因此得以登頂“l(fā)ines changed” 這一列。
The path into the mainline
雖然 Linus Torvalds 最終負(fù)責(zé)把這里提到的所有 patch 都合入 mainline,不過他直接處理的 patch 其實很少,目前所有 patch 基本上都是經(jīng)過至少一個子系統(tǒng)的維護者的 git 倉庫的。根據(jù) patch 合入 mainline 的路徑,可以生成一個能反映我們社區(qū)是如何一起工作的示意圖。不知道這張圖跟我們經(jīng)常描述 kernel 社區(qū)的層級結(jié)構(gòu)圖在多大程度上是吻合的?
每一封電子郵件在發(fā)送者和接收者之間傳遞的時候通常都需要經(jīng)過若干個服務(wù)器,每個服務(wù)器都可能添加一個"Recived" 郵件頭來標(biāo)記一下。而 Git commit 則不會記錄它經(jīng)過了哪些 Git 倉庫。不過,在一批 commit 從一個倉庫合入另一個 git 倉庫的時候,會產(chǎn)生一個 merge commit,至少絕大多數(shù)時候都會生成。有些項目可能會對 merge commit 非常反感,因此要求利用 rebasing 和 fast-foward merge 來避免生成任何 merge commit。而 kernel 并不禁止 merge commit,于是絕大多數(shù) pull 操作都會產(chǎn)生一個 merge commit。
Git 在創(chuàng)建這個 commit 的時候,會在 changelog 消息的開頭位置記錄一下是從哪個 git tree 合入過來的。假設(shè) maintainer 保留了這個信息的話,這樣就可以利用這個信息來分析這些 commit 都是從哪里來的了。很幸運,幾乎所有 kernel maintainer 都會保留這部分信息。
這個 merge commit 還包含了用來對這組 commit 中頭部的 commit 的 tag 進行簽名的 GPG key。這也是一個有用的信息。理論上來說,所有的 pull request 都應(yīng)該包含一個簽名的 tag,從而確保相關(guān)的將要合入 mainline 的 commit 都是由可以識別出來的 kernel maintaner 來標(biāo)記的 commit。實際上并不是所有的 maintainer 都會對他們的 commit 進行這樣的簽名操作。Torvalds 也沒有強行要求從 kernel.org 上的各個 git 倉庫中發(fā)起的 pull request 都要帶有簽名,不過對于來自其他地方存放的 git 倉庫的 pull 請求通常都是要求有簽名的。
treeplot 程序來自 gitdm 這組拼湊起來的數(shù)據(jù)分析工具,它可以搜集這些信息并生成圖示。最終結(jié)果也提供在本文中了。這里的矩形代表了一個個 Git 倉庫,箭頭表示了 commit 的流向。每個箭頭旁邊的數(shù)字表示有多少個 commit 是經(jīng)過這里來合入 5.12 的 kernel 的。黑色表示使用了簽名過的 tag,紅色表示沒有簽名。
這個圖示的形狀每一年都會發(fā)生一些變化,目前來說仍然有非常多的倉庫直接由 Torvalds 合入 mainline,仍然是非常扁平化的結(jié)構(gòu),不過我們也開始看到經(jīng)過中間層的 maintainer 的 commit 的數(shù)量也在增長。有些較大的子系統(tǒng),比如 networking, graphics, Arm system 等,都是有多層的 maintainer 來提供 patch 的。流入 mainline 的 patch 中最多的一條路還是經(jīng)過 networking 倉庫的,在 5.12 中,這里有超過 2,400 個 commit 進入了 mainline。
并且 networking 的這些倉庫也產(chǎn)生了數(shù)量最多的未對 tag 進行簽名保護的 commit。這個情況也已經(jīng)保持多年了。不過,在 126 個對 5.12 有貢獻的 Git 倉庫中,只有 15 個沒有使用 signed tag 了,情況比起過去幾年已經(jīng)好了很多。不過,比較有意思的是這些未用簽名驗證技術(shù)的倉庫中,有一個恰恰正是 crypto 倉庫。
Torvalds 要求來自 GitHub 等其他 site 的 pull 都要提供 signed tag,不過可以看到其他一些 maintainer 并未這么做。因此,有一些來自公共網(wǎng)站的未被簽名的 pull request 仍然合入了 mainline kernel,就是來自這些中間 maintainer。
不過,從這個最終生成的圖片看來,我們的社區(qū)盡管有許多困難,但是仍然將大量的改動采用了可靠的、可預(yù)期的方式合入進來。其他項目很少有既能保持我們 kernel 社區(qū)類似的規(guī)模,同時還能提供穩(wěn)定可用的產(chǎn)出的。在撰寫本文的時候,已經(jīng)有 13,677 個 changeset 加入了 linux-nest,其中絕大多數(shù)都會進入 5.13,因此這個流程看起來并不會放緩。

更新:在本文初次公開之后,根據(jù) Leon Romanovsky 的提醒,對公司相關(guān)的貢獻數(shù)量有修改。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~
