LWN:再次审视stable-kernel里面的质量回退问题!

本文分析了稳定内核更新中的回归问题,通过检查带有Fixes标签的补丁,评估了不同内核版本的回归率,并讨论了如何提高稳定内核的质量。

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

Revisiting stable-kernel regressions

By Jonathan Corbet
February 13, 2020

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

stable-kernel的更新通常都是非常可靠的。所以针对stable-kernel的patch的诸多规则中第一条就是“明显正确并且验证通过”。尽管有这样严格的要求,其实在stable kernel的发布过程中,社区里一直有声音在抱怨许多release里面还是引入了一些regression(质量回退,指新引入了bug)。在2016年的时候,LWN就做过分析,介绍了stable release里面存在的regression,不过也指出发生率对大多数人看来其实已经非常低了。在那之后,stable release中合入的patch数量越来越多,现在应该再看看目前的stable kernel中regression的发生率了。

这里举个例子来让大家了解一下stable kernel update会包含多少patch。在4.9.213的时候,比起最早的4.9 release,已经增加了15,648个patch。这个数量已经可以比得上一个新的kernel版本的开发周期的patch数量了。我们无法仔细审查每一个patch来判断它会不会导致regression,哪怕stable update的maintainer也无法说得清。不过有个方法可以自动找出来大多数这种regression patch。

kernel社区一直有个惯例,就是在fix了一个bug的patch中,会加上一个Fixes tag,来指向此前引入bug的那个patch。这个Fixes tag里面会包含此前引入问题的那个patch的commit ID。因为stable kernel release按理来说只应该合入bug fix patch的,大家可能以为几乎所有的patch都带有Fixes tag。不过实际上只有40-60%的commit有Fixes tag,不过这个比例近来还是在逐渐上升的,得益于规则越来越规范了。

所以,可以直接用计算机来查找所有Fixes tag,提取出commit ID来找到引入bug的patch,然后确认一下它们是否也是在stable update过程中合入的,如果是的话,基本可以说原patch有问题,导致了regression,需要后续的bug fix。当然,这里也会有一些细节需要注意,例如stable-kernel里面的commit同合入mainlin(所有的fix都应该是首先合入mainline的)的相同commit,它们的ID并不相同,因此需要能够把两个分支上的commit对应起来,才能确认fix的是哪个commit。还有一些直接revert的patch,一般不会带有Fixes tag,所以这种需要单独搜索出来。还有一些诸如此类的细节要注意。最终的结果里面应该也是有一些噪声没有处理干净的,不过足够作为示意,帮我们了解情况了。

大家可能感兴趣是用什么工具来做的分析,其实是用的专门分析git仓库数据的gitdm工具集里的stablefixes。可以从这里获取git://git.lwn.net/gitdm.git。

在2016年的时候,我们得到的regression rate,在longer-term stable kernel里面是2%左右。而4.4系列kernel当时有1,712 commit,已经有2.3%的regression rate了。在那次分析之后,commit的数量增加了许多,在4.4.213里面已经有14,211个commit了,这些主要得益于更好的开发规范以及更多利用了自动化工具(包括一些机器学习的系统)来发现并一直那些原作者没有想到要发给stable kernel的bug fix patch。我们现在改善了一下脚本,移植到Python 3,然后对当前还在支持的stable kernel运行了一次分析,结果如下:

SeriesCommitsTagsFixesReverts
5.4.182,4231,48261%7429
4.19.10211,7585,64748%588100
4.14.17015,5276,72743%985134
4.9.21315,6476,28640%951139
4.4.21314,2105,11036%834124

在上述表格中,Series指的是用来分析的stable kernel版本。Commits值得是这个Series里面的commit数量,而Tags就是包含有Fixes tag的commit的数量和占比。Fixes这一列的数字就是那些修正了本次stable release里面新增patch引入的问题的patch数量。Reverts是指那些直接revert掉的patch。有位著名人士说过,revert就是对一个patch提出批评的最真诚的方式。(注:可以参看LWN原文页面表格查看commit细节)。

