From b232968bb45953cb5af14c5b66f3a873a85be040 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 4 Mar 2024 17:43:49 +0200 Subject: [PATCH] lib/streamaggr: reduce the number of pointers at "total" aggregation state This should reduce load on GC when scanning heap objects. --- lib/streamaggr/total.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/streamaggr/total.go b/lib/streamaggr/total.go index 78f8bd36f..307b082f2 100644 --- a/lib/streamaggr/total.go +++ b/lib/streamaggr/total.go @@ -34,7 +34,7 @@ type totalAggrState struct { type totalStateValue struct { mu sync.Mutex - lastValues map[string]*lastValueState + lastValues map[string]lastValueState total float64 deleteDeadline uint64 deleted bool @@ -74,7 +74,7 @@ func (as *totalAggrState) pushSamples(samples []pushSample) { if !ok { // The entry is missing in the map. Try creating it. v = &totalStateValue{ - lastValues: make(map[string]*lastValueState), + lastValues: make(map[string]lastValueState), } vNew, loaded := as.m.LoadOrStore(outputKey, v) if loaded { @@ -87,10 +87,6 @@ func (as *totalAggrState) pushSamples(samples []pushSample) { deleted := sv.deleted if !deleted { lv, ok := sv.lastValues[inputKey] - if !ok { - lv = &lastValueState{} - sv.lastValues[inputKey] = lv - } if ok || keepFirstSample { if s.value >= lv.value { sv.total += s.value - lv.value @@ -101,6 +97,7 @@ func (as *totalAggrState) pushSamples(samples []pushSample) { } lv.value = s.value lv.deleteDeadline = deleteDeadline + sv.lastValues[inputKey] = lv sv.deleteDeadline = deleteDeadline } sv.mu.Unlock()