Linux内核是如何测试的?

Linux内核是如何测试的?,linux,linux-kernel,Linux,Linux Kernel,Linux内核开发人员如何在本地和提交代码后测试代码?他们是否使用某种单元测试,构建自动化?测试计划 Linux内核开发人员如何在本地和提交代码后测试代码 他们是否使用某种单元测试,构建自动化 在经典意义上,不 例如。Ingo Molnar正在运行以下工作负载: 1.使用随机的配置选项集构建新内核 2.开始吧 3.转到1 每次构建失败、引导失败、BUG或运行时警告都会得到处理。24/7. 乘以几个盒子,就可以发现很多问题 测试计划 没有 可能会有误解,认为有中央测试设施,而没有。 每个人都想做什

Linux内核开发人员如何在本地和提交代码后测试代码?他们是否使用某种单元测试,构建自动化?测试计划

Linux内核开发人员如何在本地和提交代码后测试代码

他们是否使用某种单元测试,构建自动化

在经典意义上,不

例如。Ingo Molnar正在运行以下工作负载: 1.使用随机的配置选项集构建新内核 2.开始吧 3.转到1

每次构建失败、引导失败、BUG或运行时警告都会得到处理。24/7. 乘以几个盒子,就可以发现很多问题

测试计划

没有

可能会有误解,认为有中央测试设施,而没有。
每个人都想做什么就做什么。

我想象他们使用虚拟化来做快速测试,比如QEMU、VirtualBox或Xen,还有一些脚本来执行配置和自动化测试


自动化测试可能通过尝试许多随机配置或一些特定配置(如果它们处理特定问题)来完成。Linux有许多低级工具(如dmesg)来监视和记录内核中的调试数据,因此我认为也可以使用这些工具。

Linux内核非常重视社区测试

通常,任何开发人员都会在提交代码之前测试自己的代码,而且他们通常会使用Linus的内核开发版本,或者使用其他不稳定/开发树中的一个,用于与其工作相关的项目。这意味着他们经常测试自己的变化和其他人的变化

正式的测试计划往往没有太多内容,但在将特性合并到上游树之前,可能需要额外的测试

正如Dean指出的,还有一些自动化测试,以及()

开发人员通常也会编写自动测试来测试他们的更改,但我不确定是否有(经常使用的)机制来集中收集这些临时测试


当然,这在很大程度上取决于内核的哪个区域正在发生变化——您为新的网络驱动程序所做的测试与您在更换核心调度算法时所做的测试大不相同

自动化内核测试不是很容易。大多数Linux开发人员自己进行测试,就像adobriyan提到的那样

但是,有一些东西有助于调试Linux内核:

  • kexec:一个系统调用,允许您将另一个内核放入内存并重新启动,而无需返回BIOS,如果失败,则重新启动
  • dmesg:绝对是查找有关内核引导过程中发生的事情以及它是否工作的信息的地方
  • 内核检测:除了printk(以及一个名为'CONFIG_printk_TIME'的选项,该选项允许您在内核输出什么时查看(精确到微秒),内核配置还允许您打开许多跟踪程序,使它们能够调试正在发生的事情
然后,开发人员通常会让其他人检查他们的补丁。一旦补丁在本地进行了审查,并且被认为不会干扰其他任何东西,并且这些补丁经过测试可以在不破坏任何东西的情况下使用Linus的最新内核,这些补丁就会被推到上游


编辑:详细说明补丁在集成到内核之前所经历的过程。

当然,内核本身及其部件在发布之前会进行测试,但这些测试仅涵盖基本功能。有一些测试系统执行Linux内核的测试:

Linux测试项目(LTP)向开源社区提供测试套件,以验证Linux的可靠性和稳定性。LTP测试套件包含一组用于测试Linux内核和相关功能的工具

自动测试——全自动测试框架。它主要是为了测试Linux内核而设计的,尽管它对于许多其他用途很有用,例如鉴定新硬件、虚拟化测试以及Linux平台下的其他通用用户空间程序测试。它是GPL下的一个开源项目,由许多组织使用和开发,包括Google、IBM、Red Hat和许多其他组织

还有一些主要的GNU/Linux发行公司开发的认证系统。这些系统通常检查完整的GNU/Linux发行版是否与硬件兼容。有由Novell、Red Hat、Oracle、Canonical和Google开发的认证系统

还有用于Linux内核动态分析的系统:

Kmemleak是Linux内核中包含的内存泄漏检测器。它提供了一种检测可能的内核内存泄漏的方法,类似于跟踪垃圾收集器,不同之处在于孤立对象不会被释放,而只通过/sys/kernel/debug/kmemleak报告

Kmemcheck对动态分配的内存(即使用kmalloc()的内存)的每次读写进行陷阱。如果读取了以前未写入的内存地址,则会在内核日志中打印一条消息。也是Linux内核的一部分

故障注入框架(包含在Linux内核中)允许将错误和异常注入到应用程序逻辑中,以实现更高的系统覆盖率和容错性。

还有:

MMTests是分析结果的基准测试和脚本的集合

Trinity是Linux系统调用模糊测试仪

此外,sourceforge的LTP页面已经过时,项目已经转移到GitHub

除了上面/下面的几点之外,它们更强调功能