Do lockless last minute latency metrics (#17576)

Collect metrics in one second and accumulate lockless before sending upstream.
This commit is contained in:
Klaus Post
2023-07-05 10:40:45 -07:00
committed by GitHub
parent 0bc34952eb
commit 6efcf9c982
2 changed files with 41 additions and 22 deletions

View File

@@ -90,16 +90,6 @@ func (a *AccElem) add(dur time.Duration) {
a.N++
}
// Add a duration to a single element.
func (a *AccElem) addSize(dur time.Duration, sz int64) {
if dur < 0 {
dur = 0
}
a.Total += int64(dur)
a.Size += sz
a.N++
}
// Merge b into a.
func (a *AccElem) merge(b AccElem) {
a.N += b.N
@@ -156,11 +146,10 @@ func (l *lastMinuteLatency) add(t time.Duration) {
}
// Add a new duration data
func (l *lastMinuteLatency) addSize(t time.Duration, sz int64) {
sec := time.Now().Unix()
func (l *lastMinuteLatency) addAll(sec int64, a AccElem) {
l.forwardTo(sec)
winIdx := sec % 60
l.Totals[winIdx].addSize(t, sz)
l.Totals[winIdx].merge(a)
l.LastSec = sec
}