162306a36Sopenharmony_ci.. SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0) 262306a36Sopenharmony_ci.. 【重分发信息参见本文件结尾】 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci.. include:: ../disclaimer-zh_CN.rst 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci:Original: Documentation/admin-guide/reporting-regressions.rst 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci:译者: 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci 吴想成 Wu XiangCheng <bobwxc@email.cn> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci============ 1462306a36Sopenharmony_ci报告回归问题 1562306a36Sopenharmony_ci============ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci“*我们拒绝出现回归*”是Linux内核开发的首要规则;Linux的发起者和领军开发者Linus 1862306a36Sopenharmony_ciTorvalds立下了此规则并确保它被落实。 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci本文档描述了这条规则对用户的意义,以及Linux内核开发模型如何确保解决所有被报告 2162306a36Sopenharmony_ci的回归;关于内核开发者如何处理的方面参见 Documentation/process/handling-regressions.rst 。 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci本文重点(亦即“太长不看”) 2562306a36Sopenharmony_ci========================== 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#. 如果某程序在原先的Linux内核上运行良好,但在较新版本上效果更差、或者根本不 2862306a36Sopenharmony_ci 能用,那么你就碰见回归问题了。注意,新内核需要使用类似配置编译;更多相关细 2962306a36Sopenharmony_ci 节参见下方。 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#. 按照 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 中 3262306a36Sopenharmony_ci 所说的报告你的问题,该文档已经包含了所有关于回归的重要方面,为了方便起见也 3362306a36Sopenharmony_ci 复制到了下面。两个重点:在报告主题中使用“[REGRESSION]”开头并抄送或转发到 3462306a36Sopenharmony_ci `回归邮件列表 <https://lore.kernel.org/regressions/>`_ 3562306a36Sopenharmony_ci (regressions@lists.linux.dev)。 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#. 可选但是建议:在发送或转发报告时,指明该回归发生的起点,以便Linux内核回归 3862306a36Sopenharmony_ci 追踪机器人“regzbot”可以追踪此问题:: 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci #regzbot introduced v5.13..v5.14-rc1 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci与用户相关的所有Linux内核回归细节 4462306a36Sopenharmony_ci================================= 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci基本重点 4862306a36Sopenharmony_ci-------- 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci什么是“回归”以及什么是“无回归规则”? 5262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci如果某程序/实例在原先的Linux内核上运行良好,但在较新版本上效果更差、或者根本 5562306a36Sopenharmony_ci不能用,那么你就碰见回归问题了。“无回归规则”不允许出现这种情况。如果偶然发 5662306a36Sopenharmony_ci生了,导致问题的开发者应当迅速修复问题。 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci也就是说,若Linux 5.13中的WiFi驱动程序运行良好,但是在5.14版本上却不能用、速 5962306a36Sopenharmony_ci度明显变慢或出现错误,那就出现了回归。如果某正常工作的应用程序突然在新内核上 6062306a36Sopenharmony_ci出现不稳定,这也是回归;这些问题可能是由于procfs、sysfs或Linux提供给用户空间 6162306a36Sopenharmony_ci软件的许多其他接口之一的变化。但请记住,前述例子中的5.14需要使用类似于5.13的 6262306a36Sopenharmony_ci配置构建。这可以用 ``make olddefconfig`` 实现,详细解释见下。 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci注意本节第一句话中的“实例”:即使开发者需要遵循“无回归”规则,但仍可自由地改 6562306a36Sopenharmony_ci变内核的任何方面,甚至是导出到用户空间的API或ABI,只要别破坏现有的应用程序或 6662306a36Sopenharmony_ci用例。 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci还需注意,“无回归”规则只限制内核提供给用户空间的接口。它不适用于内核内部接 6962306a36Sopenharmony_ci口,比如一些外部开发的驱动程序用来插入钩子到内核的模块API。 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci如何报告回归? 7262306a36Sopenharmony_ci~~~~~~~~~~~~~~ 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci只需按照 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst 中 7562306a36Sopenharmony_ci所说的报告你的问题,该文档已经包含了要点。下面几点概述了一下只在回归中重要的 7662306a36Sopenharmony_ci方面: 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci * 在检查可加入讨论的现有报告时,别忘了搜索 `Linux回归邮件列表 7962306a36Sopenharmony_ci <https://lore.kernel.org/regressions/>`_ 和 `regzbot网页界面 8062306a36Sopenharmony_ci <https://linux-regtracking.leemhuis.info/regzbot/>`_ 。 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci * 在报告主题的开头加上“[REGRESSION]”。 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci * 在你的报告中明确最后一个正常工作的内核版本和首个出问题的版本。如若可能, 8562306a36Sopenharmony_ci 用二分法尝试找出导致回归的变更,更多细节见下。 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci * 记得把报告发到Linux回归邮件列表(regressions@lists.linux.dev)。 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci * 如果通过邮件报告回归,请抄送回归列表。 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci * 如果你使用某些缺陷追踪器报告回归,请通过邮件转发已提交的报告到回归列表, 9262306a36Sopenharmony_ci 并抄送维护者以及出问题的相关子系统的邮件列表。 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci 如果是稳定版或长期支持版系列(如v5.15.3…v5.15.5)的回归,请记得抄送 9562306a36Sopenharmony_ci `Linux稳定版邮件列表 <https://lore.kernel.org/stable/>`_ (stable@vger.kernel.org)。 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci 如果你成功地执行了二分,请抄送肇事提交的信息中所有签了“Signed-off-by:”的人。 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci在抄送你的报告到列表时,也请记得通知前述的Linux内核回归追踪机器人。只需在邮件 10062306a36Sopenharmony_ci中包含如下片段:: 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci #regzbot introduced: v5.13..v5.14-rc1 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ciRegzbot会就将你的邮件视为在某个特定版本区间的回归报告。上例中即linux v5.13仍 10562306a36Sopenharmony_ci然正常,而Linux 5.14-rc1是首个您遇到问题的版本。如果你执行了二分以查找导致回 10662306a36Sopenharmony_ci归的提交,请使用指定肇事提交的id代替:: 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci #regzbot introduced: 1f2e3d4c5d 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci添加这样的“regzbot命令”对你是有好处的,它会确保报告不会被忽略。如果你省略了 11162306a36Sopenharmony_ci它,Linux内核的回归跟踪者会把你的回归告诉regzbot,只要你发送了一个副本到回归 11262306a36Sopenharmony_ci邮件列表。但是回归跟踪者只有一个人,有时不得不休息或甚至偶尔享受可以远离电脑 11362306a36Sopenharmony_ci的时光(听起来很疯狂)。因此,依赖此人手动将回归添加到 `已追踪且尚未解决的 11462306a36Sopenharmony_ciLinux内核回归列表 <https://linux-regtracking.leemhuis.info/regzbot/>`_ 和 11562306a36Sopenharmony_ciregzbot发送的每周回归报告,可能会出现延迟。 这样的延误会导致Linus Torvalds 11662306a36Sopenharmony_ci在决定“继续开发还是发布新版本?”时忽略严重的回归。 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci真的修复了所有的回归吗? 11962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~ 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci几乎所有都是,只要引起问题的变更(肇事提交)被可靠定位。也有些回归可以不用这 12262306a36Sopenharmony_ci样,但通常是必须的。 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci谁需要找出回归的根本原因? 12562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~ 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci受影响代码区域的开发者应该自行尝试定位问题所在。但仅靠他们的努力往往是不可 12862306a36Sopenharmony_ci能做到的,很多问题只发生在开发者的无法接触的其他特定外部环境中——例如特定的 12962306a36Sopenharmony_ci硬件平台、固件、Linux发行版、系统的配置或应用程序。这就是为什么最终往往是报 13062306a36Sopenharmony_ci告者定位肇事提交;有时用户甚至需要再运行额外测试以查明确切的根本原因。开发 13162306a36Sopenharmony_ci者应该提供建议和可能的帮助,以使普通用户更容易完成该流程。 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci如何找到罪魁祸首? 13462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~ 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci如 Documentation/translations/zh_CN/admin-guide/reporting-issues.rst (简要) 13762306a36Sopenharmony_ci和 Documentation/translations/zh_CN/admin-guide/bug-bisect.rst (详细)中所 13862306a36Sopenharmony_ci述,执行二分。听起来工作量很大,但大部分情况下很快就能找到罪魁祸首。如果这很 13962306a36Sopenharmony_ci困难或可靠地重现问题很耗时,请考虑与其他受影响的用户合作,一起缩小搜索范围。 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci当出现回归时我可以向谁寻求建议? 14262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci发送邮件到回归邮件列表(regressions@lists.linux.dev)同时抄送Linux内核的回归 14562306a36Sopenharmony_ci跟踪者(regressions@leemhuis.info);如果问题需要保密处理,可以省略列表。 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci关于回归的更多细节 14962306a36Sopenharmony_ci------------------ 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci“无回归规则”的目标是什么? 15362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~ 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci用户应该放心升级内核版本,而不必担心有程序可能崩溃。这符合内核开发者的利益, 15662306a36Sopenharmony_ci可以使更新有吸引力:他们不希望用户停留在停止维护或超过一年半的稳定/长期Linux 15762306a36Sopenharmony_ci版本系列上。这也符合所有人的利益,因为 `那些系列可能含有已知的缺陷、安全问题 15862306a36Sopenharmony_ci或其他后续版本已经修复的问题 15962306a36Sopenharmony_ci<http://www.kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/>`_ 。 16062306a36Sopenharmony_ci此外,内核开发者希望使用户测试最新的预发行版或常规发行版变得简单而有吸引力。 16162306a36Sopenharmony_ci这同样符合所有人的利益,如果新版本出来后很快就有相关报告,会使追踪和修复问题 16262306a36Sopenharmony_ci更容易。 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci实际中“无回归”规则真的可行吗? 16562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci这不是句玩笑话,请见Linux创建者和主要开发人员Linus Torvalds在邮件列表中的许 16862306a36Sopenharmony_ci多发言,其中一些在 Documentation/process/handling-regressions.rst 中被引用。 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci此规则的例外情况极为罕见;之前当开发者认为某个特定的情况有必要援引例外时, 17162306a36Sopenharmony_ci基本都被证明错了。 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci谁来确保“无回归”被落实? 17462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~ 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci照看和支撑树的子系统维护者应该关心这一点——例如,Linus Torvalds之于主线, 17762306a36Sopenharmony_ciGreg Kroah-Hartman等人之于各种稳定/长期系列。 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci他们都得到了别人的帮助,以确保回归报告不会被遗漏。其中之一是Thorsten 18062306a36Sopenharmony_ciLeemhuis,他目前担任Linux内核的“回归跟踪者”;为了做好这项工作,他使用了 18162306a36Sopenharmony_ciregzbot——Linux内核回归跟踪机器人。所以这就是为什么要抄送或转发你的报告到 18262306a36Sopenharmony_ci回归邮件列表来通知这些人,已经最好在你的邮件中包含“regzbot命令”来立即追踪它。 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci回归通常多久能修复? 18562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~ 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci开发者应该尽快修复任何被报告的回归,以提供及时为受影响的用户提供解决方案,并 18862306a36Sopenharmony_ci防止更多用户遇到问题;然而,开发人员需要花足够的时间和注意力确保回归修复不会 18962306a36Sopenharmony_ci造成额外的损害。 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci因此,答案取决于各种因素,如回归的影响、存在时长或出现于哪个Linux版本系列。 19262306a36Sopenharmony_ci但最终,大多数的回归应该在两周内修复。 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci当问题可以通过升级某些软件解决时,是回归吗? 19562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci基本都是。如果开发人员告诉您其他情况,请咨询上述回归跟踪者。 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci当新内核变慢或能耗增加,是回归吗? 20062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci是的,但有一些差别。在微型基准测试中变慢5%不太可能被视为回归,除非它也会对 20362306a36Sopenharmony_ci广泛基准测试的结果产生超过1%的影响。如果有疑问,请寻求建议。 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci当更新Linux时外部内核模块崩溃了,是回归吗? 20662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci不,因为“无回归”规则仅限于Linux内核提供给用户空间的接口和服务。因此,它不包括 20962306a36Sopenharmony_ci构建或运行外部开发的内核模块,因为它们在内核空间中运行与挂进内核使用的内部接 21062306a36Sopenharmony_ci口偶尔会变化。 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci如何处理安全修复引起的回归? 21362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_ci在极为罕见的情况下,安全问题无法在不引起回归的情况下修复;这些修复都被放弃了, 21662306a36Sopenharmony_ci因为它们终究会引起问题。幸运的是这种两难境地基本都可以避免,受影响区域的主要 21762306a36Sopenharmony_ci开发者以及Linus Torvalds本人通常都会努力在不引入回归的情况下解决安全问题。 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci如果你仍然面临此种情况,请查看邮件列表档案是否有人尽力避免过回归。如果没有, 22062306a36Sopenharmony_ci请报告它;如有疑问,请如上所述寻求建议。 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci当修复回归时不可避免会引入另一个,如何处理? 22362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci很遗憾这种事确实会出现,但幸运的是并不经常出现;如果发生了,受影响代码区的资 22662306a36Sopenharmony_ci深开发者应当调查该问题以找到避免回归的解决方法,至少避免它们的影响。如果你遇 22762306a36Sopenharmony_ci到这样的情况,如上所述:检查之前的讨论是否有人已经尽了最大努力,如有疑问请寻 22862306a36Sopenharmony_ci求建议。 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci小提示:如果人们在每个开发周期中定期给出主线预发布(即v5.15-rc1或-rc3)以供 23162306a36Sopenharmony_ci测试,则可以避免这种情况。为了更好地解释,可以设想一个在Linux v5.14和v5.15-rc1 23262306a36Sopenharmony_ci之间集成的更改,该更改导致了回归,但同时是应用于5.15-rc1的其他改进的强依赖。 23362306a36Sopenharmony_ci如果有人在5.15发布之前就发现并报告了这个问题,那么所有更改都可以直接撤销,从 23462306a36Sopenharmony_ci而解决回归问题。而就在几天或几周后,此解决方案变成了不可能,因为一些软件可能 23562306a36Sopenharmony_ci已经开始依赖于后续更改之一:撤销所有更改将导致上述用户软件出现回归,这是不可 23662306a36Sopenharmony_ci接受的。 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci若我所依赖的功能在数月前被移除了,是回归吗? 23962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci是的,但如前节所述,通常很难修复此类回归。因此需要逐案处理。这也是定期测试主 24262306a36Sopenharmony_ci线预发布对所有人有好处的另一个原因。 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci如果我似乎是唯一受影响的人,是否仍适用“无回归”规则? 24562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_ci适用,但仅限于实际使用:Linux开发人员希望能够自由地取消那些只能在阁楼和博物 24862306a36Sopenharmony_ci馆中找到的硬件的支持。 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci请注意,有时为了取得进展,不得不出现回归——后者也是防止Linux停滞不前所必需 25162306a36Sopenharmony_ci的。因此如果回归所影响的用户很少,那么为了他们和其他人更大的利益,还是让事情 25262306a36Sopenharmony_ci过去吧。尤其是存在某种规避回归的简单方法,例如更新一些软件或者使用专门为此目 25362306a36Sopenharmony_ci的创建的内核参数。 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci回归规则是否也适用于staging树中的代码? 25662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci不,参见 `适用于所有staging代码配置选项的帮助文本 25962306a36Sopenharmony_ci<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/staging/Kconfig>`_ , 26062306a36Sopenharmony_ci其早已声明:: 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci 请注意:这些驱动正在积极开发中,可能无法正常工作,并可能包含会在不久的 26362306a36Sopenharmony_ci 将来发生变化的用户接口。 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci虽然staging开发人员通常坚持“无回归”的原则,但有时为了取得进展也会违背它。这就 26662306a36Sopenharmony_ci是为什么当staging树的WiFi驱动被基本推倒重来时,有些用户不得不处理回归(通常可 26762306a36Sopenharmony_ci以忽略)。 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci为什么较新版本必须“使用相似配置编译”? 27062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci因为Linux内核开发人员有时会集成已知的会导致回归的变更,但使它们成为可选的,并 27362306a36Sopenharmony_ci在内核的默认配置下禁用它们。这一技巧允许进步,否则“无回归”规则将导致停滞。 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci例如,试想一个新的可以阻止恶意软件滥用某个内核的接口的安全特性,同时又需要满足 27662306a36Sopenharmony_ci另一个很罕见的应用程序。上述的方法可使两方都满意:使用这些应用程序的人可以关闭 27762306a36Sopenharmony_ci新的安全功能,而其他不会遇到麻烦的人可以启用它。 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci如何创建与旧内核相似的配置? 28062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci用一个已知良好的内核启动机器,并用 ``make olddefconfig`` 配置新版的Linux。这 28362306a36Sopenharmony_ci会让内核的构建脚本从正在运行的内核中摘录配置文件(“.config”文件),作为即将编 28462306a36Sopenharmony_ci译的新版本的基础配置;同时将所有新的配置选项设为默认值,以禁用可能导致回归的 28562306a36Sopenharmony_ci新功能。 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci如何报告在预编译的普通内核中发现的回归? 28862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci您需要确保新的内核是用与旧版相似的配置编译(见上文),因为那些构建它们的人可 29162306a36Sopenharmony_ci能启用了一些已知的与新内核不兼容的特性。如有疑问,请向内核的提供者报告问题并 29262306a36Sopenharmony_ci寻求建议。 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci用“regzbot”追踪回归的更多信息 29662306a36Sopenharmony_ci----------------------------- 29762306a36Sopenharmony_ci 29862306a36Sopenharmony_ci什么是回归追踪?为啥我需要关心它? 29962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci像“无回归”这样的规则需要有人来确保它们被遵守,否则会被有意/无意打破。历史证 30262306a36Sopenharmony_ci明了这一点对于Linux内核开发也适用。这就是为什么Linux内核的回归跟踪者Thorsten 30362306a36Sopenharmony_ciLeemhuis,,和另一些人尽力关注所有的回归直到他们解决。他们从未为此获得报酬, 30462306a36Sopenharmony_ci因此这项工作是在尽最大努力的基础上完成的。 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci为什么/如何使用机器人追踪Linux内核回归? 30762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ci由于Linux内核开发过程的分布式和松散结构,完全手动跟踪回归已经被证明是相当困难 31062306a36Sopenharmony_ci的。因此Linux内核的回归跟踪者开发了regzbot来促进这项工作,其长期目标是尽可能为 31162306a36Sopenharmony_ci所有相关人员自动化回归跟踪。 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ciRegzbot通过监视跟踪的回归报告的回复来工作。此外,它还查找用“Link:”标签引用这 31462306a36Sopenharmony_ci些报告的补丁;对这些补丁的回复也会被跟踪。结合这些数据,可以很好地了解当前修 31562306a36Sopenharmony_ci复过程的状态。 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci如何查看regzbot当前追踪的回归? 31862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci参见 `regzbot在线 <https://linux-regtracking.leemhuis.info/regzbot/>`_ 。 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci何种问题可以由regzbot追踪? 32362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci该机器人只为了跟踪回归,因此请不要让regzbot涉及常规问题。但是对于Linux内核的 32662306a36Sopenharmony_ci回归跟踪者来说,让regzbot跟踪严重问题也可以,如有关挂起、损坏数据或内部错误 32762306a36Sopenharmony_ci(Panic、Oops、BUG()、warning…)的报告。 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci如何修改被追踪回归的相关信息? 33062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci在直接或间接回复报告邮件时使用“regzbot命令”即可。最简单的方法是:在“已发送”文 33362306a36Sopenharmony_ci件夹或邮件列表存档中找到报告,然后使用邮件客户端的“全部回复”功能对其进行回复。 33462306a36Sopenharmony_ci在该邮件中的独立段落中可使用以下命令之一(即使用空行将这些命令中的一个或多个与 33562306a36Sopenharmony_ci其余邮件文本分隔开)。 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_ci * 更新回归引入起点,例如在执行二分之后:: 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci #regzbot introduced: 1f2e3d4c5d 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci * 设置或更新标题:: 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ci #regzbot title: foo 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci * 监视讨论或bugzilla.kernel.org上有关讨论或修复的工单:: 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci #regzbot monitor: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/ 34862306a36Sopenharmony_ci #regzbot monitor: https://bugzilla.kernel.org/show_bug.cgi?id=123456789 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci * 标记一个有更多相关细节的地方,例如有关但主题不同的邮件列表帖子或缺陷追踪器中的工单:: 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci #regzbot link: https://bugzilla.kernel.org/show_bug.cgi?id=123456789 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci * 标记回归已失效:: 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci #regzbot invalid: wasn't a regression, problem has always existed 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ciRegzbot还支持其他一些主要由开发人员或回归追踪人员使用的命令。命令的更多细节请 35962306a36Sopenharmony_ci参考 `入门指南 <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/getting_started.md>`_ 36062306a36Sopenharmony_ci和 `参考手册 <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/reference.md>`_ 。 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci.. 36362306a36Sopenharmony_ci 正文结束 36462306a36Sopenharmony_ci.. 36562306a36Sopenharmony_ci 如本文件开头所述,本文以GPL-2.0+或CC-BY-4.0许可发行。如您想仅在CC-BY-4.0许 36662306a36Sopenharmony_ci 可下重分发本文,请用“Linux内核开发者”作为作者,并用如下链接作为来源: 36762306a36Sopenharmony_ci https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/translations/zh_CN/admin-guide/reporting-regressions.rst 36862306a36Sopenharmony_ci.. 36962306a36Sopenharmony_ci 注意:本RST文件内容只有在来自Linux内核源代码时是使用CC-BY-4.0许可的,因为经 37062306a36Sopenharmony_ci 过处理的版本(如经内核的构建系统)可能包含来自使用更严格许可证的文件的内容。 371