mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-15 16:30:55 +01:00
d739511f5b
Callers of OpenStorage() log the returned error and exit. The error logging and exit can be performed inside MustOpenStorage() alongside with printing the stack trace for better debuggability. This simplifies the code at caller side.
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"sync/atomic"
|
|
"testing"
|
|
)
|
|
|
|
func BenchmarkStorageAddRows(b *testing.B) {
|
|
for _, rowsPerBatch := range []int{1, 10, 100, 1000} {
|
|
b.Run(fmt.Sprintf("rowsPerBatch_%d", rowsPerBatch), func(b *testing.B) {
|
|
benchmarkStorageAddRows(b, rowsPerBatch)
|
|
})
|
|
}
|
|
}
|
|
|
|
func benchmarkStorageAddRows(b *testing.B, rowsPerBatch int) {
|
|
path := fmt.Sprintf("BenchmarkStorageAddRows_%d", rowsPerBatch)
|
|
s := MustOpenStorage(path, 0, 0, 0)
|
|
defer func() {
|
|
s.MustClose()
|
|
if err := os.RemoveAll(path); err != nil {
|
|
b.Fatalf("cannot remove storage at %q: %s", path, err)
|
|
}
|
|
}()
|
|
|
|
var globalOffset uint64
|
|
|
|
b.SetBytes(int64(rowsPerBatch))
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
mrs := make([]MetricRow, rowsPerBatch)
|
|
var mn MetricName
|
|
mn.MetricGroup = []byte("rps")
|
|
mn.Tags = []Tag{
|
|
{[]byte("job"), []byte("webservice")},
|
|
{[]byte("instance"), []byte("1.2.3.4")},
|
|
}
|
|
for pb.Next() {
|
|
offset := int(atomic.AddUint64(&globalOffset, uint64(rowsPerBatch)))
|
|
for i := 0; i < rowsPerBatch; i++ {
|
|
mn.AccountID = uint32(i)
|
|
mn.ProjectID = uint32(i % 3)
|
|
mr := &mrs[i]
|
|
mr.MetricNameRaw = mn.marshalRaw(mr.MetricNameRaw[:0])
|
|
mr.Timestamp = int64(offset + i)
|
|
mr.Value = float64(offset + i)
|
|
}
|
|
if err := s.AddRows(mrs, defaultPrecisionBits); err != nil {
|
|
panic(fmt.Errorf("cannot add rows to storage: %w", err))
|
|
}
|
|
}
|
|
})
|
|
b.StopTimer()
|
|
}
|