Linux 内核开发人员如何发现 Linux 内核中的 bug 和其他需要改进的地方?

Linux 内核开发人员如何发现 Linux 内核中的 bug 和其他需要改进的地方?

这可能是也可能不是题外话。如果是的话,请发表评论,我会将其删除。

我自己正在努力成为一名内核开发人员,在阅读一些邮件列表时,我不禁想知道 Linux 内核开发人员在 Linux 内核中哪里可以找到改进的地方。查看内核的错误跟踪器,实际上并没有那么多内核错误,并且很多补丁都与优化或以其他方式改进内核内部有关。这引出了我的问题,即这些开发人员如何找出 Linux 内核中需要改进的地方。

再次强调,如果这不是主题,请发表评论,我会将其删除。

答案1

除了其他答案(这可能暗示这个问题可能偏离主题或者答案应该在维基答案中进行转换)。

  • 有很多发行版,其中许多都有优秀的内核开发人员,但无论如何,大多数发行版都有知识渊博的人员,他们可以对错误进行分类并与正确的人员进行沟通。不要认为只是通用发行版,还有专​​门的发行版,例如用于路由的 openwrt 可能使用内核不同地,或所有虚拟化映像

  • 许多开发商是由一些公司支付费用的。对于发行版,开发人员可能会进一步检查是否存在问题(这可能暗示存在错误)。对于硬件制造商(设备和架构),他们可能会进行额外的压力测试。有时,只是在开发人员之间进行讨论,您可能会遇到错误(不同的部分可能有不同的假设)。

  • 堆栈:你有很多标准库以及直接使用内核系统调用的程序。他们可能进行了广泛的测试。

  • 内核有各种各样的测试,其中许多测试是在内核开发(和发布)时定期执行的。

  • 开发和调试:更改代码(或只是查看代码)可能会揭示内核不相关部分中更重要的错误。注意:也只是通过查看代码(也许因为你想改进某一部分,所以你必须了解其他部分如何使用你的代码等)

不要低估有多少不同的机器和用途,因此总会出现新的错误。注意:作为开发人员,您可能会看到问题在它们成为错误之前,您还可以评估它是一个已经修复的错误还是一个新错误。

请注意:一旦我提交了错误报告,两个错误就得到了纠正。一个是系统维护者(回归),第二个是 Linus Torvalds(更高级别),因为第一个错误暗示通用代码很弱。

查看:https://kernelnewbies.org/也许还有一些子系统特定的邮件列表,并询问。会有人愿意帮助新开发者。

答案2

有(至少)三种查找错误的方法:

  • 使用该程序的人可能会注意到它的行为不正常。这可能是他们想要的功能,也可能是缺陷(即错误)。
  • 在直接查看代码时,缺陷可能会被发现为该代码的广告行为(来自注释或文档或来自同一代码的其他部分)与其实际功能之间的差异,或者可能是意外的误用,例如作为数组下标越界。这可以通过机械化手段(例如编译器检查)或通过人眼来完成。
  • 外部程序(通常称为模糊器)可以以随机方式攻击代码,并尝试随机使其出现异常行为。

您可能不会看到很多内核错误,因为它们被发现后很快就会被修复,而不是因为数量不多。

功能请求与错误的区别在于,它通常涉及为新行为添加新代码,而错误是现有代码中的错误。优化可以是错误修复或新功能。

作为一个新的内核开发者,优化可能是非常困难的。

您最好的选择(如已经建议的那样)可能是找到当前不受支持或未得到很好支持的设备,并尝试为其编写驱动程序。

但是,仅仅阅读现有的内核代码而不发现需要进行更改本身可能就是进入内核开发的好方法。讨论优化并了解新的优化如何工作同样有价值。

答案3

bugzilla.kernel.org 和 LKML 是问题和需要修复或改进的事物的无限来源。

还有一些非常聪明的人。他们阅读代码,意识到可以以更有效的方式以不同的方式完成它,因此我们提高了性能。

答案4

这是从我作为 Linux 用户空间开发人员而不是活跃的内核开发人员的角度来看的,但在寻找如何实现某些目标时,您会发现有一个补丁集尚未合并到主线内核中。

例如内核的完全任务隔离模式CONFIG_TASK_ISOLATION看起来对于特定用例很有用,但据我所知,它尚未在主线内核中搜索https://github.com/torvalds/linux发现没有命中。

尝试将这样的补丁集合并到主线内核中可以作为内核开发人员的起点。

相关内容