[TESTS] Faster WAL Benchmarks by reusing buffer

Less garbage collection.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
Bryan Boreham 2025-04-16 17:55:45 +01:00
parent b4d3c06acb
commit 848df13d3a

View File

@ -149,24 +149,29 @@ func BenchmarkHeadAppender_Append_Commit_ExistingSeries(b *testing.B) {
}
}
func populateTestWL(t testing.TB, w *wlog.WL, recs []interface{}) {
func populateTestWL(t testing.TB, w *wlog.WL, recs []interface{}, buf []byte) []byte {
var enc record.Encoder
for _, r := range recs {
buf = buf[:0]
switch v := r.(type) {
case []record.RefSeries:
require.NoError(t, w.Log(enc.Series(v, nil)))
buf = enc.Series(v, buf)
case []record.RefSample:
require.NoError(t, w.Log(enc.Samples(v, nil)))
buf = enc.Samples(v, buf)
case []tombstones.Stone:
require.NoError(t, w.Log(enc.Tombstones(v, nil)))
buf = enc.Tombstones(v, buf)
case []record.RefExemplar:
require.NoError(t, w.Log(enc.Exemplars(v, nil)))
buf = enc.Exemplars(v, buf)
case []record.RefMmapMarker:
require.NoError(t, w.Log(enc.MmapMarkers(v, nil)))
buf = enc.MmapMarkers(v, buf)
case []record.RefMetadata:
require.NoError(t, w.Log(enc.Metadata(v, nil)))
buf = enc.Metadata(v, buf)
default:
continue
}
require.NoError(t, w.Log(buf))
}
return buf
}
func readTestWAL(t testing.TB, dir string) (recs []interface{}) {
@ -309,6 +314,7 @@ func BenchmarkLoadWLs(b *testing.B) {
// Write series.
refSeries := make([]record.RefSeries, 0, c.seriesPerBatch)
var buf []byte
for k := 0; k < c.batches; k++ {
refSeries = refSeries[:0]
for i := k * c.seriesPerBatch; i < (k+1)*c.seriesPerBatch; i++ {
@ -333,7 +339,7 @@ func BenchmarkLoadWLs(b *testing.B) {
writeSeries = newWriteSeries
}
populateTestWL(b, wal, []interface{}{writeSeries})
buf = populateTestWL(b, wal, []interface{}{writeSeries}, buf)
}
// Write samples.
@ -359,7 +365,7 @@ func BenchmarkLoadWLs(b *testing.B) {
V: float64(i) * 100,
})
}
populateTestWL(b, wal, []interface{}{refSamples})
buf = populateTestWL(b, wal, []interface{}{refSamples}, buf)
}
}
@ -398,7 +404,7 @@ func BenchmarkLoadWLs(b *testing.B) {
Labels: labels.FromStrings("trace_id", fmt.Sprintf("trace-%d", i)),
})
}
populateTestWL(b, wal, []interface{}{refExemplars})
buf = populateTestWL(b, wal, []interface{}{refExemplars}, buf)
}
}
@ -427,10 +433,10 @@ func BenchmarkLoadWLs(b *testing.B) {
})
}
if shouldAddMarkers {
populateTestWL(b, wbl, []interface{}{refMarkers})
populateTestWL(b, wbl, []interface{}{refMarkers}, buf)
}
populateTestWL(b, wal, []interface{}{refSamples})
populateTestWL(b, wbl, []interface{}{refSamples})
buf = populateTestWL(b, wal, []interface{}{refSamples}, buf)
buf = populateTestWL(b, wbl, []interface{}{refSamples}, buf)
}
}
@ -739,7 +745,7 @@ func TestHead_ReadWAL(t *testing.T) {
require.NoError(t, head.Close())
}()
populateTestWL(t, w, entries)
populateTestWL(t, w, entries, nil)
require.NoError(t, head.Init(math.MinInt64))
require.Equal(t, uint64(101), head.lastSeriesID.Load())
@ -1383,7 +1389,7 @@ func TestHeadDeleteSeriesWithoutSamples(t *testing.T) {
require.NoError(t, head.Close())
}()
populateTestWL(t, w, entries)
populateTestWL(t, w, entries, nil)
require.NoError(t, head.Init(math.MinInt64))