Merge pull request #11805 from bboreham/fix-benchmark-intersect
tsdb/index: fix BenchmarkIntersect to do work on each loop
This commit is contained in:
commit
fa0f04bbc6
|
@ -280,6 +280,13 @@ func TestMultiIntersect(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func consumePostings(p Postings) error {
|
||||
for p.Next() {
|
||||
p.At()
|
||||
}
|
||||
return p.Err()
|
||||
}
|
||||
|
||||
func BenchmarkIntersect(t *testing.B) {
|
||||
t.Run("LongPostings1", func(bench *testing.B) {
|
||||
var a, b, c, d []storage.SeriesRef
|
||||
|
@ -300,15 +307,14 @@ func BenchmarkIntersect(t *testing.B) {
|
|||
d = append(d, storage.SeriesRef(i))
|
||||
}
|
||||
|
||||
i1 := newListPostings(a...)
|
||||
i2 := newListPostings(b...)
|
||||
i3 := newListPostings(c...)
|
||||
i4 := newListPostings(d...)
|
||||
|
||||
bench.ResetTimer()
|
||||
bench.ReportAllocs()
|
||||
for i := 0; i < bench.N; i++ {
|
||||
if _, err := ExpandPostings(Intersect(i1, i2, i3, i4)); err != nil {
|
||||
i1 := newListPostings(a...)
|
||||
i2 := newListPostings(b...)
|
||||
i3 := newListPostings(c...)
|
||||
i4 := newListPostings(d...)
|
||||
if err := consumePostings(Intersect(i1, i2, i3, i4)); err != nil {
|
||||
bench.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -330,15 +336,14 @@ func BenchmarkIntersect(t *testing.B) {
|
|||
d = append(d, storage.SeriesRef(i))
|
||||
}
|
||||
|
||||
i1 := newListPostings(a...)
|
||||
i2 := newListPostings(b...)
|
||||
i3 := newListPostings(c...)
|
||||
i4 := newListPostings(d...)
|
||||
|
||||
bench.ResetTimer()
|
||||
bench.ReportAllocs()
|
||||
for i := 0; i < bench.N; i++ {
|
||||
if _, err := ExpandPostings(Intersect(i1, i2, i3, i4)); err != nil {
|
||||
i1 := newListPostings(a...)
|
||||
i2 := newListPostings(b...)
|
||||
i3 := newListPostings(c...)
|
||||
i4 := newListPostings(d...)
|
||||
if err := consumePostings(Intersect(i1, i2, i3, i4)); err != nil {
|
||||
bench.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -346,21 +351,29 @@ func BenchmarkIntersect(t *testing.B) {
|
|||
|
||||
// Many matchers(k >> n).
|
||||
t.Run("ManyPostings", func(bench *testing.B) {
|
||||
var its []Postings
|
||||
var lps []*ListPostings
|
||||
var refs [][]storage.SeriesRef
|
||||
|
||||
// 100000 matchers(k=100000).
|
||||
// Create 100000 matchers(k=100000), making sure all memory allocation is done before starting the loop.
|
||||
for i := 0; i < 100000; i++ {
|
||||
var temp []storage.SeriesRef
|
||||
for j := storage.SeriesRef(1); j < 100; j++ {
|
||||
temp = append(temp, j)
|
||||
}
|
||||
its = append(its, newListPostings(temp...))
|
||||
lps = append(lps, newListPostings(temp...))
|
||||
refs = append(refs, temp)
|
||||
}
|
||||
|
||||
its := make([]Postings, len(refs))
|
||||
bench.ResetTimer()
|
||||
bench.ReportAllocs()
|
||||
for i := 0; i < bench.N; i++ {
|
||||
if _, err := ExpandPostings(Intersect(its...)); err != nil {
|
||||
// Reset the ListPostings to their original values each time round the loop.
|
||||
for j := range refs {
|
||||
lps[j].list = refs[j]
|
||||
its[j] = lps[j]
|
||||
}
|
||||
if err := consumePostings(Intersect(its...)); err != nil {
|
||||
bench.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue