mirror of
https://github.com/prometheus/prometheus
synced 2025-04-09 19:12:34 +00:00
[PERF] Remote-write: re-use memory to read WAL data (#16197)
The `:=` causes new variables to be created, which means the outer slice stays at nil, and new memory is allocated every time round the loop. Extracted from https://github.com/prometheus/prometheus/pull/16182 Credit to @bwplotka. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
parent
53be282396
commit
30d04792ca
@ -491,12 +491,13 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
|
|||||||
metadata []record.RefMetadata
|
metadata []record.RefMetadata
|
||||||
)
|
)
|
||||||
for r.Next() && !isClosed(w.quit) {
|
for r.Next() && !isClosed(w.quit) {
|
||||||
|
var err error
|
||||||
rec := r.Record()
|
rec := r.Record()
|
||||||
w.recordsReadMetric.WithLabelValues(dec.Type(rec).String()).Inc()
|
w.recordsReadMetric.WithLabelValues(dec.Type(rec).String()).Inc()
|
||||||
|
|
||||||
switch dec.Type(rec) {
|
switch dec.Type(rec) {
|
||||||
case record.Series:
|
case record.Series:
|
||||||
series, err := dec.Series(rec, series[:0])
|
series, err = dec.Series(rec, series[:0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.recordDecodeFailsMetric.Inc()
|
w.recordDecodeFailsMetric.Inc()
|
||||||
return err
|
return err
|
||||||
@ -509,7 +510,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
|
|||||||
if !tail {
|
if !tail {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
samples, err := dec.Samples(rec, samples[:0])
|
samples, err = dec.Samples(rec, samples[:0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.recordDecodeFailsMetric.Inc()
|
w.recordDecodeFailsMetric.Inc()
|
||||||
return err
|
return err
|
||||||
@ -539,7 +540,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
|
|||||||
if !tail {
|
if !tail {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
exemplars, err := dec.Exemplars(rec, exemplars[:0])
|
exemplars, err = dec.Exemplars(rec, exemplars[:0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.recordDecodeFailsMetric.Inc()
|
w.recordDecodeFailsMetric.Inc()
|
||||||
return err
|
return err
|
||||||
@ -554,7 +555,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
|
|||||||
if !tail {
|
if !tail {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
histograms, err := dec.HistogramSamples(rec, histograms[:0])
|
histograms, err = dec.HistogramSamples(rec, histograms[:0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.recordDecodeFailsMetric.Inc()
|
w.recordDecodeFailsMetric.Inc()
|
||||||
return err
|
return err
|
||||||
@ -582,7 +583,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
|
|||||||
if !tail {
|
if !tail {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
floatHistograms, err := dec.FloatHistogramSamples(rec, floatHistograms[:0])
|
floatHistograms, err = dec.FloatHistogramSamples(rec, floatHistograms[:0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.recordDecodeFailsMetric.Inc()
|
w.recordDecodeFailsMetric.Inc()
|
||||||
return err
|
return err
|
||||||
@ -606,12 +607,12 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
|
|||||||
if !w.sendMetadata {
|
if !w.sendMetadata {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
meta, err := dec.Metadata(rec, metadata[:0])
|
metadata, err = dec.Metadata(rec, metadata[:0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.recordDecodeFailsMetric.Inc()
|
w.recordDecodeFailsMetric.Inc()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w.writer.StoreMetadata(meta)
|
w.writer.StoreMetadata(metadata)
|
||||||
|
|
||||||
case record.Unknown:
|
case record.Unknown:
|
||||||
// Could be corruption, or reading from a WAL from a newer Prometheus.
|
// Could be corruption, or reading from a WAL from a newer Prometheus.
|
||||||
|
Loading…
Reference in New Issue
Block a user