Lazily initialize exponential histogram buckets #5023
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.
Exponential histograms separately track bucket counts in the negative and positive range. Currently, histograms are not permitted to record negative measurements, yet we allocate memory to negative buckets anyway. The exponential histogram aggregation logic works with negative measurements in anticipation of them being permitted in the future, but even when they are permitted, many instruments will only record positive values.
This PR adjusts the exponential histogram aggregation to lazily instantiate both positive and negative buckets.
Here are the results of the
HistogramCollectBenchmark
before:And after:
Edit
Was comparing
gc.alloc.rate
when I should be comparinggc.alloc.rate.norm
. Comparing the bytes allocated for second doesn't account for a speed increase in the number of operations per second, which may increase the allocation rate.gc.alloc.rate.norm
improves from 38_305_473 B/op to 31_767_908 B/op (~17% reduction) for delta temporality, and 38_807_947 B/op to 32_196_094 B/op (~17%) for cumulative temporality.