内核持续集成(CKI)项目旨在防止错误进入 Linux 内核。

在 Linux 内核的持续集成测试 一文中,我介绍了 内核持续集成Continuous Kernel Integration(CKI)项目及其使命:改变内核开发人员和维护人员的工作方式。本文深入探讨了该项目的某些技术方面,以及这所有的部分是如何组合在一起的。

从一次更改开始

内核中每一项令人兴奋的功能、改进和错误都始于开发人员提出的更改。这些更改出现在各个内核存储库的大量邮件列表中。一些存储库关注内核中的某些子系统,例如存储或网络,而其它存储库关注内核的更多方面。 当开发人员向内核提出更改或补丁集时,或者维护者在存储库本身中进行更改时,CKI 项目就会付诸行动。

CKI 项目维护的触发器用于监视这些补丁集并采取措施。诸如 Patchwork 之类的软件项目通过将多个补丁贡献整合为单个补丁系列,使此过程变得更加容易。补丁系列作为一个整体历经 CKI 系统,并可以针对该系列发布单个报告。

其他触发器可以监视存储库中的更改。当内核维护人员合并补丁集、还原补丁或创建新标签时,就会触发。测试这些关键的更改可确保开发人员始终具有坚实的基线,可以用作编写新补丁的基础。

所有这些更改都会进入 GitLab CI 管道,并历经多个阶段和多个系统。

准备构建

首先要准备好要编译的源代码。这需要克隆存储库、打上开发人员建议的补丁集,并生成内核配置文件。这些配置文件具有成千上万个用于打开或关闭功能的选项,并且配置文件在不同的系统体系结构之间差异非常大。 例如,一个相当标准的 x86_64 系统在其配置文件中可能有很多可用选项,但是 s390x 系统(IBM zSeries 大型机)的选项可能要少得多。在该大型机上,某些选项可能有意义,但在消费类笔记本电脑上没有任何作用。

内核进一步转换为源代码工件。该工件包含整个存储库(已打上补丁)以及编译所需的所有内核配置文件。 上游内核会打包成压缩包,而 Red Hat 的内核会生成下一步所用的源代码 RPM 包。

成堆的编译

编译内核会将源代码转换为计算机可以启动和使用的代码。配置文件描述了要构建的内容,内核中的脚本描述了如何构建它,系统上的工具(例如 GCC 和 glibc)完成构建。此过程需要一段时间才能完成,但是 CKI 项目需要针对四种体系结构快速完成:aarch64(64 位 ARM)、ppc64le(POWER)、s390x(IBM zSeries)和 x86_64。重要的是,我们必须快速编译内核,以便使工作任务不会积压,而开发人员可以及时收到反馈。

添加更多的 CPU 可以大大提高速度,但是每个系统都有其局限性。CKI 项目在 OpenShift 的部署环境中的容器内编译内核;尽管 OpenShift 可以实现高伸缩性,但在部署环境中的可用 CPU 仍然是数量有限的。CKI 团队分配了 20 个虚拟 CPU 来编译每个内核。涉及到四个体系结构,这就涨到了 80 个 CPU!

另一个速度的提高来自 ccache 工具。内核开发进展迅速,但是即使在多个发布版本之间,内核的大部分仍保持不变。ccache 工具进行编译期间会在磁盘上缓存已构建的对象(整个内核的一小部分)。稍后再进行另一个内核编译时,ccache 会查找以前看到的内核的未更改部分。ccache 会从磁盘中提取缓存的对象并重新使用它。这样可以加快编译速度并降低总体 CPU 使用率。现在,耗时 20 分钟编译的内核在不到几分钟的时间内就完成了。

测试时间

内核进入最后一步:在真实硬件上进行测试。每个内核都使用 Beaker 在其原生体系结构上启动,并且开始无数次的测试以发现问题。一些测试会寻找简单的问题,例如容器问题或启动时的错误消息。其他测试则深入到各种内核子系统中,以查找系统调用、内存分配和线程中的回归问题。

大型测试框架,例如 Linux Test Project(LTP),包含了大量测试,这些测试在内核中寻找麻烦的回归问题。其中一些回归问题可能会回滚关键的安全修复程序,并且进行测试以确保这些改进仍保留在内核中。

测试完成后,关键的一步仍然是:报告。内核开发人员和维护人员需要一份简明的报告,准确地告诉他们哪些有效、哪些无效以及如何获取更多信息。每个 CKI 报告都包含所用源代码、编译参数和测试输出的详细信息。该信息可帮助开发人员知道从哪里开始寻找解决问题的方法。此外,它还可以帮助维护人员在漏洞进入内核存储库之前知道何时需要保留补丁集以进行其他查看。

总结

CKI 项目团队通过向内核开发人员和维护人员提供及时、自动的反馈,努力防止错误进入 Linux 内核。这项工作通过发现导致内核错误、安全性问题和性能问题等易于找到的问题,使他们的工作更加轻松。

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

