VictoriaMetrics/lib/storage/inmemory_part_timing_test.go

54 lines
1.2 KiB
Go

package storage
import (
"math/rand"
"testing"
)
func BenchmarkInmemoryPartInitFromRowsWorstCase(b *testing.B) {
benchmarkInmemoryPartInitFromRows(b, benchRawRowsWorstCase)
}
func BenchmarkInmemoryPartInitFromRowsBestCase(b *testing.B) {
benchmarkInmemoryPartInitFromRows(b, benchRawRowsBestCase)
}
func benchmarkInmemoryPartInitFromRows(b *testing.B, rows []rawRow) {
b.ReportAllocs()
b.SetBytes(int64(len(rows)))
b.RunParallel(func(pb *testing.PB) {
var mp inmemoryPart
for pb.Next() {
mp.InitFromRows(rows)
}
})
}
// Each row belongs to an unique TSID
var benchRawRowsWorstCase = func() []rawRow {
rng := rand.New(rand.NewSource(1))
var rows []rawRow
var r rawRow
for i := 0; i < 1e5; i++ {
r.TSID.MetricID = uint64(i)
r.Timestamp = rng.Int63()
r.Value = rng.NormFloat64()
r.PrecisionBits = uint8(i%64) + 1
rows = append(rows, r)
}
return rows
}()
// All the rows belong to a single TSID, values are zeros, timestamps
// are delimited by const delta.
var benchRawRowsBestCase = func() []rawRow {
var rows []rawRow
var r rawRow
r.PrecisionBits = defaultPrecisionBits
for i := 0; i < 1e5; i++ {
r.Timestamp += 30e3
rows = append(rows, r)
}
return rows
}()