LWN:5.18 开发周期数据分析!
关注了就能看到更多这么棒的文章哦~
Statistics from the 5.18 development cycle
By Jonathan Corbet
May 23, 2022
DeepL assisted translation
https://lwn.net/Articles/895800/
5.18 版内核在经历了 9 周的开发周期后于 5 月 22 日发布。这说明又到了该看看这次 release 背后的一些统计数据的时候了,这是近期最繁忙的一次 release。请继续阅读来了解 5.18 内核中的代码都来自哪里,以及是如何进入 mainline 的。
在 5.18 开发周期中,有 2024 名开发者提交了 14954 个 non-merge changeset,其中 289 人是首次给内核提供代码贡献。这些数字都不是历史最高值,尽管开发者的数量已经很接近迄今为止的最高值了(5.13 版本时的 2062)。这个版本中内核增加了 756,00 行代码。
对 5.18 贡献最大的人是:
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 贡献最多 patch 的开发者。他的工作主要是对 device-tree 的更新。Matthew Wilcox 成功地合并了另一组 folio patch。Christoph Hellwig 继续对 block 和文件系统层进行大规模重构。Geert Uytterhoeven 为 Renesas 的 pin-control 代码进行了大量的改进,Ville Syrjälä 在英特尔 i915 图形驱动上做了大量工作。
在 "changed lines" 这一列中,Leo Li 仅用 5 个 patch 就为 AMD 图形驱动增加了超过 20 万行的寄存器定义,然后 Qingqing Zhuo 又添加了近 20 万行。Ian Rogers 对 perf 工具进行了一些改进,Alan Kao 贡献了一个删除 nds32 架构的 patch,Ming Qian 贡献了若干 Amphion media driver。
给所有 patch 进行过最多的 test 和 review 的人员是:
Test and review credits in 5.18 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Daniel Wheeler 继续提供了最多的 test 工作,他在许多 AMD 图形驱动 patch 中都加上了自己的 Tested-by tag。值得注意的是,Wheeler 不定期地发布对已经完成的测试的总结。Damien Le Moal 测试了许多 folio patch。Konrad Jankowski 在定期测试英特尔的网络驱动 patch。
关于 review 这一列,Rob Herring 在经常 review 那些 device-tree 的 patch。Christoph Hellwig 则 review 了许多 block 和文件系统子系统中的 patch–也 review 了一些 folio patch。Andy Shevchenko 则 review 了许多 driver patch,主要是在 I2C、GPIO 和 pin-control 子系统中。
过去我们这些数字经常持怀疑态度,因为它们并没有完全捕捉到到社区中发生的所有 test 和 review 工作,而且很容易被人利用。肯定还有很多工作没有反映出来,但是毫无疑问这些名单上的 test 人员和 review 人员肯定是不会错的。也许这反映了开发人员和他们的雇主(尤为重要)对这些活动的价值有了更多的了解。
对于 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 个(这是到目前为止的数字) 5.18 patch 被 backport 到 5.17 稳定版的更新中了,但只有 1075 个 patch 包含 Reported-by tag。这表明,有一半以上的 fix 并没有使用这些 tag。也就是说可能有不少 bug report 都没有记录好该感谢谁报出了这个问题。
在这个开发周期中贡献最积极的雇主是:
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/】
上边这个难以辨认的图表展示了 patch 进入 mainline 内核的路径。每个矩形框代表一个 Git 仓库,箭头则展示了 patch 从一个仓库到另一个仓库的移动过程。这张图是由 gitdm 这一组 git 分析工具(可从 git://git.lwn.net/gitdm.git 获得)中的 treeplot 来生成的,它可以展示代码在维护者社区中移动的总体情况。
这张图仍然相对比较平坦;大多数维护者直接向 Linus Torvalds 推送他们的修改。然而,中间途径的仓库所的作用在稳步增长,其中最大的那几个中间库分别是负责处理 networking、graphics、system-on-chip 和字符驱动子系统的。该图展示了我们当前的系统是如何使内核开发进程扩展到目前的规模的,而且很可能还会继续超越当前的规模。
每个箭头的颜色表示了这个仓库是否在被推送到下一级仓库的 patch 上使用了 signed tag;红线就表示没有这种 tag。在 tag 上使用 GPG 签名的话就可以让收到请求的维护者来验证这个 pull request 是真的由它代表的人来创建的。如果所有的 pull request 都包含 signed tag,那么攻击者就很难欺骗维护者去从恶意的分支拉取数据了。
正如多年来在 LWN 记录的那样,普遍使用 signed tag 的进展一直在缓慢推进。但最近,Torvalds 变得更加坚持了,明确要求那些顽固不化的维护者要加入到这个计划中来。最终结果是在 5.18 版本中,只有 714 个 patch 不是来自 signed tag 的,其中 565 个是由 Torvalds 直接合入的,根本没有通过别的 Git 仓库来到达。因此,在这个树状结构的最顶层,转换来使用 signed tag 的工作几乎已经完成了,仅仅是在开始采用这种做法 11 年后。不过,一些中层的维护者显然仍未要求在 pull request 上使用 signed tag,所以这个过程中仍有一些漏洞。
Older bugs
许多应用于 5.18 的 patch 都是用来修复 bug 的,这些 bug 有多老?对这个问题有一个近似回答的方法,就是看看有多少出现在 stable update 中的 fix 是在 5.18 中才首次出现的。一个 bug fix 肯定是不会 backport 到最早出现该 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 个 fix(到目前为止)已经从 5.18 一路移植到了 5 年多前发布的 4.9 内核。换句话说,经过五年多的密集 fix(4.9 的 stable update 已经添加了将近 22000 个 fix),我们仍然平均每天还在对 4.9 要修复差不多 5 个 bug。我们也需要到内核的生命终止之前才会修完所有 bug 吧。
总而言之,内核开发仍然犹如一个高速运转的机器。其中有很多 bug 正在被修复,毫无疑问,更多的 bug 正在被引入。最终我们得到的成果就是当前咱们在使用的 kernel 了。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~