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

问题描述 投票:14回答:1

如果我使用make -j2,它可以构建良好,但未充分利用CPU:

j2

如果使用make -j4,它可以快速构建,但是对于某些特定的模板密集型文件,它会占用大量内存,并且由于换成硬盘驱动器,还会降低整个系统和构建过程的速度:

j4

如何根据内存自动限制并行任务的数量,例如:

enter image description here

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

想法:

  • 如果内存繁忙,请使用-l并人为地调整平均负载(当系统已经出现问题时,平均负载自然增加)。
  • 进行内存分配系统调用(如sbrk(2)或mmap(2))或页面错误使进程挂起,直到内存被完成的作业回收为止,而不是换出其他进程。不幸的是,容易发生死锁...
memory makefile build parallel-processing
1个回答
0
投票

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

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

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

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

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