From 74ab0b9d1dc63a4918202c35779df087b4063cfd Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 5 Jan 2024 16:23:28 +0700 Subject: [PATCH] add different sizes to codec benchmark --- share/store/codec_test.go | 99 ++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 42 deletions(-) diff --git a/share/store/codec_test.go b/share/store/codec_test.go index b223fa9e22..a13fba156d 100644 --- a/share/store/codec_test.go +++ b/share/store/codec_test.go @@ -1,6 +1,7 @@ package store import ( + "fmt" "testing" "github.com/klauspost/reedsolomon" @@ -10,59 +11,73 @@ import ( ) func BenchmarkCodec(b *testing.B) { - size := 128 + minSize, maxSize := 32, 128 - shards := make([][]byte, size) - original := sharetest.RandShares(b, size/2) - copy(shards, original) + for size := minSize; size <= maxSize; size *= 2 { + // BenchmarkCodec/Leopard/size:32-10 409194 2793 ns/op + // BenchmarkCodec/Leopard/size:64-10 190969 6170 ns/op + // BenchmarkCodec/Leopard/size:128-10 82821 14287 ns/op + b.Run(fmt.Sprintf("Leopard/size:%v", size), func(b *testing.B) { + enc, err := reedsolomon.New(size/2, size/2, reedsolomon.WithLeopardGF(true)) + require.NoError(b, err) - // BenchmarkLeoCodec/Leopard-10 81866 14611 ns/op - b.Run("Leopard", func(b *testing.B) { - enc, err := reedsolomon.New(size/2, size/2, reedsolomon.WithLeopardGF(true)) - require.NoError(b, err) + shards := newShards(b, size, true) - // fill with parity empty shares - for j := len(original); j < len(shards); j++ { - shards[j] = make([]byte, len(original[0])) - } + b.ResetTimer() + for i := 0; i < b.N; i++ { + err = enc.Encode(shards) + require.NoError(b, err) + } + }) - for i := 0; i < b.N; i++ { - err = enc.Encode(shards) + // BenchmarkCodec/default/size:32-10 222153 5364 ns/op + // BenchmarkCodec/default/size:64-10 58831 20349 ns/op + // BenchmarkCodec/default/size:128-10 14940 80471 ns/op + b.Run(fmt.Sprintf("default/size:%v", size), func(b *testing.B) { + enc, err := reedsolomon.New(size/2, size/2, reedsolomon.WithLeopardGF(false)) require.NoError(b, err) - } - }) - // BenchmarkLeoCodec/Leopard-10 81646 14641 ns/op - b.Run("default", func(b *testing.B) { - enc, err := reedsolomon.New(size/2, size/2, reedsolomon.WithLeopardGF(false)) - require.NoError(b, err) + shards := newShards(b, size, true) - // fill with parity empty shares - for j := len(original); j < len(shards); j++ { - shards[j] = make([]byte, len(original[0])) - } + b.ResetTimer() + for i := 0; i < b.N; i++ { + err = enc.Encode(shards) + require.NoError(b, err) + } + }) - b.ResetTimer() - for i := 0; i < b.N; i++ { - err = enc.Encode(shards) + // BenchmarkCodec/default-reconstructSome/size:32-10 1263585 954.4 ns/op + // BenchmarkCodec/default-reconstructSome/size:64-10 762273 1554 ns/op + // BenchmarkCodec/default-reconstructSome/size:128-10 429268 2974 ns/op + b.Run(fmt.Sprintf("default-reconstructSome/size:%v", size), func(b *testing.B) { + enc, err := reedsolomon.New(size/2, size/2, reedsolomon.WithLeopardGF(false)) require.NoError(b, err) - } - }) - // BenchmarkLeoCodec/default,_reconstructSome-10 407635 2728 ns/op - b.Run("default, reconstructSome", func(b *testing.B) { - enc, err := reedsolomon.New(size/2, size/2, reedsolomon.WithLeopardGF(false)) - require.NoError(b, err) + shards := newShards(b, size, false) + targets := make([]bool, size) + target := size - 2 + targets[target] = true - targets := make([]bool, size) - target := size - 2 - targets[target] = true + b.ResetTimer() + for i := 0; i < b.N; i++ { + err = enc.ReconstructSome(shards, targets) + require.NoError(b, err) + shards[target] = nil + } + }) + } +} - b.ResetTimer() - for i := 0; i < b.N; i++ { - err = enc.ReconstructSome(shards, targets) - require.NoError(b, err) - shards[target] = nil +func newShards(b require.TestingT, size int, fillParity bool) [][]byte { + shards := make([][]byte, size) + original := sharetest.RandShares(b, size/2) + copy(shards, original) + + if fillParity { + // fill with parity empty shares + for j := len(original); j < len(shards); j++ { + shards[j] = make([]byte, len(original[0])) } - }) + } + return shards }