guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Ludovic Courtès
Date: Mon, 29 Jan 2018 12:07:15 -0500 (EST)

branch: master
commit 5e959dd8f2bd9119758ff0fd056965bf2c6a6b21
Author: Ludovic Courtès <address@hidden>
Date:   Sun Jan 28 14:43:32 2018 +0100

    base: 'spawn-builds' shuffles jobs.
    
    * src/cuirass/base.scm (shuffle-jobs): New procedure.
    (spawn-builds): Use it.
---
 src/cuirass/base.scm | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm
index 8fed366..7f02633 100644
--- a/src/cuirass/base.scm
+++ b/src/cuirass/base.scm
@@ -286,6 +286,16 @@ and so on. "
 ;;; Building packages.
 ;;;
 
+(define (shuffle-jobs jobs)
+  "Shuffle JOBS, a list of job alists."
+  ;; Our shuffling algorithm is simple: we sort by .drv file name.  :-)
+  (define (job<? job1 job2)
+    (let ((drv1 (assq-ref job1 #:derivation))
+          (drv2 (assq-ref job2 #:derivation)))
+      (string<? drv1 drv2)))
+
+  (sort jobs job<?))
+
 (define* (spawn-builds store db jobs
                        #:key (max-batch-size 200))
   "Build the derivations associated with JOBS, a list of job alists, updating
@@ -316,7 +326,9 @@ MAX-BATCH-SIZE items."
                   (build-event-output-port (lambda (event status)
                                              (handle-build-event db event))
                                            #t)))
-    (let loop ((jobs  jobs)
+    ;; Shuffle jobs so that we don't build sequentially i686/x86_64/aarch64,
+    ;; master/core-updates, etc., which would be suboptimal.
+    (let loop ((jobs  (shuffle-jobs jobs))
                (count total))
       (if (zero? count)
           (log-message "done with ~a derivations" total)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]