forked from TrueCloudLab/frostfs-node
[#1262] metabase: Add benchmarks for Put
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
f1223b46df
commit
456e1584d6
4 changed files with 99 additions and 6 deletions
|
@ -1,14 +1,81 @@
|
|||
package meta_test
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobovnicza"
|
||||
meta "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/metabase"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/util/rand"
|
||||
cidtest "github.com/nspcc-dev/neofs-sdk-go/container/id/test"
|
||||
objectSDK "github.com/nspcc-dev/neofs-sdk-go/object"
|
||||
objecttest "github.com/nspcc-dev/neofs-sdk-go/object/id/test"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/atomic"
|
||||
)
|
||||
|
||||
func prepareObjects(t testing.TB, n int) []*objectSDK.Object {
|
||||
cid := cidtest.ID()
|
||||
parentID := objecttest.ID()
|
||||
objs := make([]*objectSDK.Object, n)
|
||||
for i := range objs {
|
||||
objs[i] = generateObjectWithCID(t, cid)
|
||||
|
||||
// FKBT indices.
|
||||
attrs := make([]objectSDK.Attribute, 20)
|
||||
for j := range attrs {
|
||||
attrs[j].SetKey("abc" + strconv.FormatUint(rand.Uint64()%4, 16))
|
||||
attrs[j].SetValue("xyz" + strconv.FormatUint(rand.Uint64()%4, 16))
|
||||
}
|
||||
objs[i].SetAttributes(attrs...)
|
||||
|
||||
// List indices.
|
||||
if i%2 == 0 {
|
||||
objs[i].SetParentID(parentID)
|
||||
}
|
||||
}
|
||||
return objs
|
||||
}
|
||||
|
||||
func BenchmarkPut(b *testing.B) {
|
||||
b.Run("parallel", func(b *testing.B) {
|
||||
db := newDB(b,
|
||||
meta.WithBatchDelay(time.Millisecond*10),
|
||||
meta.WithBatchSize(runtime.NumCPU()))
|
||||
// Ensure the benchmark is bound by CPU and not waiting batch-delay time.
|
||||
b.SetParallelism(1)
|
||||
|
||||
index := atomic.NewInt64(-1)
|
||||
objs := prepareObjects(b, b.N)
|
||||
b.ResetTimer()
|
||||
b.ReportAllocs()
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
if err := meta.Put(db, objs[index.Inc()], nil); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
b.Run("sequential", func(b *testing.B) {
|
||||
db := newDB(b,
|
||||
meta.WithBatchDelay(time.Millisecond*10),
|
||||
meta.WithBatchSize(1))
|
||||
index := atomic.NewInt64(-1)
|
||||
objs := prepareObjects(b, b.N)
|
||||
b.ResetTimer()
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
if err := meta.Put(db, objs[index.Inc()], nil); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestDB_PutBlobovnicaUpdate(t *testing.T) {
|
||||
db := newDB(t)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue