diff options
author | Greg Hogan <code@greghogan.com> | 2025-04-01 13:58:17 +0000 |
---|---|---|
committer | Andreas Enge <andreas@enge.fr> | 2025-07-18 20:17:32 +0200 |
commit | b2a20e5fd94b447b4749828f57d0dd82e9cb3639 (patch) | |
tree | 4bb79d7ecafd3dbae67cb7c477d88d50f4e0a0de /guix | |
parent | e239958b8bfcca685514b633b90cbe6536f5762e (diff) |
build-system/gnu: Limit load average.
A nice feature of offload builds is that Guix will throttle the start of
new jobs based on the overload-threshold. There is no equivalent for
local builds, so one must either run builds in serial (--max-jobs=1) and
endure single-threaded builds or run concurrent builds and watch the
system overload as it runs multiple multi-threaded builds.
From a benchmark comparing the compilation of concurrent Folly builds,
the "max-load" option reduced the overall time by 8.3%. Memory use also
drops considerably since we are only running 1/4 of the processes at any
time.
* guix/build/gnu-build-system.scm (build, check): Set max load.
Change-Id: I97f1e3e59880b6ed23faed2038eb5279415e9c95
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'guix')
-rw-r--r-- | guix/build/gnu-build-system.scm | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm index 10542b3ec2..63bbeae605 100644 --- a/guix/build/gnu-build-system.scm +++ b/guix/build/gnu-build-system.scm @@ -28,6 +28,7 @@ #:use-module (ice-9 regex) #:use-module (ice-9 format) #:use-module (ice-9 ftw) + #:use-module (ice-9 threads) #:use-module (srfi srfi-1) #:use-module (srfi srfi-19) #:use-module (srfi srfi-34) @@ -386,7 +387,9 @@ makefiles." #:allow-other-keys) (apply invoke "make" `(,@(if parallel-build? - `("-j" ,(number->string (parallel-job-count))) + `("-j" ,(number->string (parallel-job-count)) + ,(string-append "--max-load=" + (number->string (total-processor-count)))) '()) ,@make-flags))) @@ -425,7 +428,9 @@ makefiles." (raise c))) (apply invoke "make" test-target `(,@(if parallel-tests? - `("-j" ,(number->string (parallel-job-count))) + `("-j" ,(number->string (parallel-job-count)) + ,(string-append "--max-load=" + (number->string (total-processor-count)))) '()) ,@make-flags))) (format #t "test suite not run~%"))) |