derivations: 'build-expression->derivation' caches its module derivations.
This reduces the number of lookups in the 'add-data-to-store' cache from 7505 to 3329 (hit rate from 68% to 27%) when running: GUIX_PROFILING=add-data-to-store-cache guix build libreoffice -nd The execution time of "guix build libreoffice -nd" goes from 2.12s to 1.87s. * guix/derivations.scm (%module-cache): New variable. (imported+compiled-modules)[key]: New variable. Lookup KEY in %MODULE-CACHE and populate %MODULE-CACHE upon cache miss.master
parent
cf7648f882
commit
f726f6f802
|
@ -1207,13 +1207,25 @@ they can refer to each other."
|
|||
#:guile-for-build guile
|
||||
#:local-build? #t)))
|
||||
|
||||
(define %module-cache
|
||||
;; Map a list of modules to its 'imported+compiled-modules' result.
|
||||
(make-weak-value-hash-table))
|
||||
|
||||
(define* (imported+compiled-modules store modules #:key
|
||||
(system (%current-system))
|
||||
(guile (%guile-for-build)))
|
||||
"Return a pair containing the derivation to import MODULES and that where
|
||||
MODULES are compiled."
|
||||
(cons (%imported-modules store modules #:system system #:guile guile)
|
||||
(%compiled-modules store modules #:system system #:guile guile)))
|
||||
(define key
|
||||
(list modules (derivation-file-name guile) system))
|
||||
|
||||
(or (hash-ref %module-cache key)
|
||||
(let ((result (cons (%imported-modules store modules
|
||||
#:system system #:guile guile)
|
||||
(%compiled-modules store modules
|
||||
#:system system #:guile guile))))
|
||||
(hash-set! %module-cache key result)
|
||||
result)))
|
||||
|
||||
(define* (build-expression->derivation store name exp ;deprecated
|
||||
#:key
|
||||
|
|
Reference in New Issue