Skip to content
This repository was archived by the owner on Apr 2, 2024. It is now read-only.

Commit 51b6326

Browse files
committed
Add benchmark to test varying ingestion load
Signed-off-by: Arunprasad Rajkumar <[email protected]>
1 parent 2922338 commit 51b6326

File tree

2 files changed

+68
-21
lines changed

2 files changed

+68
-21
lines changed

pkg/tests/end_to_end_tests/metric_ingest_bench_test.go

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -79,25 +79,65 @@ func BenchmarkMetricIngest(b *testing.B) {
7979
}
8080

8181
func BenchmarkNewSeriesIngestion(b *testing.B) {
82-
seriesGen, err := testsupport.NewSeriesGenerator(10, 100, 4)
83-
require.NoError(b, err)
84-
85-
ts := seriesGen.GetTimeseries()
82+
benchmarks := []struct {
83+
name string
84+
numMetrics int
85+
numSeriesPerMetric int
86+
numLabelsPerMetric int
87+
batchSize int
88+
}{
89+
{
90+
name: "small series",
91+
numMetrics: 100,
92+
numSeriesPerMetric: 10,
93+
numLabelsPerMetric: 4,
94+
batchSize: 100,
95+
},
96+
{
97+
name: "medium series",
98+
numMetrics: 100,
99+
numSeriesPerMetric: 100,
100+
numLabelsPerMetric: 4,
101+
batchSize: 1000,
102+
},
103+
{
104+
name: "large series",
105+
numMetrics: 100,
106+
numSeriesPerMetric: 500,
107+
numLabelsPerMetric: 4,
108+
batchSize: 10000,
109+
},
110+
}
86111

87-
withDB(b, "bench_e2e_new_series_ingest", func(db *pgxpool.Pool, t testing.TB) {
88-
metricsIngestor, err := ingestor.NewPgxIngestorForTests(pgxconn.NewPgxConn(db), &ingestor.Cfg{
89-
NumCopiers: 8,
90-
InvertedLabelsCacheSize: cache.DefaultConfig.InvertedLabelsCacheSize,
112+
for _, benchmark := range benchmarks {
113+
benchName := fmt.Sprintf("%s metrics %d seriesPerMetric %d labels %d batchSize %d", benchmark.name, benchmark.numMetrics, benchmark.numSeriesPerMetric, benchmark.numLabelsPerMetric, benchmark.batchSize)
114+
b.Run(benchName, func(b *testing.B) {
115+
seriesGen, err := testsupport.NewSeriesGenerator(benchmark.numMetrics, benchmark.numSeriesPerMetric, benchmark.numLabelsPerMetric)
116+
require.NoError(b, err)
117+
118+
ts := seriesGen.GetTimeseriesInBatch(benchmark.batchSize)
119+
120+
for i := 0; i < b.N; i++ {
121+
withDB(b, "bench_e2e_new_series_ingest", func(db *pgxpool.Pool, t testing.TB) {
122+
metricsIngestor, err := ingestor.NewPgxIngestorForTests(pgxconn.NewPgxConn(db), &ingestor.Cfg{
123+
NumCopiers: 8,
124+
InvertedLabelsCacheSize: cache.DefaultConfig.InvertedLabelsCacheSize,
125+
})
126+
require.NoError(b, err)
127+
defer metricsIngestor.Close()
128+
129+
b.ReportAllocs()
130+
b.ResetTimer()
131+
for _, t := range ts {
132+
_, _, _ = metricsIngestor.Ingest(context.Background(), &prompb.WriteRequest{Timeseries: t})
133+
}
134+
b.StopTimer()
135+
136+
numSeries := 0
137+
require.NoError(b, db.QueryRow(context.Background(), "SELECT count(*) FROM _prom_catalog.series").Scan(&numSeries))
138+
require.Equal(b, benchmark.numMetrics*benchmark.numSeriesPerMetric, numSeries)
139+
})
140+
}
91141
})
92-
require.NoError(b, err)
93-
defer metricsIngestor.Close()
94-
95-
b.ResetTimer()
96-
b.ReportAllocs()
97-
_, _, _ = metricsIngestor.Ingest(context.Background(), &prompb.WriteRequest{Timeseries: ts})
98-
99-
numSeries := 0
100-
require.NoError(b, db.QueryRow(context.Background(), "SELECT count(*) FROM _prom_catalog.series").Scan(&numSeries))
101-
require.Equal(b, 1000, numSeries)
102-
})
142+
}
103143
}

pkg/tests/testsupport/series_gen.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,15 @@ func NewSeriesGenerator(numMetrics, numSeriesPerMetric, labels int) (*seriesGen,
5959
return &seriesGen{ts}, nil
6060
}
6161

62-
func (s *seriesGen) GetTimeseries() []prompb.TimeSeries {
63-
return s.ts
62+
func (s *seriesGen) GetTimeseriesInBatch(batchSize int) [][]prompb.TimeSeries {
63+
ts := s.ts
64+
batches := make([][]prompb.TimeSeries, 0, (len(ts)+batchSize-1)/batchSize)
65+
66+
for batchSize < len(ts) {
67+
ts, batches = ts[batchSize:], append(batches, ts[0:batchSize:batchSize])
68+
}
69+
batches = append(batches, ts)
70+
return batches
6471
}
6572

6673
func randomText(prefix string) string {

0 commit comments

Comments
 (0)