已发布一组补丁,可将 Linux 内核的构建速度提高 50-80%

Ingo Molnar 是一位著名的 Linux 内核开发人员和 CFS(Completely Fair Scheduler)任务调度程序的作者,他提议在 Linux 内核开发人员邮件列表上讨论一系列影响内核源代码中一半以上的文件的补丁,以及根据设置,将完整内核重建的速度提高 50-80%。所实施的优化值得注意,因为它涉及到内核开发历史上最大的一组更改 - 提议一次性包含 2297 个补丁,更改了超过 25 个文件(“include/”中的 10 个头文件)和“arch/*/include/”目录“以及 15 个带有源文本的文件)。

性能增益是通过改变处理头文件的方法来实现的。值得注意的是,经过三十多年的内核开发,由于文件之间存在大量的交叉依赖关系,头文件的状态呈现出令人沮丧的样子。头文件重组花费了一年多的时间,并且需要对层次结构和依赖项进行大量重新设计。在重组过程中,我们将不同内核子系统的类型定义和 API 分开。

所做的更改包括:将高级头文件相互分离、消除链接头文件的内联函数、将类型和 API 的头文件分开、确保头文件的单独汇编(大约 80 个文件具有干扰汇编的间接依赖关系,通过其他头文件),自动添加“.h”和“.c”文件的依赖项,逐步优化头文件,使用“CONFIG_KALLSYMS_FAST=y”模式,选择性地将C文件合并到汇编块中减少目标文件的数量。

结果,所做的工作使得在后预处理阶段处理的头文件的大小减少了 1-2 个数量级。例如,优化前使用“linux/gfp.h”头文件会增加13543行代码并包含303个依赖头文件,而优化后大小减少为181行和26个依赖文件。或者再举个例子:在没有打补丁的情况下预处理文件“kernel/pid.c”时,包含了94万行代码,其中大部分代码没有在pid.c中使用。分离头文件可以将处理的代码量减少三倍,将处理的行数减少到 36 行。

当在测试系统上使用“make -j96 vmlinux”命令完全重建内核时,补丁的应用显示 v5.16-rc7 分支的构建时间从 231.34 秒减少到 129.97 秒(从 15.5 秒减少到 27.7 秒)每小时),并且还提高了装配期间使用 CPU 内核的效率。通过增量构建,优化的效果更加明显 - 更改头文件后重新构建内核的时间显着减少(从 112% 减少到 173%,具体取决于所更改的头文件)。目前优化仅适用于 ARM64、MIPS、Sparc 和 x86(32 位和 64 位)架构。

来源: opennet.ru

添加评论