andreas pushed a commit to branch core-packages-team
in repository guix.

commit e12e4b7bad82bb117db60e1f15ed4eba83a1736c
Author: Greg Hogan <c...@greghogan.com>
AuthorDate: Tue Apr 1 13:58:17 2025 +0000

    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 <l...@gnu.org>
---
 guix/build/gnu-build-system.scm | 9 +++++++--
 1 file 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~%")))

Reply via email to