cache head block eligibility for fork choice #6076
Merged
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.
When there are long periods of non-finality,
nodeIsViableForHead
has been observed to consume significant time as it repeatedly walks the non-finalized check graph as part of determining what heads are eligible for fork choice. Caching the result resolves that.Overall, it may still be better to prune fork choice more aggressively when finality advances, to fully avoid the case specced out using the linear scan. The current implementation is very close to spec, though, so such a change should not be introduced without thorough testing.
The simple cache should allow significantly better performance on Goerli while the network is still supported (Mid April).