LWN:5.7内核数据分析!

关注了就能看到更多这么棒的文章哦~

Development statistics for the 5.7 kernel

By Jonathan Corbet
June 2, 2020

原文来自:https://lwn.net/Articles/821813/

5.7 kernel于5月31日正式发布了。无论从什么角度来看,这都是一个很普通的开发周期,并没有受到当今世界上的纷扰所影响。我们继续来看看能从这次的代码改动中了解到什么信息,欢迎阅读LWN的传统栏目,来看看5.7里面有哪些patch作者、有谁在支持他们、以及这些patch是经过什么途径合入mainline的。

5.7版本中有13,901个patch(不算merge point),分别来自1,878位开发者。这两个指标已经比5.6开发周期要高了,说明这个周期更加繁忙。值得注意的是有281位出现在5.7开发者列表中的patch作者是首次为kernel贡献patch,这个数值是从5.0版本以来的最高的一次,尤其是跟5.6比起来对比很明显,因为5.6里面的首次贡献者人数是2013年以来的最低点。也许是因为被迫待在家中,反而鼓励了人们来整理、发出他们人生中的第一个正式kernel patch。在5.7开发周期中最活跃的开发者是:

Most active 5.7 developers
By changesets
Gustavo A. R. Silva 235 1.7%
Chris Wilson 231 1.7%
Geert Uytterhoeven 161 1.2%
Christoph Hellwig 138 1.0%
Sean Christopherson 137 1.0%
Takashi Iwai 132 0.9%
Mauro Carvalho Chehab 129 0.9%
Anson Huang 109 0.8%
Al Viro 108 0.8%
Andy Shevchenko 101 0.7%
Ville Syrjälä 98 0.7%
Kuninori Morimoto 96 0.7%
Jani Nikula 95 0.7%
Thomas Gleixner 91 0.7%
Colin Ian King 91 0.7%
Masahiro Yamada 90 0.6%
Lorenzo Bianconi 90 0.6%
Jakub Kicinski 86 0.6%
Ard Biesheuvel 85 0.6%
Josef Bacik 83 0.6%
By changed lines
Greg Kroah-Hartman 41035 6.4%
Alex Elder 14405 2.3%
Chris Packham 10886 1.7%
Mauro Carvalho Chehab 10355 1.6%
Chris Wilson 7931 1.2%
Jani Nikula 7719 1.2%
Marc Zyngier 7659 1.2%
Srujana Challa 7537 1.2%
Namjae Jeon 7269 1.1%
Manivannan Sadhasivam 6836 1.1%
Jyri Sarha 5622 0.9%
Linus Walleij 5056 0.8%
Christoph Hellwig 4957 0.8%
Laurent Pinchart 4781 0.7%
Taniya Das 4714 0.7%
Paul Blakey 4367 0.7%
Dmitry Bogdanov 4328 0.7%
Vladimir Oltean 4210 0.7%
Jerome Brunet 3973 0.6%
Maxime Jourdan 3921 0.6%

