mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-20 23:46:23 +01:00
d6da68ee90
This scheme was used for reducing memory usage when vmagent runs on a machine with big number of CPU cores and the ingestion rate isn't too big. The scheme with channel-based pool could reduce memory usage, since it minimizes the number of PushCtx structs in the pool in this case. Performance tests didn't reveal significant difference in memory usage under both low and high ingestion rate between plain sync.Pool and the current hybrid scheme, so replace the scheme with plain sync.Pool in order to simplify the code.
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package common
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel"
|
|
)
|
|
|
|
// PushCtx is a context used for populating WriteRequest.
|
|
type PushCtx struct {
|
|
// WriteRequest contains the WriteRequest, which must be pushed later to remote storage.
|
|
//
|
|
// The actual labels and samples for the time series are stored in Labels and Samples fields.
|
|
WriteRequest prompbmarshal.WriteRequest
|
|
|
|
// Labels contains flat list of all the labels used in WriteRequest.
|
|
Labels []prompbmarshal.Label
|
|
|
|
// Samples contains flat list of all the samples used in WriteRequest.
|
|
Samples []prompbmarshal.Sample
|
|
}
|
|
|
|
// Reset resets ctx.
|
|
func (ctx *PushCtx) Reset() {
|
|
ctx.WriteRequest.Reset()
|
|
|
|
promrelabel.CleanLabels(ctx.Labels)
|
|
ctx.Labels = ctx.Labels[:0]
|
|
|
|
ctx.Samples = ctx.Samples[:0]
|
|
}
|
|
|
|
// GetPushCtx returns PushCtx from pool.
|
|
//
|
|
// Call PutPushCtx when the ctx is no longer needed.
|
|
func GetPushCtx() *PushCtx {
|
|
if v := pushCtxPool.Get(); v != nil {
|
|
return v.(*PushCtx)
|
|
}
|
|
return &PushCtx{}
|
|
}
|
|
|
|
// PutPushCtx returns ctx to the pool.
|
|
//
|
|
// ctx mustn't be used after returning to the pool.
|
|
func PutPushCtx(ctx *PushCtx) {
|
|
ctx.Reset()
|
|
pushCtxPool.Put(ctx)
|
|
}
|
|
|
|
var pushCtxPool sync.Pool
|