[Aboriginal] Load limiter patch
Rob Landley
rob at landley.net
Tue Oct 15 19:07:47 PDT 2013
On 10/01/2013 06:16:06 AM, Patrick Lauer wrote:
> Hi all,
>
> I noticed some, ahem, suboptimal behaviour on machines with lots of
> memory when FORK=1 is used.
>
> Problem: the current algorithm sets the number of parallel jobs to
> memsize/512MB. On a machine with e.g. 32GB that's 64 jobs, since there
> are 17 targets currently that gives a per-target parallelism of 3
> which
> adds up to 51 parallel jobs ... on a machine with 4 or 8 CPU-cores.
>
> You can imagine how that's, err, not happy.
Ok, now that I've read your actual patch, let me write a different
response. :)
When you said "load limiter" I thought you were using the "-l LOAD"
option of make, I.E. --load-average. But you're just capping CPUs, and
the way you're doing it is an integer division:
CPUS=$(( $REAL_CPUS / $TARGET_COUNT ))
Means that if REAL_CPUS is 8 and TARGET_COUNT is 12, you get 0 (so each
target basically gets $REAL_CPUS). Or if REAL_CPUS is 16 and
TARGET_COUNT is 12 you get 1 and leave 4 processors idle...
That's why I didn't do that; integer rounding gets ugly no matter how
you look at it.
It's possible that telling make to do its own load balancing will work
out better. I honestly don't know, see "don't trust anything the FSF
implements to not be broken", but that looks like the thing to
investigate?
I also note that what I tend to want is to max out CPUS for the
host-tools and simple-cross-compiler i686 builds, and then CPUS=1 for
all the other target builds so I get a coherent log out of them.
(Building with CPUS=1 means the log of the build output is harder to
read if you care about that sort of thing.) That still gives pretty
reasonable parallelism on the systems I'm building on, but shouldn't be
the default because if you have a 64 processor monster it won't take
advantage of it at all. I've been meaning to do a knob for that, but
haven't yet. I generally just "CPUS=1 FORK=1 more/buildall.sh" to do
release builds...
Sigh. And these days, FORK=1 should probably be the default and I
should change the variable to NOFORK=1 to switch it off...
Rob
1381889267.0
More information about the Aboriginal
mailing list