-
Notifications
You must be signed in to change notification settings - Fork 220
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(swingset): stop using a persistent kernel bundle
Previously, the kernel sources were bundled during `initializeSwingset()`, and stored in the kvStore portion of the swingstore kernelDB. It was read from that DB each time makeSwingsetController() launched the application process. That ensured the kernel behavior would remain consistent (and deterministic) even if the user's source tree changed. Using a persistent kernel bundle also speeds up application launch: we save about 1.8s by not re-running `bundleSource` on each launch. Once upon a time I thought this consistency was important/useful, but now I see that it causes more problems than it's worth. In particular, upgrading a chain requires an awkward "rekernelize" action to replace the kernel bundle in the database. And we believe we can reclaim about 1.0s per launch by moving to a not-yet-written `importLocation()` Endo tool that loads module graphs from disk without serializing the archive in the middle. This patch changes swingset to stop using a persistent kernel bundle. Each application launch (i.e. `makeSwingsetController()` call) re-bundles the kernel sources just before importing that bundle, so that updated source trees are automatically picked up without additional API calls or rekernelize steps. The bundle is no longer stored in the kvStore. The other bundles (vats, devices, xsnap helpers) are still created during `initializeSwingset` and stored in the DB, since these become part of the deterministic history of each vat (#4376 and #5703 will inform changes to how those bundles are managed). Only the kernel bundle has become non-persistent. Bundling is slow enough that many unit tests pre-bundle both the kernel and the sources of built-in vats, devices, and xsnap helper bundles. This provides a considerable speedup for tests that build (or launch) multiple kernels within a single test file. These `kernelBundles` are passed into `initializationOptions`, which then bypassed the swingset-bundles-it-for-you code. This saves a minute or two when running the full swingset test suite. Unit tests can still use `initializationOptions` to amortize bundling costs for the non-kernel bundles. `runtimeOptions` now accepts a `kernelBundle` member to amortize bundling the kernel itself. Tests which use this trick and also use `makeSwingsetController()` need to be updated (else they'll run 1.8s slower). All such tests were inside `packages/SwingSet/test/` and have been updated, which would otherwise cause the test suite to run about 50-60s slower. The other agoric-sdk packages that do swingset-style tests are mostly using the deprecated `buildVatController()`, whose options continue to accept both kinds of bundles, and do not need changes. closes #5679
- Loading branch information
Showing
11 changed files
with
123 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.