phase1: do not exceed nproc build concurrency
authorThibaut VARÈNE <hacks@slashdirt.org>
Thu, 21 Jun 2018 09:04:37 +0000 (11:04 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 26 Jun 2018 20:08:37 +0000 (22:08 +0200)
Contrary to popular belief, exceeding the number of available CPU cores
in parallel builds (by running e.g. 'make -j$(($nproc+1))' where 'nproc'
is the number of active CPUs on the system) brings no performance benefit,
and may in fact negatively affect build times. This performance hit can
be further aggravated by the extra memory pressure resulting from the
extraneous jobs.

See:
- https://blog.regehr.org/archives/1416
- http://blog.stuffedcow.net/2011/08/hyperthreading-performance/

This is particularly relevant in two distinct cases:
- on hyper-threaded systems, where half of the active CPUs are separate
  threads on the same physical core;
- on virtualized guests systems, where the host physical CPUs are already
  affected by system overhead not visible to the guest.

Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
phase1/master.cfg

index e00a896a77c51fa2d8240d3a4871afd9b22b4bb5..cb0e70910fba9a7fdadc5e2d9c131bdd9772e745 100644 (file)
@@ -272,7 +272,7 @@ def GetVersionPrefix(props):
 
 def GetNumJobs(props):
        if props.hasProperty("slavename") and props.hasProperty("nproc"):
-               return ((int(props["nproc"]) / (max_builds[props["slavename"]] + other_builds)) + 1)
+               return (int(props["nproc"]) / (max_builds[props["slavename"]] + other_builds))
        else:
                return 1