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.
|
||||
(make-parameter #f))
|
||||
|
||||
(define set-store-connection-object-cache!
|
||||
(record-modifier <store-connection> 'object-cache))
|
||||
|
||||
(define* (run-with-store store mval
|
||||
#:key
|
||||
(guile-for-build (%guile-for-build))
|
||||
|
@ -1798,9 +1801,12 @@ connection, and return the result."
|
|||
(%current-target-system target))
|
||||
(call-with-values (lambda ()
|
||||
(run-with-state mval store))
|
||||
(lambda (result store)
|
||||
;; Discard the state.
|
||||
result))))
|
||||
(lambda (result new-store)
|
||||
;; Copy the object cache from NEW-STORE so we don't fully discard the
|
||||
;; state.
|
||||
(let ((cache (store-connection-object-cache new-store)))
|
||||
(set-store-connection-object-cache! store cache)
|
||||
result)))))
|
||||
|
||||
|
||||
;;;
|
||||
|
|
Loading…
Reference in New Issue