From da29c09dca55bb255e3df6027b958e4bbe386dfc Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Fri, 26 Jan 2018 11:01:59 +0000 Subject: [PATCH] Some benchmarks for the mergeSeries set. --- storage/buffer_test.go | 11 ++++++++ storage/fanout_test.go | 62 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/storage/buffer_test.go b/storage/buffer_test.go index a03081ab6..2a1b87248 100644 --- a/storage/buffer_test.go +++ b/storage/buffer_test.go @@ -201,6 +201,17 @@ type mockSeries struct { iterator func() SeriesIterator } +func newMockSeries(lset labels.Labels, samples []sample) Series { + return &mockSeries{ + labels: func() labels.Labels { + return lset + }, + iterator: func() SeriesIterator { + return newListSeriesIterator(samples) + }, + } +} + func (m *mockSeries) Labels() labels.Labels { return m.labels() } func (m *mockSeries) Iterator() SeriesIterator { return m.iterator() } diff --git a/storage/fanout_test.go b/storage/fanout_test.go index c8094ea33..4e3f5b329 100644 --- a/storage/fanout_test.go +++ b/storage/fanout_test.go @@ -14,6 +14,7 @@ package storage import ( + "fmt" "testing" "github.com/stretchr/testify/require" @@ -218,13 +219,58 @@ func (m *mockSeriesSet) Err() error { return nil } -func newMockSeries(lset labels.Labels, samples []sample) Series { - return &mockSeries{ - labels: func() labels.Labels { - return lset - }, - iterator: func() SeriesIterator { - return newListSeriesIterator(samples) - }, +var result []sample + +func makeSeriesSet(numSeries, numSamples int) SeriesSet { + series := []Series{} + for j := 0; j < numSeries; j++ { + labels := labels.Labels{{Name: "foo", Value: fmt.Sprintf("bar%d", j)}} + samples := []sample{} + for k := 0; k < numSamples; k++ { + samples = append(samples, sample{t: int64(k), v: float64(k)}) + } + series = append(series, newMockSeries(labels, samples)) + } + return newMockSeriesSet(series...) +} + +func makeMergeSeriesSet(numSeriesSets, numSeries, numSamples int) SeriesSet { + seriesSets := []SeriesSet{} + for i := 0; i < numSeriesSets; i++ { + seriesSets = append(seriesSets, makeSeriesSet(numSeries, numSamples)) + } + return NewMergeSeriesSet(seriesSets) +} + +func benchmarkDrain(seriesSet SeriesSet, b *testing.B) { + for n := 0; n < b.N; n++ { + for seriesSet.Next() { + result = drainSamples(seriesSet.At().Iterator()) + } } } + +func BenchmarkNoMergeSeriesSet_100_100(b *testing.B) { + seriesSet := makeSeriesSet(100, 100) + benchmarkDrain(seriesSet, b) +} + +func BenchmarkMergeSeriesSet_1_100_100(b *testing.B) { + seriesSet := makeMergeSeriesSet(1, 100, 100) + benchmarkDrain(seriesSet, b) +} + +func BenchmarkMergeSeriesSet_10_100_100(b *testing.B) { + seriesSet := makeMergeSeriesSet(10, 100, 100) + benchmarkDrain(seriesSet, b) +} + +func BenchmarkMergeSeriesSet_100_100_100(b *testing.B) { + seriesSet := makeMergeSeriesSet(100, 100, 100) + benchmarkDrain(seriesSet, b) +} + +func BenchmarkMergeSeriesSet_1000_100_100(b *testing.B) { + seriesSet := makeMergeSeriesSet(100, 100, 100) + benchmarkDrain(seriesSet, b) +}