Skip to content

Commit

Permalink
add different sizes to codec benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
walldiss committed Jan 5, 2024
1 parent ec71e12 commit 74ab0b9
Showing 1 changed file with 57 additions and 42 deletions.
99 changes: 57 additions & 42 deletions share/store/codec_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package store

import (
"fmt"
"testing"

"github.com/klauspost/reedsolomon"
Expand All @@ -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
}

0 comments on commit 74ab0b9

Please sign in to comment.