From e96bd0284c3e65a4aeaeb0324aa1d4eebd816f1e Mon Sep 17 00:00:00 2001 From: Nedyalko Andreev Date: Wed, 11 Dec 2024 17:09:02 +0200 Subject: [PATCH 1/3] fix(ci): transform TestChunkSize into a benchmark --- pkg/chunkenc/memchunk_test.go | 45 ++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/pkg/chunkenc/memchunk_test.go b/pkg/chunkenc/memchunk_test.go index c8795fa190bba..2daaec3c3491b 100644 --- a/pkg/chunkenc/memchunk_test.go +++ b/pkg/chunkenc/memchunk_test.go @@ -677,31 +677,44 @@ func TestMemChunk_AppendOutOfOrder(t *testing.T) { } } -func TestChunkSize(t *testing.T) { +func BenchmarkEncodingsAndChunkSize(b *testing.B) { type res struct { name string + count uint64 size uint64 compressedSize uint64 ratio float64 } var result []res - for _, bs := range testBlockSizes { - for _, f := range allPossibleFormats { - for _, enc := range testEncodings { - name := fmt.Sprintf("%s_%s", enc.String(), humanize.Bytes(uint64(bs))) - t.Run(name, func(t *testing.T) { - c := newMemChunkWithFormat(f.chunkFormat, enc, f.headBlockFmt, bs, testTargetSize) - inserted := fillChunk(c) - b, err := c.Bytes() - if err != nil { - t.Fatal(err) + + resBuffer := make([]byte, 0, 50*1024*1024) + for _, enc := range testEncodings { + for _, bs := range testBlockSizes { + for fi, f := range allPossibleFormats { + name := fmt.Sprintf("%s_block_size_%s_format_%d", enc.String(), humanize.Bytes(uint64(bs)), fi) + b.Run(name, func(b *testing.B) { + var insertedTotal, compressedTotal, count uint64 + for range b.N { + c := newMemChunkWithFormat(f.chunkFormat, enc, f.headBlockFmt, bs, testTargetSize) + inserted := fillChunk(c) + insertedTotal += uint64(inserted) + cb, err := c.BytesWith(resBuffer) + if err != nil { + b.Fatal(err) + } + compressedTotal += uint64(len(cb)) + count++ } + + averageRatio := float64(insertedTotal) / float64(compressedTotal) result = append(result, res{ name: name, - size: uint64(inserted), - compressedSize: uint64(len(b)), - ratio: float64(inserted) / float64(len(b)), + count: count, + size: uint64(insertedTotal), + compressedSize: uint64(compressedTotal), + ratio: averageRatio, }) + b.ReportMetric(averageRatio, "compression_ratio") }) } } @@ -709,9 +722,9 @@ func TestChunkSize(t *testing.T) { sort.Slice(result, func(i, j int) bool { return result[i].ratio > result[j].ratio }) - fmt.Printf("%s\t%s\t%s\t%s\n", "name", "uncompressed", "compressed", "ratio") + fmt.Printf("%s\t%s\t%s\t%s\t%s\n", "name", "count", "uncompressed", "compressed", "ratio") for _, r := range result { - fmt.Printf("%s\t%s\t%s\t%f\n", r.name, humanize.Bytes(r.size), humanize.Bytes(r.compressedSize), r.ratio) + fmt.Printf("%s\t(count %d)\n%s\t%s\t%f\n", r.name, r.count, humanize.Bytes(r.size/r.count), humanize.Bytes(r.compressedSize/r.count), r.ratio) } } From da740d67a4682956ce6a3236fafa87964c91d8f3 Mon Sep 17 00:00:00 2001 From: Nedyalko Andreev Date: Wed, 11 Dec 2024 17:34:47 +0200 Subject: [PATCH 2/3] fix: linter issues --- pkg/chunkenc/memchunk_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/chunkenc/memchunk_test.go b/pkg/chunkenc/memchunk_test.go index 2daaec3c3491b..f12e6deeb4abd 100644 --- a/pkg/chunkenc/memchunk_test.go +++ b/pkg/chunkenc/memchunk_test.go @@ -710,8 +710,8 @@ func BenchmarkEncodingsAndChunkSize(b *testing.B) { result = append(result, res{ name: name, count: count, - size: uint64(insertedTotal), - compressedSize: uint64(compressedTotal), + size: insertedTotal, + compressedSize: compressedTotal, ratio: averageRatio, }) b.ReportMetric(averageRatio, "compression_ratio") From c8e68497b22ee5ffd4e25fdf0f3c690593cebd8c Mon Sep 17 00:00:00 2001 From: Nedyalko Andreev Date: Thu, 12 Dec 2024 18:51:13 +0200 Subject: [PATCH 3/3] Address PR review feedback --- pkg/chunkenc/memchunk_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/chunkenc/memchunk_test.go b/pkg/chunkenc/memchunk_test.go index f12e6deeb4abd..86a07d10a2222 100644 --- a/pkg/chunkenc/memchunk_test.go +++ b/pkg/chunkenc/memchunk_test.go @@ -715,6 +715,8 @@ func BenchmarkEncodingsAndChunkSize(b *testing.B) { ratio: averageRatio, }) b.ReportMetric(averageRatio, "compression_ratio") + b.ReportMetric(float64(insertedTotal)/float64(count*1024), "avg_size_kb") + b.ReportMetric(float64(compressedTotal)/float64(count*1024), "avg_compressed_size_kb") }) } }