如何加快我的构建

Ank*_*wal 5 linux performance compiling priority parallelism

我正在一台装有 Ubuntu 10.04 的 Linux 机器上进行构建。我怎样才能真正加快我的构建?我有 4 个 CPU 和大量 RAM。我已经将进程组设置为 -20。还有什么我可以做的吗?

Cal*_*leb 14

大多数软件构建过程使用make. 确保您make使用的-j参数通常是您拥有的 CPU 数量的两倍,因此make -j 8适合您的情况。

  • 通常,“最佳”进程数介于 n+1 和 2n+1 之间,具体取决于花费在 I/O 活动上的时间。这个想法是让一些进程准备好运行,每当其中一个正在运行的进程需要停止某些 I/O(或结束)时。如果您的进程受 CPU 限制,则选择 n+1。如果您的进程受 I/O 限制,则选择 2n 甚至 3n(如果您的磁盘足够快)。根据我的经验, 2n 是一个很好的编译值。 (5认同)
  • 核心数量翻倍?我总是听说[核心数加一](http://stackoverflow.com/questions/3025587/whats-best-value-for-make-j/3025596#3025596) (2认同)
  • 我认为这取决于你的工作是大还是小。+1 对于大工作有意义,x2 对于很多小工作有意义。我在 3 核机器上构建内核的测试表明 x2 (`-j 6`) 正是最佳选择。实际上,更多的速度会快一些,但机器的反应速度会变得令人无法接受。我喜欢在有事情发生时仍然可以打字:) (2认同)
  • 请注意,这不适用于所有可能的基于 make 的构建系统。特别是,当您让 make(1) 并行构建时,顶级 Makefile 以特定顺序在子目录中启动 make(1) 的递归构建通常将无法正确构建,除非您非常小心地记录顶部的依赖关系级Makefile。虽然它可以工作,但据我所知,并行构建是重新考虑构建系统以避免递归构建的最佳借口。 (2认同)

roz*_*acz 10

将进程组重新设置为 -20 是一个坏主意。这个 niceness 级别应该只用于最高优先级的系统关键任务。否则,您可能会失去响应能力甚至冻结系统。并且潜在的编译时间好处将是微不足道的。

除了Caleb 已经建议的内容之外,如果您进行大量编译,您还可以使用编译器缓存加快构建速度,或者使用distccicecream在网络上的多台计算机上分发构建任务。