~ruther/guix-local

b2a20e5fd94b447b4749828f57d0dd82e9cb3639 — Greg Hogan 1 year, 7 months ago e239958
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~%")))