Speed-up metric maintenance for component method calls. #440
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.
Removed the use of expvar in Metrics implementation. We are mostly doing this so that we can drop the promise that Service Weaver metrics are reflected in expvars. That frees us to speed things up by using a better representation.
Introduced an atomicFloat64 value so we can atomically add a float64. (This functionality was previously provided by expvar.)
Atomic storage for all metrics (though used just for counters) is now split into a float64 and a uint64. Integer increments are applied to the uint64 so we can avoid a more expensive compare-and-swap. The stored values are added together on a read. Doubles counter metric increment speed (from ~9.2ns to ~4.1ns).
Add a fast-path for histogram updates for small values by avoiding binary search.
Add a fast-path for histogram updates of zero by avoiding an atomic add.