(b *testing.B)
| 2655 | } |
| 2656 | |
| 2657 | func BenchmarkQueryIterator(b *testing.B) { |
| 2658 | cases := []struct { |
| 2659 | numBlocks int |
| 2660 | numSeries int |
| 2661 | numSamplesPerSeriesPerBlock int |
| 2662 | overlapPercentages []int // >=0, <=100, this is w.r.t. the previous block. |
| 2663 | }{ |
| 2664 | { |
| 2665 | numBlocks: 20, |
| 2666 | numSeries: 1000, |
| 2667 | numSamplesPerSeriesPerBlock: 20000, |
| 2668 | overlapPercentages: []int{0, 10, 30}, |
| 2669 | }, |
| 2670 | } |
| 2671 | |
| 2672 | for _, c := range cases { |
| 2673 | for _, overlapPercentage := range c.overlapPercentages { |
| 2674 | benchMsg := fmt.Sprintf("nBlocks=%d,nSeries=%d,numSamplesPerSeriesPerBlock=%d,overlap=%d%%", |
| 2675 | c.numBlocks, c.numSeries, c.numSamplesPerSeriesPerBlock, overlapPercentage) |
| 2676 | |
| 2677 | b.Run(benchMsg, func(b *testing.B) { |
| 2678 | dir := b.TempDir() |
| 2679 | |
| 2680 | var ( |
| 2681 | blocks []*Block |
| 2682 | overlapDelta = int64(overlapPercentage * c.numSamplesPerSeriesPerBlock / 100) |
| 2683 | prefilledLabels []map[string]string |
| 2684 | generatedSeries []storage.Series |
| 2685 | ) |
| 2686 | for i := int64(0); i < int64(c.numBlocks); i++ { |
| 2687 | offset := i * overlapDelta |
| 2688 | mint := i*int64(c.numSamplesPerSeriesPerBlock) - offset |
| 2689 | maxt := mint + int64(c.numSamplesPerSeriesPerBlock) - 1 |
| 2690 | if len(prefilledLabels) == 0 { |
| 2691 | generatedSeries = genSeries(c.numSeries, 10, mint, maxt) |
| 2692 | for _, s := range generatedSeries { |
| 2693 | prefilledLabels = append(prefilledLabels, s.Labels().Map()) |
| 2694 | } |
| 2695 | } else { |
| 2696 | generatedSeries = populateSeries(prefilledLabels, mint, maxt) |
| 2697 | } |
| 2698 | block, err := OpenBlock(nil, createBlock(b, dir, generatedSeries), nil, nil) |
| 2699 | require.NoError(b, err) |
| 2700 | blocks = append(blocks, block) |
| 2701 | defer block.Close() |
| 2702 | } |
| 2703 | |
| 2704 | qblocks := make([]storage.Querier, 0, len(blocks)) |
| 2705 | for _, blk := range blocks { |
| 2706 | q, err := NewBlockQuerier(blk, math.MinInt64, math.MaxInt64) |
| 2707 | require.NoError(b, err) |
| 2708 | qblocks = append(qblocks, q) |
| 2709 | } |
| 2710 | |
| 2711 | sq := storage.NewMergeQuerier(qblocks, nil, storage.ChainedSeriesMerge) |
| 2712 | defer sq.Close() |
| 2713 | |
| 2714 | benchQuery(b, c.numSeries, sq, labels.Selector{labels.MustNewMatcher(labels.MatchRegexp, "__name__", ".*")}) |
nothing calls this directly
no test coverage detected
searching dependent graphs…