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>
1 files changed, 7 insertions(+), 2 deletions(-) M guix/build/gnu-build-system.scm
M guix/build/gnu-build-system.scm => guix/build/gnu-build-system.scm +7 -2
@@ 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~%")))