Improve efficiency of the scan for dirty nodes #941
+228
−72
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 applies some performance improvement on the scan for dirty nodes during flush operations. The main change is to track the dirty-state of nodes using atomic operations to facilitate checking for dirty nodes without the need of acquiring node-access permissions.
This reduces the time it takes to search for dirty nodes by more than 60%:
Notes for Reviewers
By introducing atomic operations on the
clean
flag in thenodeBase
assignment operations on the node level like the one done in theForest
implementation (e.g.*write.Get().(*AccountNode) = *node
) introduce a race condition since the reset of theclean
flag is not atomic in this case. Thus, a newReset
function needed to be introduced, performing theclean
flag reset using an atomic operation.