summaryrefslogtreecommitdiff
path: root/build-aux/cuirass/evaluate.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-05-26 17:11:20 +0200
committerLudovic Courtès <ludo@gnu.org>2022-05-26 17:11:20 +0200
commit7097e98586df3110b80943a88c27804d65f214fa (patch)
tree2e244b9fc19acc569d6abd42306aaf013f02da0d /build-aux/cuirass/evaluate.scm
parent15870cc08d20501e3526fa892111a43ae9e3e02f (diff)
parent4577f3c6b60ea100e521c246fb169d6c05214b20 (diff)
downloadguix-patches-7097e98586df3110b80943a88c27804d65f214fa.tar
guix-patches-7097e98586df3110b80943a88c27804d65f214fa.tar.gz
Merge branch 'master' into staging
Diffstat (limited to 'build-aux/cuirass/evaluate.scm')
-rw-r--r--build-aux/cuirass/evaluate.scm53
1 files changed, 30 insertions, 23 deletions
diff --git a/build-aux/cuirass/evaluate.scm b/build-aux/cuirass/evaluate.scm
index fc0744ad2a..7ae5c266d1 100644
--- a/build-aux/cuirass/evaluate.scm
+++ b/build-aux/cuirass/evaluate.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016-2018, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
;;;
@@ -78,28 +78,35 @@
;; up the evaluation speed as the evaluations can be performed
;; concurrently. It also decreases the amount of memory needed per
;; evaluation process.
- (n-par-for-each
- (/ (current-processor-count) 2)
- (lambda (system)
- (with-store store
- (let ((inferior
- (open-inferior (derivation->output-path derivation)))
- (channels (map channel-instance->sexp instances)))
- (inferior-eval '(use-modules (gnu ci)) inferior)
- (let ((jobs
- (inferior-eval-with-store
- inferior store
- `(lambda (store)
- (cuirass-jobs store
- '((subset . all)
- (systems . ,(list system))
- (channels . ,channels))))))
- (file
- (string-append directory "/jobs-" system ".scm")))
- (call-with-output-file file
- (lambda (port)
- (write jobs port)))))))
- %cuirass-supported-systems))))))
+ ;;
+ ;; Fork inferior processes upfront before we have created any
+ ;; threads.
+ (let ((inferiors (map (lambda _
+ (open-inferior (derivation->output-path derivation)))
+ %cuirass-supported-systems)))
+ (n-par-for-each
+ (min (length %cuirass-supported-systems)
+ (current-processor-count))
+ (lambda (system inferior)
+ (with-store store
+ (let ((channels (map channel-instance->sexp instances)))
+ (inferior-eval '(use-modules (gnu ci)) inferior)
+ (let ((jobs
+ (inferior-eval-with-store
+ inferior store
+ `(lambda (store)
+ (cuirass-jobs store
+ '((subset . all)
+ (systems . ,(list system))
+ (channels . ,channels))))))
+ (file
+ (string-append directory "/jobs-" system ".scm")))
+ (close-inferior inferior)
+ (call-with-output-file file
+ (lambda (port)
+ (write jobs port)))))))
+ %cuirass-supported-systems
+ inferiors)))))))
(x
(format (current-error-port) "Wrong command: ~a~%." x)
(exit 1)))