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

发布于 2024-09-12 14:29:28 字数 185 浏览 13 评论 0原文

在Make中存在这个标志:

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

对于负载限制使用什么值,您有好的策略吗?我的机器之间似乎有很大差异。

In Make this flag exists:

-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.

Do you have a good strategy for what value to use for the load limit ? It seems to differ a lot between my machines.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

忘年祭陌 2024-09-19 14:29:28

可接受的负载取决于 CPU 核心的数量。如果有一个核心,平均负载超过1就是过载。如果有四个核心,那么平均负载超过四个就是过载。

人们通常只使用 -j 开关指定核心数量。

请在此处查看一些经验数字:https://stackoverflow.com/a/17749621/412080

Acceptable load depends on the number of CPU cores. If there is one core, than load average more than 1 is overload. If there are four cores, than load average of more than four is overload.

People often just specify the number of cores using -j switch.

See some empirical numbers here: https://stackoverflow.com/a/17749621/412080

狼性发作 2024-09-19 14:29:28

我建议不要使用 -l 选项。

原则上,-l 似乎优于 -j-j 表示启动这么多作业。 -l 表示,确保有这么多作业正在运行。通常,这些几乎是相同的事情,但是当您有 I/O 绑定作业时还有其他奇怪的情况,那么 -l 应该更好。

也就是说,平均负载的概念有点可疑。它必然是系统上发生的事情的一个样本。因此,如果您运行 make -j -l N (对于某些 N)并且您有一个编写良好的 makefile,那么 make 将立即启动大量作业并运行在获取系统负载的第一个样本之前就耗尽了文件描述符或内存。此外,不同操作系统对平均负载的计算方式也不同,有些操作系统根本没有这种计算方式。

实际上,使用 -j 效果会更好,并且会减少一些麻烦。要从构建中获得更多性能,请调整 makefile、使用编译器选项并使用 ccache 或类似的东西。

(我怀疑 -l 选项的最初原因源于多处理器很少且 I/O 非常慢的时代。)

I recommend against using the -l option.

In principle, -l seems superior to -j. -j says, start this many jobs. -l says, make sure this many jobs are running. Often, those are almost the same thing, but when you have I/O bound jobs are other oddities, then -l should be better.

That said, the concept of load average is a bit dubious. It is necessarily a sampling of what goes on on the system. So if you run make -j -l N (for some N) and you have a well-written makefile, then make will immediately start a large number of jobs and run out of file descriptors or memory before even the first sample of the system load can be taken. Also, the accounting of the load average differs across operating systems, and some obscure ones don't have it at all.

In practice, you'll be as well off using -j and will have less headaches. To get more performance out of the build, tune your makefiles, play with compiler options, and use ccache or similar.

(I suspect the original reason for the -l option stems from a time when multiple processors were rare and I/O was really slow.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文