从这些数字中我们可以看出一些信息,例如,5.4.18中有3%的commit都是在修复其他commit引入的问题,所以有问题的commit比例至少有3%,这里的情况其实不是这么简单的。比如,其实有许多的fix patch是跟引入问题的commit在同一个stable版本里面合入的。也就是说,尽管最初的commit引起了regression,但是其实没有哪个stable release版本是带着这个错误代码的,也就不会有谁真的收到这个bug的影响。所以把这些也算作regression的话,对stable kernel的质量评价来说并不公平。如果去掉这些在同一个release里面合入的fix,结果是下面这样:

SeriesFixesSame
release
Visible
regressions
5.4.18742945
4.19.102588176412
4.14.170985253732
4.9.213951229722
4.4.213834232602

还有一个因素需要考虑,就是那些没有Fixes tag的commit该怎么算。其中许多其实都是在fix那些之前的patch所引入的bug,不过人们没有去追溯那个bug是怎么出现的。如果上面的表格中的数据被当做一个stable series里面的regression总数的话,那其实就是把这一类没有标记Fixes tag的commit都算作与regression无关了,这样肯定会导致低估了总体的regression fix的数量。换个角度,如果把这些都当做是regression fix,那又会大大高估了regression fix的数量。

所以,最好的方式也许是两种情况都看看,我们基本上可以肯定真正的regression rate应该在两者之间。

SeriesVisible
regressions
Regression rate
LowHigh
5.4.18451.9%3.0%
4.19.1024123.5%7.3%
4.14.1707324.7%10.9%
4.9.2137224.6%11.5%
4.4.2136024.2%11.8%

所以上面这就是我们能拿到的最解决的范围了。不过这里还有一些很少见的情况。比如mainline commit 4abb951b73ff("ACPICA: AML interpreter: add region addresses in global list during initialization")包含了一个“cc: stable@vger.kernel.org”的tag,所以它在4.19.2 release里面被包含了进来(相应的commit ID是22083c028d0b)。不过后来在4.19.3里面被revert掉了,因为人们抱怨它没有fix什么真正的问题,反而导致了regression。可是在4.19.6的时候它又被人们的要求下加了回来。在4.19.35里看的话还会看到2个commit:commit d4b4aeea5506解决了一个相关的问题,而在Fixes tag里面指出了upstream分支里的commit,而commit f8053df634d4则声称自己是原来那个upstream的commit,其实早就被打上来了。最后一个看起来像是修复了某个没有做完整的backport。这一系列改动我们该怎么来统计到上面的表格中呢?反正我们是放弃了。

从上面的数据中我们得到了什么结论呢?2016年的时候的regression rate看起来比起现在的要低一点,这意味着stable tree上patch数量的增长不仅是增加了regression的个数,也同时增加了regression rate。这不是一个好的迹象。另一方面来说,人们对stable kernel的regression的抱怨的声音似乎现在越来越少了。也许这是因为人们已经习惯了。或者,也许是那些最坏情况的regression不在出现了,例如文件系统被毁坏这一类,也就是说漏过来的这些bug一般都是比较小的问题。

新的kernel比起更早期的kernel来说会有更低的regression rate。这可以得到两方面的解释。一方面是选择patch来移植到stable kernel的流程越来越完善了,所以引入的regression越来越少。另一方面,也许是这些kernel出现的时间还不长,所以没有完全找出那些regression patch。2016年的文章中查看的4.4.14,当时有39个regression fix(其中19个都是在发布之前就及时fix了)。而现在的4.4.213则找出了110个regression issue,都是在4.4.14之前引入的问题(同样是19个在发布之前被fix)。所以,我们可以肯定5.4.18里的regression数量肯定要比我们上面列出的数字要高。无论如何,看起来短时间内我们都会继续现有的策略,把尽量多的fix都加到stable tree上。这也许是一件好事,如果stable tree有几千个fix但是其中有若干个regression,那它比起一个没有带上这些patch的kernel肯定更加稳定。尽管如此,我们还是需要多注意regression rate。如果regression rate变得太高了,那么就会导致用户越来越不愿用stable update,这肯定不是我们希望看到的情况。

全文完

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

大家顺便来投个票展现一下民意吧:

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

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

