1*f8a291b7SWu XiangCheng.. SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0) 2*f8a291b7SWu XiangCheng.. 【重分发信息参见本文件结尾】 3*f8a291b7SWu XiangCheng 4*f8a291b7SWu XiangCheng.. include:: ../disclaimer-zh_CN.rst 5*f8a291b7SWu XiangCheng 6*f8a291b7SWu XiangCheng:Original: Documentation/admin-guide/reporting-regressions.rst 7*f8a291b7SWu XiangCheng 8*f8a291b7SWu XiangCheng:译者: 9*f8a291b7SWu XiangCheng 10*f8a291b7SWu XiangCheng 吴想成 Wu XiangCheng <bobwxc@email.cn> 11*f8a291b7SWu XiangCheng 12*f8a291b7SWu XiangCheng 13*f8a291b7SWu XiangCheng============ 14*f8a291b7SWu XiangCheng报告回归问题 15*f8a291b7SWu XiangCheng============ 16*f8a291b7SWu XiangCheng 17*f8a291b7SWu XiangCheng“*我们拒绝出现回归*”是Linux内核开发的首要规则;Linux的发起者和领军开发者Linus 18*f8a291b7SWu XiangChengTorvalds立下了此规则并确保它被落实。 19*f8a291b7SWu XiangCheng 20*f8a291b7SWu XiangCheng本文档描述了这条规则对用户的意义,以及Linux内核开发模型如何确保解决所有被报告 21*f8a291b7SWu XiangCheng的回归;关于内核开发者如何处理的方面参见 Documentation/process/handling-regressions.rst 。 22*f8a291b7SWu XiangCheng 23*f8a291b7SWu XiangCheng 24*f8a291b7SWu XiangCheng本文重点(亦即“太长不看”) 25*f8a291b7SWu XiangCheng========================== 26*f8a291b7SWu XiangCheng 27*f8a291b7SWu XiangCheng#. 如果某程序在原先的Linux内核上运行良好,但在较新版本上效果更差、或者根本不 28*f8a291b7SWu XiangCheng 能用,那么你就碰见回归问题了。注意,新内核需要使用类似配置编译;更多相关细 29*f8a291b7SWu XiangCheng 节参见下方。 30*f8a291b7SWu XiangCheng 31*f8a291b7SWu XiangCheng#. 按照 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 中 32*f8a291b7SWu XiangCheng 所说的报告你的问题,该文档已经包含了所有关于回归的重要方面,为了方便起见也 33*f8a291b7SWu XiangCheng 复制到了下面。两个重点:在报告主题中使用“[REGRESSION]”开头并抄送或转发到 34*f8a291b7SWu XiangCheng `回归邮件列表 <https://lore.kernel.org/regressions/>`_ 35*f8a291b7SWu XiangCheng (regressions@lists.linux.dev)。 36*f8a291b7SWu XiangCheng 37*f8a291b7SWu XiangCheng#. 可选但是建议:在发送或转发报告时,指明该回归发生的起点,以便Linux内核回归 38*f8a291b7SWu XiangCheng 追踪机器人“regzbot”可以追踪此问题:: 39*f8a291b7SWu XiangCheng 40*f8a291b7SWu XiangCheng #regzbot introduced v5.13..v5.14-rc1 41*f8a291b7SWu XiangCheng 42*f8a291b7SWu XiangCheng 43*f8a291b7SWu XiangCheng与用户相关的所有Linux内核回归细节 44*f8a291b7SWu XiangCheng================================= 45*f8a291b7SWu XiangCheng 46*f8a291b7SWu XiangCheng 47*f8a291b7SWu XiangCheng基本重点 48*f8a291b7SWu XiangCheng-------- 49*f8a291b7SWu XiangCheng 50*f8a291b7SWu XiangCheng 51*f8a291b7SWu XiangCheng什么是“回归”以及什么是“无回归规则”? 52*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 53*f8a291b7SWu XiangCheng 54*f8a291b7SWu XiangCheng如果某程序/实例在原先的Linux内核上运行良好,但在较新版本上效果更差、或者根本 55*f8a291b7SWu XiangCheng不能用,那么你就碰见回归问题了。“无回归规则”不允许出现这种情况。如果偶然发 56*f8a291b7SWu XiangCheng生了,导致问题的开发者应当迅速修复问题。 57*f8a291b7SWu XiangCheng 58*f8a291b7SWu XiangCheng也就是说,若Linux 5.13中的WiFi驱动程序运行良好,但是在5.14版本上却不能用、速 59*f8a291b7SWu XiangCheng度明显变慢或出现错误,那就出现了回归。如果某正常工作的应用程序突然在新内核上 60*f8a291b7SWu XiangCheng出现不稳定,这也是回归;这些问题可能是由于procfs、sysfs或Linux提供给用户空间 61*f8a291b7SWu XiangCheng软件的许多其他接口之一的变化。但请记住,前述例子中的5.14需要使用类似于5.13的 62*f8a291b7SWu XiangCheng配置构建。这可以用 ``make olddefconfig`` 实现,详细解释见下。 63*f8a291b7SWu XiangCheng 64*f8a291b7SWu XiangCheng注意本节第一句话中的“实例”:即使开发者需要遵循“无回归”规则,但仍可自由地改 65*f8a291b7SWu XiangCheng变内核的任何方面,甚至是导出到用户空间的API或ABI,只要别破坏现有的应用程序或 66*f8a291b7SWu XiangCheng用例。 67*f8a291b7SWu XiangCheng 68*f8a291b7SWu XiangCheng还需注意,“无回归”规则只限制内核提供给用户空间的接口。它不适用于内核内部接 69*f8a291b7SWu XiangCheng口,比如一些外部开发的驱动程序用来插入钩子到内核的模块API。 70*f8a291b7SWu XiangCheng 71*f8a291b7SWu XiangCheng如何报告回归? 72*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~ 73*f8a291b7SWu XiangCheng 74*f8a291b7SWu XiangCheng只需按照 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 中 75*f8a291b7SWu XiangCheng所说的报告你的问题,该文档已经包含了要点。下面几点概述了一下只在回归中重要的 76*f8a291b7SWu XiangCheng方面: 77*f8a291b7SWu XiangCheng 78*f8a291b7SWu XiangCheng * 在检查可加入讨论的现有报告时,别忘了搜索 `Linux回归邮件列表 79*f8a291b7SWu XiangCheng <https://lore.kernel.org/regressions/>`_ 和 `regzbot网页界面 80*f8a291b7SWu XiangCheng <https://linux-regtracking.leemhuis.info/regzbot/>`_ 。 81*f8a291b7SWu XiangCheng 82*f8a291b7SWu XiangCheng * 在报告主题的开头加上“[REGRESSION]”。 83*f8a291b7SWu XiangCheng 84*f8a291b7SWu XiangCheng * 在你的报告中明确最后一个正常工作的内核版本和首个出问题的版本。如若可能, 85*f8a291b7SWu XiangCheng 用二分法尝试找出导致回归的变更,更多细节见下。 86*f8a291b7SWu XiangCheng 87*f8a291b7SWu XiangCheng * 记得把报告发到Linux回归邮件列表(regressions@lists.linux.dev)。 88*f8a291b7SWu XiangCheng 89*f8a291b7SWu XiangCheng * 如果通过邮件报告回归,请抄送回归列表。 90*f8a291b7SWu XiangCheng 91*f8a291b7SWu XiangCheng * 如果你使用某些缺陷追踪器报告回归,请通过邮件转发已提交的报告到回归列表, 92*f8a291b7SWu XiangCheng 并抄送维护者以及出问题的相关子系统的邮件列表。 93*f8a291b7SWu XiangCheng 94*f8a291b7SWu XiangCheng 如果是稳定版或长期支持版系列(如v5.15.3…v5.15.5)的回归,请记得抄送 95*f8a291b7SWu XiangCheng `Linux稳定版邮件列表 <https://lore.kernel.org/stable/>`_ (stable@vger.kernel.org)。 96*f8a291b7SWu XiangCheng 97*f8a291b7SWu XiangCheng 如果你成功地执行了二分,请抄送肇事提交的信息中所有签了“Signed-off-by:”的人。 98*f8a291b7SWu XiangCheng 99*f8a291b7SWu XiangCheng在抄送你的报告到列表时,也请记得通知前述的Linux内核回归追踪机器人。只需在邮件 100*f8a291b7SWu XiangCheng中包含如下片段:: 101*f8a291b7SWu XiangCheng 102*f8a291b7SWu XiangCheng #regzbot introduced: v5.13..v5.14-rc1 103*f8a291b7SWu XiangCheng 104*f8a291b7SWu XiangChengRegzbot会就将你的邮件视为在某个特定版本区间的回归报告。上例中即linux v5.13仍 105*f8a291b7SWu XiangCheng然正常,而Linux 5.14-rc1是首个您遇到问题的版本。如果你执行了二分以查找导致回 106*f8a291b7SWu XiangCheng归的提交,请使用指定肇事提交的id代替:: 107*f8a291b7SWu XiangCheng 108*f8a291b7SWu XiangCheng #regzbot introduced: 1f2e3d4c5d 109*f8a291b7SWu XiangCheng 110*f8a291b7SWu XiangCheng添加这样的“regzbot命令”对你是有好处的,它会确保报告不会被忽略。如果你省略了 111*f8a291b7SWu XiangCheng它,Linux内核的回归跟踪者会把你的回归告诉regzbot,只要你发送了一个副本到回归 112*f8a291b7SWu XiangCheng邮件列表。但是回归跟踪者只有一个人,有时不得不休息或甚至偶尔享受可以远离电脑 113*f8a291b7SWu XiangCheng的时光(听起来很疯狂)。因此,依赖此人手动将回归添加到 `已追踪且尚未解决的 114*f8a291b7SWu XiangChengLinux内核回归列表 <https://linux-regtracking.leemhuis.info/regzbot/>`_ 和 115*f8a291b7SWu XiangChengregzbot发送的每周回归报告,可能会出现延迟。 这样的延误会导致Linus Torvalds 116*f8a291b7SWu XiangCheng在决定“继续开发还是发布新版本?”时忽略严重的回归。 117*f8a291b7SWu XiangCheng 118*f8a291b7SWu XiangCheng真的修复了所有的回归吗? 119*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~ 120*f8a291b7SWu XiangCheng 121*f8a291b7SWu XiangCheng几乎所有都是,只要引起问题的变更(肇事提交)被可靠定位。也有些回归可以不用这 122*f8a291b7SWu XiangCheng样,但通常是必须的。 123*f8a291b7SWu XiangCheng 124*f8a291b7SWu XiangCheng谁需要找出回归的根本原因? 125*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~ 126*f8a291b7SWu XiangCheng 127*f8a291b7SWu XiangCheng受影响代码区域的开发者应该自行尝试定位问题所在。但仅靠他们的努力往往是不可 128*f8a291b7SWu XiangCheng能做到的,很多问题只发生在开发者的无法接触的其他特定外部环境中——例如特定的 129*f8a291b7SWu XiangCheng硬件平台、固件、Linux发行版、系统的配置或应用程序。这就是为什么最终往往是报 130*f8a291b7SWu XiangCheng告者定位肇事提交;有时用户甚至需要再运行额外测试以查明确切的根本原因。开发 131*f8a291b7SWu XiangCheng者应该提供建议和可能的帮助,以使普通用户更容易完成该流程。 132*f8a291b7SWu XiangCheng 133*f8a291b7SWu XiangCheng如何找到罪魁祸首? 134*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~ 135*f8a291b7SWu XiangCheng 136*f8a291b7SWu XiangCheng如 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst (简要) 137*f8a291b7SWu XiangCheng和 Documentation/translations/zh_CN/admin-guide/bug-bisect.rst (详细)中所 138*f8a291b7SWu XiangCheng述,执行二分。听起来工作量很大,但大部分情况下很快就能找到罪魁祸首。如果这很 139*f8a291b7SWu XiangCheng困难或可靠地重现问题很耗时,请考虑与其他受影响的用户合作,一起缩小搜索范围。 140*f8a291b7SWu XiangCheng 141*f8a291b7SWu XiangCheng当出现回归时我可以向谁寻求建议? 142*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 143*f8a291b7SWu XiangCheng 144*f8a291b7SWu XiangCheng发送邮件到回归邮件列表(regressions@lists.linux.dev)同时抄送Linux内核的回归 145*f8a291b7SWu XiangCheng跟踪者(regressions@leemhuis.info);如果问题需要保密处理,可以省略列表。 146*f8a291b7SWu XiangCheng 147*f8a291b7SWu XiangCheng 148*f8a291b7SWu XiangCheng关于回归的更多细节 149*f8a291b7SWu XiangCheng------------------ 150*f8a291b7SWu XiangCheng 151*f8a291b7SWu XiangCheng 152*f8a291b7SWu XiangCheng“无回归规则”的目标是什么? 153*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~ 154*f8a291b7SWu XiangCheng 155*f8a291b7SWu XiangCheng用户应该放心升级内核版本,而不必担心有程序可能崩溃。这符合内核开发者的利益, 156*f8a291b7SWu XiangCheng可以使更新有吸引力:他们不希望用户停留在停止维护或超过一年半的稳定/长期Linux 157*f8a291b7SWu XiangCheng版本系列上。这也符合所有人的利益,因为 `那些系列可能含有已知的缺陷、安全问题 158*f8a291b7SWu XiangCheng或其他后续版本已经修复的问题 159*f8a291b7SWu XiangCheng<http://www.kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/>`_ 。 160*f8a291b7SWu XiangCheng此外,内核开发者希望使用户测试最新的预发行版或常规发行版变得简单而有吸引力。 161*f8a291b7SWu XiangCheng这同样符合所有人的利益,如果新版本出来后很快就有相关报告,会使追踪和修复问题 162*f8a291b7SWu XiangCheng更容易。 163*f8a291b7SWu XiangCheng 164*f8a291b7SWu XiangCheng实际中“无回归”规则真的可行吗? 165*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 166*f8a291b7SWu XiangCheng 167*f8a291b7SWu XiangCheng这不是句玩笑话,请见Linux创建者和主要开发人员Linus Torvalds在邮件列表中的许 168*f8a291b7SWu XiangCheng多发言,其中一些在 Documentation/process/handling-regressions.rst 中被引用。 169*f8a291b7SWu XiangCheng 170*f8a291b7SWu XiangCheng此规则的例外情况极为罕见;之前当开发者认为某个特定的情况有必要援引例外时, 171*f8a291b7SWu XiangCheng基本都被证明错了。 172*f8a291b7SWu XiangCheng 173*f8a291b7SWu XiangCheng谁来确保“无回归”被落实? 174*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~ 175*f8a291b7SWu XiangCheng 176*f8a291b7SWu XiangCheng照看和支撑树的子系统维护者应该关心这一点——例如,Linus Torvalds之于主线, 177*f8a291b7SWu XiangChengGreg Kroah-Hartman等人之于各种稳定/长期系列。 178*f8a291b7SWu XiangCheng 179*f8a291b7SWu XiangCheng他们都得到了别人的帮助,以确保回归报告不会被遗漏。其中之一是Thorsten 180*f8a291b7SWu XiangChengLeemhuis,他目前担任Linux内核的“回归跟踪者”;为了做好这项工作,他使用了 181*f8a291b7SWu XiangChengregzbot——Linux内核回归跟踪机器人。所以这就是为什么要抄送或转发你的报告到 182*f8a291b7SWu XiangCheng回归邮件列表来通知这些人,已经最好在你的邮件中包含“regzbot命令”来立即追踪它。 183*f8a291b7SWu XiangCheng 184*f8a291b7SWu XiangCheng回归通常多久能修复? 185*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~ 186*f8a291b7SWu XiangCheng 187*f8a291b7SWu XiangCheng开发者应该尽快修复任何被报告的回归,以提供及时为受影响的用户提供解决方案,并 188*f8a291b7SWu XiangCheng防止更多用户遇到问题;然而,开发人员需要花足够的时间和注意力确保回归修复不会 189*f8a291b7SWu XiangCheng造成额外的损害。 190*f8a291b7SWu XiangCheng 191*f8a291b7SWu XiangCheng因此,答案取决于各种因素,如回归的影响、存在时长或出现于哪个Linux版本系列。 192*f8a291b7SWu XiangCheng但最终,大多数的回归应该在两周内修复。 193*f8a291b7SWu XiangCheng 194*f8a291b7SWu XiangCheng当问题可以通过升级某些软件解决时,是回归吗? 195*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 196*f8a291b7SWu XiangCheng 197*f8a291b7SWu XiangCheng基本都是。如果开发人员告诉您其他情况,请咨询上述回归跟踪者。 198*f8a291b7SWu XiangCheng 199*f8a291b7SWu XiangCheng当新内核变慢或能耗增加,是回归吗? 200*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 201*f8a291b7SWu XiangCheng 202*f8a291b7SWu XiangCheng是的,但有一些差别。在微型基准测试中变慢5%不太可能被视为回归,除非它也会对 203*f8a291b7SWu XiangCheng广泛基准测试的结果产生超过1%的影响。如果有疑问,请寻求建议。 204*f8a291b7SWu XiangCheng 205*f8a291b7SWu XiangCheng当更新Linux时外部内核模块崩溃了,是回归吗? 206*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 207*f8a291b7SWu XiangCheng 208*f8a291b7SWu XiangCheng不,因为“无回归”规则仅限于Linux内核提供给用户空间的接口和服务。因此,它不包括 209*f8a291b7SWu XiangCheng构建或运行外部开发的内核模块,因为它们在内核空间中运行与挂进内核使用的内部接 210*f8a291b7SWu XiangCheng口偶尔会变化。 211*f8a291b7SWu XiangCheng 212*f8a291b7SWu XiangCheng如何处理安全修复引起的回归? 213*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 214*f8a291b7SWu XiangCheng 215*f8a291b7SWu XiangCheng在极为罕见的情况下,安全问题无法在不引起回归的情况下修复;这些修复都被放弃了, 216*f8a291b7SWu XiangCheng因为它们终究会引起问题。幸运的是这种两难境地基本都可以避免,受影响区域的主要 217*f8a291b7SWu XiangCheng开发者以及Linus Torvalds本人通常都会努力在不引入回归的情况下解决安全问题。 218*f8a291b7SWu XiangCheng 219*f8a291b7SWu XiangCheng如果你仍然面临此种情况,请查看邮件列表档案是否有人尽力避免过回归。如果没有, 220*f8a291b7SWu XiangCheng请报告它;如有疑问,请如上所述寻求建议。 221*f8a291b7SWu XiangCheng 222*f8a291b7SWu XiangCheng当修复回归时不可避免会引入另一个,如何处理? 223*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 224*f8a291b7SWu XiangCheng 225*f8a291b7SWu XiangCheng很遗憾这种事确实会出现,但幸运的是并不经常出现;如果发生了,受影响代码区的资 226*f8a291b7SWu XiangCheng深开发者应当调查该问题以找到避免回归的解决方法,至少避免它们的影响。如果你遇 227*f8a291b7SWu XiangCheng到这样的情况,如上所述:检查之前的讨论是否有人已经尽了最大努力,如有疑问请寻 228*f8a291b7SWu XiangCheng求建议。 229*f8a291b7SWu XiangCheng 230*f8a291b7SWu XiangCheng小提示:如果人们在每个开发周期中定期给出主线预发布(即v5.15-rc1或-rc3)以供 231*f8a291b7SWu XiangCheng测试,则可以避免这种情况。为了更好地解释,可以设想一个在Linux v5.14和v5.15-rc1 232*f8a291b7SWu XiangCheng之间集成的更改,该更改导致了回归,但同时是应用于5.15-rc1的其他改进的强依赖。 233*f8a291b7SWu XiangCheng如果有人在5.15发布之前就发现并报告了这个问题,那么所有更改都可以直接撤销,从 234*f8a291b7SWu XiangCheng而解决回归问题。而就在几天或几周后,此解决方案变成了不可能,因为一些软件可能 235*f8a291b7SWu XiangCheng已经开始依赖于后续更改之一:撤销所有更改将导致上述用户软件出现回归,这是不可 236*f8a291b7SWu XiangCheng接受的。 237*f8a291b7SWu XiangCheng 238*f8a291b7SWu XiangCheng若我所依赖的功能在数月前被移除了,是回归吗? 239*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 240*f8a291b7SWu XiangCheng 241*f8a291b7SWu XiangCheng是的,但如前节所述,通常很难修复此类回归。因此需要逐案处理。这也是定期测试主 242*f8a291b7SWu XiangCheng线预发布对所有人有好处的另一个原因。 243*f8a291b7SWu XiangCheng 244*f8a291b7SWu XiangCheng如果我似乎是唯一受影响的人,是否仍适用“无回归”规则? 245*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 246*f8a291b7SWu XiangCheng 247*f8a291b7SWu XiangCheng适用,但仅限于实际使用:Linux开发人员希望能够自由地取消那些只能在阁楼和博物 248*f8a291b7SWu XiangCheng馆中找到的硬件的支持。 249*f8a291b7SWu XiangCheng 250*f8a291b7SWu XiangCheng请注意,有时为了取得进展,不得不出现回归——后者也是防止Linux停滞不前所必需 251*f8a291b7SWu XiangCheng的。因此如果回归所影响的用户很少,那么为了他们和其他人更大的利益,还是让事情 252*f8a291b7SWu XiangCheng过去吧。尤其是存在某种规避回归的简单方法,例如更新一些软件或者使用专门为此目 253*f8a291b7SWu XiangCheng的创建的内核参数。 254*f8a291b7SWu XiangCheng 255*f8a291b7SWu XiangCheng回归规则是否也适用于staging树中的代码? 256*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 257*f8a291b7SWu XiangCheng 258*f8a291b7SWu XiangCheng不,参见 `适用于所有staging代码配置选项的帮助文本 259*f8a291b7SWu XiangCheng<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/staging/Kconfig>`_ , 260*f8a291b7SWu XiangCheng其早已声明:: 261*f8a291b7SWu XiangCheng 262*f8a291b7SWu XiangCheng 请注意:这些驱动正在积极开发中,可能无法正常工作,并可能包含会在不久的 263*f8a291b7SWu XiangCheng 将来发生变化的用户接口。 264*f8a291b7SWu XiangCheng 265*f8a291b7SWu XiangCheng虽然staging开发人员通常坚持“无回归”的原则,但有时为了取得进展也会违背它。这就 266*f8a291b7SWu XiangCheng是为什么当staging树的WiFi驱动被基本推倒重来时,有些用户不得不处理回归(通常可 267*f8a291b7SWu XiangCheng以忽略)。 268*f8a291b7SWu XiangCheng 269*f8a291b7SWu XiangCheng为什么较新版本必须“使用相似配置编译”? 270*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 271*f8a291b7SWu XiangCheng 272*f8a291b7SWu XiangCheng因为Linux内核开发人员有时会集成已知的会导致回归的变更,但使它们成为可选的,并 273*f8a291b7SWu XiangCheng在内核的默认配置下禁用它们。这一技巧允许进步,否则“无回归”规则将导致停滞。 274*f8a291b7SWu XiangCheng 275*f8a291b7SWu XiangCheng例如,试想一个新的可以阻止恶意软件滥用某个内核的接口的安全特性,同时又需要满足 276*f8a291b7SWu XiangCheng另一个很罕见的应用程序。上述的方法可使两方都满意:使用这些应用程序的人可以关闭 277*f8a291b7SWu XiangCheng新的安全功能,而其他不会遇到麻烦的人可以启用它。 278*f8a291b7SWu XiangCheng 279*f8a291b7SWu XiangCheng如何创建与旧内核相似的配置? 280*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 281*f8a291b7SWu XiangCheng 282*f8a291b7SWu XiangCheng用一个已知良好的内核启动机器,并用 ``make olddefconfig`` 配置新版的Linux。这 283*f8a291b7SWu XiangCheng会让内核的构建脚本从正在运行的内核中摘录配置文件(“.config”文件),作为即将编 284*f8a291b7SWu XiangCheng译的新版本的基础配置;同时将所有新的配置选项设为默认值,以禁用可能导致回归的 285*f8a291b7SWu XiangCheng新功能。 286*f8a291b7SWu XiangCheng 287*f8a291b7SWu XiangCheng如何报告在预编译的普通内核中发现的回归? 288*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 289*f8a291b7SWu XiangCheng 290*f8a291b7SWu XiangCheng您需要确保新的内核是用与旧版相似的配置编译(见上文),因为那些构建它们的人可 291*f8a291b7SWu XiangCheng能启用了一些已知的与新内核不兼容的特性。如有疑问,请向内核的提供者报告问题并 292*f8a291b7SWu XiangCheng寻求建议。 293*f8a291b7SWu XiangCheng 294*f8a291b7SWu XiangCheng 295*f8a291b7SWu XiangCheng用“regzbot”追踪回归的更多信息 296*f8a291b7SWu XiangCheng----------------------------- 297*f8a291b7SWu XiangCheng 298*f8a291b7SWu XiangCheng什么是回归追踪?为啥我需要关心它? 299*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 300*f8a291b7SWu XiangCheng 301*f8a291b7SWu XiangCheng像“无回归”这样的规则需要有人来确保它们被遵守,否则会被有意/无意打破。历史证 302*f8a291b7SWu XiangCheng明了这一点对于Linux内核开发也适用。这就是为什么Linux内核的回归跟踪者Thorsten 303*f8a291b7SWu XiangChengLeemhuis,,和另一些人尽力关注所有的回归直到他们解决。他们从未为此获得报酬, 304*f8a291b7SWu XiangCheng因此这项工作是在尽最大努力的基础上完成的。 305*f8a291b7SWu XiangCheng 306*f8a291b7SWu XiangCheng为什么/如何使用机器人追踪Linux内核回归? 307*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 308*f8a291b7SWu XiangCheng 309*f8a291b7SWu XiangCheng由于Linux内核开发过程的分布式和松散结构,完全手动跟踪回归已经被证明是相当困难 310*f8a291b7SWu XiangCheng的。因此Linux内核的回归跟踪者开发了regzbot来促进这项工作,其长期目标是尽可能为 311*f8a291b7SWu XiangCheng所有相关人员自动化回归跟踪。 312*f8a291b7SWu XiangCheng 313*f8a291b7SWu XiangChengRegzbot通过监视跟踪的回归报告的回复来工作。此外,它还查找用“Link:”标签引用这 314*f8a291b7SWu XiangCheng些报告的补丁;对这些补丁的回复也会被跟踪。结合这些数据,可以很好地了解当前修 315*f8a291b7SWu XiangCheng复过程的状态。 316*f8a291b7SWu XiangCheng 317*f8a291b7SWu XiangCheng如何查看regzbot当前追踪的回归? 318*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 319*f8a291b7SWu XiangCheng 320*f8a291b7SWu XiangCheng参见 `regzbot在线 <https://linux-regtracking.leemhuis.info/regzbot/>`_ 。 321*f8a291b7SWu XiangCheng 322*f8a291b7SWu XiangCheng何种问题可以由regzbot追踪? 323*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~ 324*f8a291b7SWu XiangCheng 325*f8a291b7SWu XiangCheng该机器人只为了跟踪回归,因此请不要让regzbot涉及常规问题。但是对于Linux内核的 326*f8a291b7SWu XiangCheng回归跟踪者来说,让regzbot跟踪严重问题也可以,如有关挂起、损坏数据或内部错误 327*f8a291b7SWu XiangCheng(Panic、Oops、BUG()、warning…)的报告。 328*f8a291b7SWu XiangCheng 329*f8a291b7SWu XiangCheng如何修改被追踪回归的相关信息? 330*f8a291b7SWu XiangCheng~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 331*f8a291b7SWu XiangCheng 332*f8a291b7SWu XiangCheng在直接或间接回复报告邮件时使用“regzbot命令”即可。最简单的方法是:在“已发送”文 333*f8a291b7SWu XiangCheng件夹或邮件列表存档中找到报告,然后使用邮件客户端的“全部回复”功能对其进行回复。 334*f8a291b7SWu XiangCheng在该邮件中的独立段落中可使用以下命令之一(即使用空行将这些命令中的一个或多个与 335*f8a291b7SWu XiangCheng其余邮件文本分隔开)。 336*f8a291b7SWu XiangCheng 337*f8a291b7SWu XiangCheng * 更新回归引入起点,例如在执行二分之后:: 338*f8a291b7SWu XiangCheng 339*f8a291b7SWu XiangCheng #regzbot introduced: 1f2e3d4c5d 340*f8a291b7SWu XiangCheng 341*f8a291b7SWu XiangCheng * 设置或更新标题:: 342*f8a291b7SWu XiangCheng 343*f8a291b7SWu XiangCheng #regzbot title: foo 344*f8a291b7SWu XiangCheng 345*f8a291b7SWu XiangCheng * 监视讨论或bugzilla.kernel.org上有关讨论或修复的工单:: 346*f8a291b7SWu XiangCheng 347*f8a291b7SWu XiangCheng #regzbot monitor: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/ 348*f8a291b7SWu XiangCheng #regzbot monitor: https://bugzilla.kernel.org/show_bug.cgi?id=123456789 349*f8a291b7SWu XiangCheng 350*f8a291b7SWu XiangCheng * 标记一个有更多相关细节的地方,例如有关但主题不同的邮件列表帖子或缺陷追踪器中的工单:: 351*f8a291b7SWu XiangCheng 352*f8a291b7SWu XiangCheng #regzbot link: https://bugzilla.kernel.org/show_bug.cgi?id=123456789 353*f8a291b7SWu XiangCheng 354*f8a291b7SWu XiangCheng * 标记回归已失效:: 355*f8a291b7SWu XiangCheng 356*f8a291b7SWu XiangCheng #regzbot invalid: wasn't a regression, problem has always existed 357*f8a291b7SWu XiangCheng 358*f8a291b7SWu XiangChengRegzbot还支持其他一些主要由开发人员或回归追踪人员使用的命令。命令的更多细节请 359*f8a291b7SWu XiangCheng参考 `入门指南 <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/getting_started.md>`_ 360*f8a291b7SWu XiangCheng和 `参考手册 <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/reference.md>`_ 。 361*f8a291b7SWu XiangCheng 362*f8a291b7SWu XiangCheng.. 363*f8a291b7SWu XiangCheng 正文结束 364*f8a291b7SWu XiangCheng.. 365*f8a291b7SWu XiangCheng 如本文件开头所述,本文以GPL-2.0+或CC-BY-4.0许可发行。如您想仅在CC-BY-4.0许 366*f8a291b7SWu XiangCheng 可下重分发本文,请用“Linux内核开发者”作为作者,并用如下链接作为来源: 367*f8a291b7SWu XiangCheng https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/translations/zh_CN/admin-guide/reporting-regressions.rst 368*f8a291b7SWu XiangCheng.. 369*f8a291b7SWu XiangCheng 注意:本RST文件内容只有在来自Linux内核源代码时是使用CC-BY-4.0许可的,因为经 370*f8a291b7SWu XiangCheng 过处理的版本(如经内核的构建系统)可能包含来自使用更严格许可证的文件的内容。 371