如何加速Linux内核编译?

时间:2014-04-24 20:31:40

标签: linux time compilation kernel

我有8GB RAM的核心i5。 我的机器上安装了VMware工作站10.0.1。 我在VMware上安装了fedora 20 Desktop Edition作为客户操作系统。

我正在研究Linux内核源代码v 3.14.1。我正在为Linux内核开发一个I / O调度程序。在每次编译和安装整个内核代码以查看更改大约花费1小时30分钟后对代码进行任何修改之后。

编译和安装命令 make menuconfigmakemake modulesmake modules_installmake install

所以我的问题是可以将1小时30分钟的时间缩短到10到15分钟吗?

9 个答案:

答案 0 :(得分:22)

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

只是做:

make

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

make -j4

或你想要的任何数量的并发任务。

当然,部署最近构建的二进制文件时可能需要make install等。

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

答案 1 :(得分:5)

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

只要您的.config保持不变,运行make应该只重新编译您更改的文件。每次都必须编译一些文件,但绝大多数都不是。

答案 2 :(得分:3)

  1. 使用make选项
  2. -j并行构建
  3. 仅针对目标体系结构进行编译,否则make将为每个列出的体系结构构建内核。
  4. 即。例如,而不是跑步:

    make
    

    运行:

    make ARCH=<your architecture> -jN
    

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

    make ARCH=i386 -j4
    

    同样,您可以使用modules标记运行其他制作目标(modules_installinstall-jN)。

    注意: make检查已修改的文件,并仅编译那些已修改的文件,这样只有初始构建需要花费时间,后续构建会更快。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

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

exception_handler

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

也许除了前面的建议之外,在使用ccache时,您可能想取消设置$array = [1, 2, 3, 4]; $changed = 0; $new = array_filter($array, function($e) use (&$changed) { $result = $e <= 2; if(!$result) $changed++; return $result; }); (如果已设置),否则可能会遇到很多缓存未命中的情况,如this示例所示

答案 8 :(得分:0)

使用此命令:

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

我分配给该进程的核心数为4。

Credits