关注了就能看到更多这么棒的文章哦~
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% 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% 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% 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% 787 5.9% Huawei Technologies 488 3.7% Mellanox 486 3.7% SUSE 486 3.7% 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,下图仅展示了其中一小部分:
完整图片在此: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深度文章以及开源社区的各种新近言论~