如何使用gnu Make确定--load-average的良好值?

时间:2010-08-05 09:29:29

标签: gcc load command-line-arguments gnu-make

在Make this flag中存在:

  

-l [load], - load-average [= load]    指定如果有其他作业正在运行且负载平均值至少为load(浮点数),则不应启动新作业(命令)。如果没有参数,则删除先前的加载限制。

您是否有一个很好的策略来确定负载限制的值?我的机器似乎有很大不同。

2 个答案:

答案 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非常慢的时候。)