Gustavo A. R. Silva在按changeset数量排序中排名第一,主要是来自他在持续进行的一个改动(把kernel中各处structure中长度为0的数组替换成变长数组),这里有个典型例子(https://git.kernel.org/linus/8695e0b1b964  )。Chris Wilson则是专注于Intel i915显卡驱动。Geert Uytterhoeven则在许多驱动程序subsystem里面做贡献,Christoph Hellwig则对XFS, SCSI和block subsystem进行了许多改动,Sean Christopherson则在KVM hypervisor部分贡献了许多工作。

Greg Kroah-Hartman在“line changed”这一列登顶的时候,一般都是因为他删除了许多代码,这次也不例外。他把exFAT文件系统(后来加到了filesystem tree里)和wireless USB、UWB驱动从staging tree里面删除了。Alex Elder提供了高通公司的"IP accelerator"网卡驱动,Chris Packham则重新把Octeon USB和Ethernet driver加到了staging tree里,Mauro Carvalho Chehab则把无数的文档改成了RST格式。

5.7中的工作可以认出来的公司数量有215家。其中最活跃的是:

Most active 5.7 employers
By changesets
Intel 1682 12.1%
(Unknown) 1202 8.6%
Red Hat 986 7.1%
(None) 788 5.7%
SUSE 548 3.9%
Google 514 3.7%
Huawei Technologies 508 3.7%
Mellanox 492 3.5%
AMD 491 3.5%
Linaro 412 3.0%
(Consultant) 386 2.8%
NXP Semiconductors 374 2.7%
IBM 371 2.7%
Renesas Electronics 315 2.3%
Linux Foundation 310 2.2%
Arm 278 2.0%
Facebook 192 1.4%
Code Aurora Forum 181 1.3%
Oracle 176 1.3%
Texas Instruments 175 1.3%
By lines changed
Intel 69584 10.9%
Linux Foundation 45153 7.1%
Linaro 44649 7.0%
(Unknown) 40631 6.4%
Red Hat 33022 5.2%
(None) 20662 3.2%
Google 19940 3.1%
(Consultant) 19425 3.0%
Mellanox 19317 3.0%
SUSE 19127 3.0%
Huawei Technologies 18301 2.9%
Code Aurora Forum 17861 2.8%
Marvell 17833 2.8%
Texas Instruments 17314 2.7%
IBM 14973 2.3%
NXP Semiconductors 14223 2.2%
AMD 12787 2.0%
BayLibre 11445 1.8%
Samsung 11238 1.8%
Allied Telesis 11029 1.7%

这次的公司名单依然跟往常差不多。

How those changes get into the kernel

以前开发者是会直接发patch给Linus Torvalds来合入的,不过这已经是很久以前的事情了。目前几乎所有的patch都是经过一位或者几位subsystem maintainer之手的。所有的maintainer对于最终合入他管理的subsystem repository(仓库)的patch都会加上一个Signed-off-by tag。我们可以利用这个信息来分析patch进入mainline的路径了。同时还可以利用这个信息来分析哪些人在管理这些patch。patch中附带的Signed-off-by tag如果不是patch作者的话,那基本上就意味着这位就是subsystem maintainer了,所以看看这些tag就能看出maintainer是哪位。

5.7版本中最繁忙的maintainer(根据那些不是patch作者的Signed-off-by tag来看)和贡献最多maintainer工作的公司分别是:

Non-author signoffs in 5.7
Developers
David S. Miller 1531 11.6%
Greg Kroah-Hartman 811 6.1%
Mark Brown 538 4.1%
Alex Deucher 429 3.2%
Andrew Morton 401 3.0%
Martin K. Petersen 278 2.1%
Jens Axboe 250 1.9%
Mauro Carvalho Chehab 236 1.8%
Paolo Bonzini 235 1.8%
Shawn Guo 213 1.6%
David Sterba 196 1.5%
Herbert Xu 170 1.3%
Michael Ellerman 169 1.3%
Alexei Starovoitov 168 1.3%
Saeed Mahameed 158 1.2%
Vinod Koul 158 1.2%
Hans Verkuil 157 1.2%
Ingo Molnar 146 1.1%
Jason Gunthorpe 145 1.1%
Thomas Gleixner 143 1.1%
Employers
Red Hat 2560 19.3%
Linaro 1377 10.4%
Intel 986 7.4%
Linux Foundation 878 6.6%
Google 787 5.9%
Huawei Technologies 488 3.7%
Mellanox 486 3.7%
SUSE 486 3.7%
Facebook 465 3.5%
AMD 463 3.5%
(None) 440 3.3%
Oracle 411 3.1%
IBM 347 2.6%
Texas Instruments 231 1.7%
Arm 231 1.7%
Code Aurora Forum 213 1.6%
(Unknown) 200 1.5%
Qualcomm 159 1.2%
(Consultant) 158 1.2%
Cisco 158 1.2%

看到有超过200个公司在支持Linux kernel,不过合入kernel的patch中超过半数的都是经过分属于5个公司的maintainer之手来合入的。

在patch合入subsystem git仓库之后,Signed-off-by tag就不会再增加了。不过仔细分析一下的话,我们还是能看到它是如何随着一个git中的某个branch合入到另一个git或branch上去的。这样我们就可以生成一个路径图了,来展示patch最终进入mainline的路径。最终结果是一个很复杂的graph,下图仅展示了其中一小部分:

LWN:5.7内核数据分析!

完整图片在此:https://static.lwn.net/images/2020/5.7-treeplot.svg,查看的时候请带着仰慕的眼光。

图中给人的其中一个印象是这个graph本身层级并不深,还是很扁平化的。有一些较大的subsystem会有几层maintainer,而许多git tree是直接合入mainline的。

开发者虽然不再直接发patch给Torvalds了,但是subsystem maintainer仍然还是这样的工作流程。

图中还可以看到:maintainer需要对自己的tag进行数字加密签名,之后才推送到upstream,这样收件人就能知道这个合入请求确实来自正确的发送方。最近Torvalds要求一位maintainer开始使用signed tags,他说:“包括kernel.org也一样,我一直在鼓励人们做这个签名动作,近来越来越多的人可以遵循这个规范了”。既然这样,我们就想知道到底有多少比例的人做到了。

对于那些没有使用signed tag的git tree,我们在图中用红色标记出来了。可以看到还是有不少的。在5.7开发周期中Torvalds会直接pull的121个git tree中,有101个使用了signed tags,20个没有用,也就是覆盖率是83%。不过这仅仅是查看了Torvalds直接会pull的git tree。如果完整地看的话,总共有214个subsystem tree,其中167个使用了signed tags,占总数的78%。所以覆盖率还是可以说是“fairly high”的,不过还不能算是大家统一采用的方式。

不过,跟kernel代码本身一样,kernel development process一直在演进,永远不会有“开发流程已经完美了”的那一天。在演进的同时,这个流程也还在不断地合并大量patch以及发布全世界都在等待的新kernel版本。大多数时候我们并不需要追求完美。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

LWN:5.7内核数据分析!