内容概要:本文围绕发光太阳聚光器开展蒙特卡洛光线追踪研究,重点利用Matlab编程实现光线在聚光系统中的传播路径模拟。通过蒙特卡洛方法对大量随机光线进行统计追踪,精确分析光能在接收面上的分布特性、聚焦效率及系统整体光学性能,进而评估不同几何结构与材料参数对聚光效果的影响,为高效太阳能收集系统的设计与优化提供理论依据和技术支持。研究不仅涵盖核心算法实现,还结合多个跨领域科研案例(如电力系统、路径规划、信号处理、机器学习等),展示了Matlab/Simulink在科研建模与仿真中的广泛应用价值,突出了算法仿真与多学科交叉融合的重要性。; 适合人群:具备一定Matlab编程基础,从事光学工程、新能源技术、仿真建模及相关领域研究的科研人员,尤其适合研究生及青年研究人员。; 使用场景及目标:①掌握蒙特卡洛方法在光学系统仿真中的原理与应用;②学习使用Matlab实现光线发射、反射、折射及能量统计的完整追踪流程;③通过实际代码实践优化聚光器结构设计;④借鉴文中多领域仿真案例,拓展科研视野与技术迁移能力; 阅读建议:此资源以代码实现为核心,建议读者结合Matlab环境动手运行与调试程序,重点关注光线追踪的物理建模与数值计算细节,并参照其他仿真范例举一反三,全面提升科研建模与算法实现能力。
内容概要:本文复现并深入探讨了一种基于价格弹性矩阵的居民峰谷分时电价激励策略,属于电力系统需求响应领域的关键技术研究。研究通过构建价格弹性矩阵精确刻画居民用户对不同时段电价变化的用电行为响应特性,结合优化算法设计科学合理的峰谷分时电价方案,有效引导用户在高峰时段减少用电、低谷时段增加用电,实现削峰填谷,提升电网运行稳定性与能源利用效率。文中配套提供了完整的Matlab代码实现,涵盖数据处理、模型构建、优化求解及结果可视化等模块,具有较强的可复现性与工程应用价值,适用于需求侧管理政策仿真与学术研究。; 适合人群:面向具备一定电力系统基础知识、能源经济学或需求响应研究背景的科研人员,以及从事相关课题的硕士、博士研究生;熟悉Matlab编程且关注智能电网优化的技术人员亦可从中获益。; 使用场景及目标:①用于居民侧用电行为建模与电价敏感性分析;②支撑峰谷电价政策的设计、仿真评估与优化调整;③作为高校教学中需求响应机制的算法实现案例与科研入门实践项目。; 阅读建议:建议读者结合Matlab代码逐模块解析其实现逻辑,重点掌握价格弹性矩阵的构造方法、目标函数与约束条件的数学建模过程,以及优化求解器的调用方式,同时可尝试引入其他智能优化算法进行对比实验,以深化对电价激励机制设计原理的理解与创新能力。
内容概要:本文详细介绍了基于Matlab实现的无人机FMCW(调频连续波)毫米波高度计雷达仿真技术,系统阐述了雷达测高系统的工作原理、信号建模方法及完整的信号处理流程。通过构建发射信号与地面回波信号模型,依次完成混频、低通滤波、傅里叶变换(FFT)等关键处理步骤,提取差拍频率以精确计算无人机飞行高度,并对测高精度、分辨率及系统参数影响进行仿真分析与验证。该仿真平台不仅有助于深入理解毫米波雷达在复杂环境下的工作特性,也为无人机地形跟随、精准着陆、低空避障等应用场景提供了可靠的技术支撑和算法验证手段。; 适合人群:具备雷达原理、信号与系统、数字信号处理等相关基础知识,从事无人机导航、毫米波雷达开发、自动驾驶传感系统或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入掌握FMCW雷达测距测高的物理机制与数学建模方法;②熟练运用Matlab进行雷达信号仿真与算法实现,提升实际编程与系统调试能力;③为后续开展真实雷达系统开发、测高算法优化或融合其他传感器(如IMU、GPS)的组合导航研究提供理论依据与仿真基础。; 阅读建议:建议结合经典雷达原理教材同步学习,重点理解chirp信号设计、混频后差拍信号特征以及FFT在频率提取中的作用,通过调整带宽、扫频周期、采样率等参数进行仿真实验,观察其对测高性能的影响,从而深化对系统设计关键指标的综合把握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值