在Make this flag中存在:
-l [load], - load-average [= load] 指定如果有其他作业正在运行且负载平均值至少为load(浮点数),则不应启动新作业(命令)。如果没有参数,则删除先前的加载限制。
您是否有一个很好的策略来确定负载限制的值?我的机器似乎有很大不同。
答案 0 :(得分:5)
可接受的负载取决于CPU核心的数量。如果有一个核心,则超过1的负载平均值会超载。如果有四个核心,则超过四个的负载平均值会过载。
人们通常只使用-j开关来指定核心数。
在此处查看一些经验数字:https://stackoverflow.com/a/17749621/412080
答案 1 :(得分:4)
我建议不要使用-l
选项。
原则上,-l
似乎优于-j
。 -j
说,开始这么多工作。 -l
说,确保这么多工作正在运行。通常情况下,这几乎是一样的,但当你有I / O约束工作是其他奇怪的事情,那么-l
应该更好。
那就是说,平均负载的概念有点可疑。它必然是对系统上发生的事情的抽样。因此,如果您运行make -j -l N
(对于某些N
)并且您有一个编写良好的makefile,那么即使是第一个样本,make也会立即启动大量作业并耗尽文件描述符或内存可以采取系统负载。此外,负载平均值的计算因操作系统而异,有些模糊不清的操作系统根本没有。
在实践中,您可以使用-j
,并且不会感到头疼。要从构建中获得更高的性能,请调整makefile,使用编译器选项,并使用ccache或类似的。
(我怀疑-l
选项的原始原因源于多个处理器很少且I / O非常慢的时候。)