linux内核测试,Linux内核测试的生命周期相关推荐

  1. linux内核分支,新闻|Linux 内核分支 2.4 版结束生命周期

    来自 LWN 消息,Linux 内核开发者之一 Willy Tarreau 在邮件中发出信息说:Linux kernel 2.4 分支即将结束生命周期,将不会再有小版本更新. Willy Tarrea ...

  2. linux内核 lts长期演进,Linux Kernel 4.19 和 5.4 生命周期延长至 6 年

    近日,Linux 内核开发及维护者 Greg Kroah-Hartman 宣布将 Linux 内核 4.19 和 5.4 版本的生命周期终止(EOL)支持从两年延长到六年,分别延长至 2024 和 2 ...

  3. 【Linux 内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 )

    文章目录 一.Linux 中进程的 CPU 资源调度 二.进程生命周期 三.进程生命周期之间的转换 一.Linux 中进程的 CPU 资源调度 Linux 操作系统 是 多任务系统 , 可以 同时运行 ...

  4. 白盒基本路径发测试实验报告_软件生命周期、白盒测试、黑盒测试

    继上一讲: 隅巳毕月:达摩克里斯之--排序与查找技术​zhuanlan.zhihu.com 我们今天来讲一下软件周期与两种软件测试方法 软件开发应遵循一个软件的生命周期,通常把软件产品从提出.实现.使 ...

  5. 测试基础-05-bug的定义生命周期

    1 学习目标&内容 1.1 bug的类型 1.2 bug的等级 1.3 bug的生命周期 1.4 禅道的使用 2 bug的定义 软件的Bug:狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外 ...

  6. linux reboot命 过程,IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器...

    1.首先给服务器装上idrac模块,然后给idrac配置一个远程IP,用作管理 2.在web界面输入IP,弹出以下界面,输入账号密码登录 3.认证成功后,点击虚拟控制台启动 4.进入如下界面,点击菜单 ...

  7. 软件的接口设计图_软件的生命周期amp;测试基本流程

    软件的生命周期&测试基本流程 软件的生命周期 问题定义及规划- - - 需求分析阶段- - - 系统设计 - - - 软件编程 - - - 软件测试 - - - 软件维护 瀑布模型有弊端 1用 ...

  8. 软件测试(软件测试生命周期,描述一个bug,定义bug级别,bug生命周期,如何开始第一次测试,测试执行和bug管理,测试工作中的人际关系处理)

    一.软件测试的生命周期 对比软件的生命周期和bug的生命周期 · 软件的生命周期:需求分析--计划--设计--编码--测试--运行维护 · 软件测试的生命周期:需求分析--测试计划--测试设计.测试开 ...

  9. 专项测试-Web兼容性测试

    1.兼容性测试 1.1 随机测试 ü  使用IE6测试,从指派通知书自动加载的接收凭证转入新增时,显示的放大的页面,不合兼容性 ü  网站不兼容,页面有错乱[兼容性视图] ü  软件兼容性:操作系统是 ...

  10. 敏捷开发流程下的测试(一)敏捷测试核心

    敏捷开发下的测试(一)敏捷测试核心 本文是参考ThoughtWork冰玉老师(https://blog.csdn.net/bingyulin)讲的敏捷课程加上自己的理解写的,想听原版可以关注Thong ...

最新文章

  1. 对Oracle中索引叶块分裂而引起延迟情况的测试和分析
  2. struts2 标签中read-only=true 和disabled的区别
  3. .NET 排序 Array.SortT 实现分析
  4. C++this指针的用途
  5. hibernateTemplate update 修改指定字段
  6. 多云架构落地设计和实施方案【华为云分享】
  7. 聚合丁苯橡胶(SSBR)行业调研报告 - 市场现状分析与发展前景预测
  8. 使用opencv中函数实现基于Harris算法的图像角点检测
  9. docker-compose 学习:通过 image 指令指定镜像搭建一个简单LNMP
  10. SSM-SpringMVC-15:SpringMVC中小论注解式开发之通配符篇
  11. 古代汉语(王力版)笔记
  12. 3D打印无人机等无人设备4——solidworks逆向建模编辑stl打印文件
  13. 对recv函数的一些理解
  14. 分享几个常用的国外英文论文文献数据库,先收藏再说
  15. 各种常用的默认端口号
  16. 实现悬浮球的桌面显示
  17. 13.歌手大赛计分程序。
  18. 隐私黑产:2亿余条个人信息卖了2000余万元
  19. Android虚拟机是以哪种方式实现的,底层逻辑又是怎样的?
  20. 2021-07-30 es6 -第4章和String复习

热门文章

  1. 课时3.浏览器访问网页原理(理解)
  2. css图片的全屏显示代码-css3
  3. AngularJS XMLHttpRequest
  4. JS 的平凡之路--学习人气眼中的效果(上)
  5. iview给radio按钮组件加点击事件
  6. Sum of Even Numbers After Queries
  7. IDEA中使用Maven
  8. T-1-java语言基础
  9. cf 1060e 树形dp 树上任意两点的距离和
  10. Google Code Jam 2015 Round 1A Haircut 二分