Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add MultiEWMA to make Meter updates atomic #4

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

cbranch
Copy link

@cbranch cbranch commented Nov 17, 2015

Instead of having three separate EWMA instances, use a MultiEWMA that updates
all moving-average rates simultaneously using a single event counter. Locking
is not required to update the three rates.

We can remove the lock in StandardMeter with the only change in behaviour that
the (*StandardMeter).Mark function no longer increments StandardMeter.count and
MultiEWMA.uncounted atomically with respect to each other.
This only matters when ticking the meter every 5 seconds, where goroutines that
called Mark before the 5-second tick may appear to have called it after the
tick instead.
The benefit is that we avoid contention on frequently-used meters.

Instead of having three separate EWMA instances, use a MultiEWMA that updates
all moving-average rates simultaneously using a single event counter. Locking
is not required to update the three rates.

We can remove the lock in StandardMeter with the only change in behaviour that
the (*StandardMeter).Mark function no longer increments StandardMeter.count and
MultiEWMA.uncounted atomically with respect to each other.
This only matters when ticking the meter every 5 seconds, where goroutines that
called Mark before the 5-second tick may appear to have called it after the
tick instead.
The benefit is that we avoid contention on frequently-used meters.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant