Paul Smith <psm...@gnu.org> writes:

> On Fri, 2025-06-27 at 14:31 +0200, wrotycz wrote:
>> > Of course none of this is very relevant to the issue under
>> > discussion.
>> 
>> I'm lost now.
>
> What I'm trying to say is that the exact number of jobs used as a
> default is not really that important.  I have no problem saying that
> the default number (should we decide to use it) would be 1 * ncpu.  I
> would not say, though, that it's completely obvious that this value is
> always the best in every situation, which was your original claim.
>
> The important, difficult, and time-consuming thing is to decide
> (a) whether to make the change in the first place, and, if so, (b) what
> the new behavior of the various options should be.
>
> There are two issues here: one is that "-j" has a poor choice for
> default behavior because it can cause hundreds of jobs to be spawned
> very quickly and bring the system to a standstill, which is bad.
>
> The other is that it's difficult to set a generic value for "-j" (say
> in a MAKEFLAGS environment variable, or even in the makefile itself)
> that works across a variety of systems with different CPU counts.
>
> Is it sufficient to solve the second issue without addressing the
> first?  If so you could imagine supporting more complex values for
> "-j"; for example, "-jn" means "number of CPUs", while "-j2n" means
> "twice the number of CPUs", or something like that.  This is a
> backward-compatible change so it's not so controversial.
>
> If you really want to address the first issue, the default behavior of
> "-j" with no argument, then that's a change to long-standing behavior
> so needs to be considered carefully.

Just want to voice my support for Paul's reasoning.

Using a default value for '-j' would not work in every situation. For
example, the 'ninja' command (similar to 'make' but meant to be written
by some meta-build tool like 'cmake' or 'meson') it defaults to a high
number of jobs:

    $ ninja --help 2>&1 | grep -- '-j'
      -j N     run N jobs in parallel (0 means infinity) [default=18 on this 
system]

When compiling LLVM, this number of jobs will make my system run
out-of-memory while linking. And when my system runs out-of-memory, it
is not very graceful. It freezes until I reboot it using the power
button.

If one wants to add a default value because they know it will always
work with their system they can easily add this to their ~/.profile:

    export GNUMAKEFLAGS="$((2 * `nproc`))"

Assuming this is the value they want (and 'nproc' from Coreutils).

Collin

Reply via email to