From f5fca9a82cec76d2e10b8b6c96be2dd79f638ba0 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 27 Oct 2019 19:12:11 +0100 Subject: gexp: Cache the module to derivation mappings. This reduces the number of 'add-data-to-store' cache lookups from 3329 to 2743 (hit rate: 27% to 11%) when running: GUIX_PROFILING=add-data-to-store-cache guix build libreoffice -nd Execution time of "guix build libreoffice -nd" goes from 1.86s to 1.80s. * guix/gexp.scm (imported+compiled-modules): Wrap body in 'mcached'. --- guix/gexp.scm | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) (limited to 'guix') diff --git a/guix/gexp.scm b/guix/gexp.scm index fa74e80cd6..b640c079e4 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -660,21 +660,24 @@ names and file names suitable for the #:allowed-references argument to (module-path %load-path)) "Return a pair where the first element is the imported MODULES and the second element is the derivation to compile them." - (mlet %store-monad ((modules (if (pair? modules) - (imported-modules modules - #:system system - #:module-path module-path) - (return #f))) - (compiled (if (pair? modules) - (compiled-modules modules - #:system system - #:module-path module-path - #:extensions extensions - #:guile guile - #:deprecation-warnings - deprecation-warnings) - (return #f)))) - (return (cons modules compiled)))) + (mcached equal? + (mlet %store-monad ((modules (if (pair? modules) + (imported-modules modules + #:system system + #:module-path module-path) + (return #f))) + (compiled (if (pair? modules) + (compiled-modules modules + #:system system + #:module-path module-path + #:extensions extensions + #:guile guile + #:deprecation-warnings + deprecation-warnings) + (return #f)))) + (return (cons modules compiled))) + modules + system extensions guile deprecation-warnings module-path)) (define* (lower-gexp exp #:key -- cgit v1.2.3