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
EnabledProfilesstructure for faster hashingEncodes the enabled profile and sample types into a single integer. It replaces
SampleTypeFilterin theProfileIndexandSampleTypeFilteris now unused so it's removed. This speeds up Hash + Eq when used inside ofProfileIndexas a key in the hash map by the processing thread.Sample values are inline instead of a
Vecto unblock soonerThis replaces the
Vec<i64>of samples inSampleDatawithSampleValues. It's converted into aVecin 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
InlineVecandBitSetInlineVec<T, N>is a custom stack-allocated vector implementation that stores elements inline without heap allocation, similar to thearrayveccrate but with const fn support.BitSetis a simple stack-allocated bitset backed by an integer. This means it doesn't allocate memory and operations on it are quick and simple, notablyHashandEqare much cheaper (no iteration required).Additional Notes
Reviewer checklist