是否有一个足够智能的并行制造系统可以智能地响应低内存/交换条件?
Posted
技术标签:
【中文标题】是否有一个足够智能的并行制造系统可以智能地响应低内存/交换条件?【英文标题】:Is there a parallel make system that is smart enough to intelligently respond to low-memory/swapping conditions? 【发布时间】:2011-08-02 06:47:26 【问题描述】:我非常喜欢使用“make -j8”(当然,将 8 替换为我当前计算机的核心数量)来加快构建速度,并且并行编译 N 个文件通常在减少编译方面非常有效次...除非某些编译过程足够占用内存以致计算机内存不足,在这种情况下,所有各种编译过程都开始相互交换,一切都变慢了——从而违背了首先进行并行编译。
现在,这个问题的明显解决方案是“购买更多 RAM”——但由于我这样做太便宜,我突然想到应该有可能实现 'make'(或等效)监视系统的可用 RAM,并且当 RAM 降到接近零并且系统开始交换时,make 将自动介入并向它产生的一个或多个编译进程发送 SIGSTOP。这将允许停止的进程完全换出,以便其他进程可以在不进一步交换的情况下完成编译;然后,当其他进程退出并且更多 RAM 可用时,“make”进程将向暂停的进程发送 SIGCONT,允许它们恢复自己的处理。这样可以避免大多数交换,并且我可以安全地在所有内核上编译。
有人知道实现这个逻辑的程序吗?或者反过来说,这样的程序不能/不能工作有什么好的理由吗?
【问题讨论】:
你会接受“不”的答案吗? ;) 【参考方案1】:对于 GNU Make,有 -l
选项:
-l [load], --load-average[=load]
Specifies that no new jobs (commands) should be started if there are others jobs running and the load average is at least load (a floating-
point number). With no argument, removes a previous load limit.
不过,我认为这没有标准选项。
【讨论】:
以上是关于是否有一个足够智能的并行制造系统可以智能地响应低内存/交换条件?的主要内容,如果未能解决你的问题,请参考以下文章