如何加快Linux内核编译速度?

问题描述 投票:0回答:10

我有酷睿 i5 和 8GB 内存。 我的计算机上安装了 VMware Workstation 10.0.1。 我在 VMware 上安装了 fedora 20 Desktop Edition 作为来宾操作系统。

我正在研究 Linux 内核源代码 v 3.14.1。我正在为 Linux 内核开发一个 I/O 调度程序。每次修改代码后,大约需要 1 小时 30 分钟来编译和安装整个内核代码才能看到变化。

编译安装命令:

make menuconfig
,
make
,
make modules
,
make modules_install
,
make install

所以我的问题是有可能将1小时30分钟的时间减少到只有10到15分钟吗?

linux time compilation kernel
10个回答
30
投票

不要对源代码所做的每项更改都执行

make menuconfig
,因为无论您的更改有多么微不足道,它都会触发所有内容的完整编译。仅当内核的配置选项发生更改时才需要这样做,并且在开发过程中很少会发生这种情况。

就这样做:

make

或者如果您更喜欢并行编译:

make -j4

或您喜欢的任意数量的并发任务。

当然,部署最近构建的二进制文件可能需要

make install
等。

另一个技巧是将内核配置为测试所需的最低限度。我发现对于许多任务来说,UML 编译(用户模式 Linux)是最快的。您可能还会发现有用的

make localmodconfig
而不是
make menuconfig
来开始。


11
投票
  1. 使用
    make
    并行构建和
    -j
    选项
  2. 仅针对目标架构进行编译,否则 make 将为每个列出的架构构建内核。

即例如,而不是运行:

make

运行:

make ARCH=<your architecture> -jN

其中

N
是计算机上的核心数量(
cat /proc/cpuinfo
列出了核心数量)。例如,对于
i386
目标机和具有
4 cores
的主机(
cat /proc/cpuinfo
的输出):

make ARCH=i386 -j4

类似地,您可以使用

modules
标志运行其他 make 目标(
modules_install
install
-jN
)。

注意:

make
会对修改的文件进行检查,并仅编译那些已修改的文件,因此只有初始构建需要时间,后续构建会更快。


6
投票

make -j
将利用所有可用的 CPU。


4
投票

每次进行更改时,您无需再次运行

make menuconfig
— 只需要一次即可创建内核
.config
文件。 (或者如果您编辑
Kconfig
文件来添加或修改配置选项,也可能会再次出现,但这当然不应该经常发生。)

只要您的

.config
不受影响,运行
make
就应该只重新编译您更改的文件。有少数文件每次都必须编译,但绝大多数都不需要。


3
投票

ccache 应该能够显着加快你的编译时间。它通过缓存以前的编译并检测何时再次进行相同的编译来加速重新编译。使用 ccache 的第一次编译会比较慢,因为它需要填充缓存,但后续构建应该会快得多。

如果你不想对 ccache 配置大惊小怪,你可以像这样运行它来编译内核:

ccache make

1
投票

也许除了前面的建议之外,在使用 ccache 时,您可能需要取消设置

CONFIG_GCC_PLUGINS
(如果已设置),否则您可能会遇到很多缓存未命中,如 this 示例所示。


1
投票

使用此命令:

sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

其中 4 是我分配用于此过程的核心数量。

致谢


0
投票

也许除了前面的建议之外,使用 ccache 软件(https://ccache.samba.org/)和 SSD 驱动器上的编译目录应该会大大减少编译时间。


0
投票

如果您有足够的 RAM,并且在构建内核时不会使用您的机器,则可以产生大量并发作业。但请确保您的 RAM 足够,否则您的系统将挂起并崩溃。


-3
投票

简单的技巧。如果您不使用自己的计算机或拥有另一台计算机,则可以完全注销并使用 CTRL + ALT + F* 切换到 TTY 终端。一切都快得多。

© www.soinside.com 2019 - 2024. All rights reserved.