如何根据内存压力使make / ninja限制并行度?

时间:2016-12-15 21:57:16

标签: memory makefile build parallel-processing

如果我使用make -j2,它构建正常,但未充分利用CPU:

j2

如果我使用make -j4,它会快速构建,但对于某些特定于模板的文件,它会占用大量内存,从而减慢整个系统和构建过程,因为交换到HDD:

j4

如何根据内存自动限制并行任务数量,如下所示:

enter image description here

,以便以最大速率构建项目,但在某些地方放慢速度以避免撞到内存墙?

思路:

  • 使用-l并在内存繁忙时人为调整负载平均值(当系统出现问题时,负载平均值会自然增长)。
  • 使内存分配系统调用(如sbrk(2)或mmap(2))或页面错误使进程挂起,直到内存被完成的作业回收,而不是交换其他进程。不幸的是,死锁很容易......

1 个答案:

答案 0 :(得分:0)

这不是一个完整的解决方案,而是一种基于“后卫”的潜在方法。

  1. 以高“ -j”值开始制作。
  2. 执行一项警卫工作

    a。等待抖动(页面错误/每秒超出限制)和高CPU使用率。 b。找到内存使用率最高的作业,将其挂起。 C。等待一段时间,以使系统重新平衡自身。 d。重复

如果方法不错,可以发布示例实现。