perf(prof): sample filtering and hashing #3416
Draft
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.
PROF-12543
Key Changes
New
EnabledProfiles
structure for faster hashingEncodes the enabled profile and sample types into a single integer. It replaces
SampleTypeFilter
in theProfileIndex
andSampleTypeFilter
is now unused so it's removed. This speeds up Hash + Eq when used inside ofProfileIndex
as a key in the hash map by the processing thread.Sample values are inline instead of a
Vec
to unblock soonerThis replaces the
Vec<i64>
of samples inSampleData
withSampleValues
. It's converted into aVec
in the other thread. This offloads the CPU and memory work to the processing thread, which unblocks the thread taking the sample sooner.New data structures
InlineVec
andBitSet
InlineVec<T, N>
is a custom stack-allocated vector implementation that stores elements inline without heap allocation, similar to thearrayvec
crate but with const fn support.BitSet
is a simple stack-allocated bitset backed by an integer. This means it doesn't allocate memory and operations on it are quick and simple, notablyHash
andEq
are much cheaper (no iteration required).Additional Notes
Reviewer checklist