Repository navigation
Skip range clamp searches until an edge block of the range is set - #925
Draft
danielAsaboro wants to merge 1 commit into
Draft
danielAsaboro wants to merge 1 commit into
danielAsaboro wants to merge 1 commit into
Conversation
This branch has not been deployed
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
_updateNonPrimaryre-clamps up to 64 pending ranges on every data message, and eachclampRangemakes two native calls (bitfield.firstUnsetandbitfield.lastUnset). Almost all of them return the position they were given, because the blocks at the edges of the range are still missing. A bounded range can only shrink once the block atstartor atend - 1is set, so this reads those two bits first and skips the searches otherwise. When both edge bits are unset, the searches returnstartandend - 1, so the result is the same as before.Numbers, Node 24, macOS arm64, main and this branch interleaved, CPU time of the process (the machine was loaded, so wall time was too noisy). Workloads:
sparse= writer with every 64th block cleared, reader downloads the 63-block ranges in between;files= 8-block downloads in a scattered order;download= one full download.In the sparse profile on main, quickbit-native was 17.2% of samples, almost all from
clampRange; with this change it's 1.9%.Full suite passes on Node (457/457); Bare isn't installed here, so it wasn't run.