Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR was originally opened against the
snapshot-5
branch over at @karalabe as karalabe#27 . That PR contains some graphs from running it.Background:
When we execute block
n
, we execute transactions serially.After tx 1, we call
Finalize
, which puts the address for each pending object intopending
.Similarly, we for each of those, we call
obj.Finalize
, which does a similar thing for each modifiedslot
.Idea
So, during finalize, we also send each
addr
off onto a channel (non-blocking). And on that channel, there's a littleprecacher-thread which loads it from the trie and warms up the cache.
So the snapshotter allows us to parallelize the trie-reads instead of doing it serially. At the end of the block, when we finally reach the update-phase, the trie caches will be prepopulated already, and the update will be quick.