store: 'run-with-store' preserves the functional object cache.
This increases the hit rate of the object cache from 56% to 85% when running something like 'guix build libreoffice -nd'. * guix/store.scm (set-store-connection-object-cache!): New procedure. (run-with-store): Copy 'object-cache' field of the new store into the original one.
This commit is contained in:
parent
e85a7b7f8c
commit
dd0ee954c4
|
@ -1783,6 +1783,9 @@ the store."
|
||||||
;; when using 'gexp->derivation' and co.
|
;; when using 'gexp->derivation' and co.
|
||||||
(make-parameter #f))
|
(make-parameter #f))
|
||||||
|
|
||||||
|
(define set-store-connection-object-cache!
|
||||||
|
(record-modifier <store-connection> 'object-cache))
|
||||||
|
|
||||||
(define* (run-with-store store mval
|
(define* (run-with-store store mval
|
||||||
#:key
|
#:key
|
||||||
(guile-for-build (%guile-for-build))
|
(guile-for-build (%guile-for-build))
|
||||||
|
@ -1798,9 +1801,12 @@ connection, and return the result."
|
||||||
(%current-target-system target))
|
(%current-target-system target))
|
||||||
(call-with-values (lambda ()
|
(call-with-values (lambda ()
|
||||||
(run-with-state mval store))
|
(run-with-state mval store))
|
||||||
(lambda (result store)
|
(lambda (result new-store)
|
||||||
;; Discard the state.
|
;; Copy the object cache from NEW-STORE so we don't fully discard the
|
||||||
result))))
|
;; state.
|
||||||
|
(let ((cache (store-connection-object-cache new-store)))
|
||||||
|
(set-store-connection-object-cache! store cache)
|
||||||
|
result)))))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
|
Loading…
Reference in New Issue