pilorama: optimize create op #447
1 changed files with 55 additions and 0 deletions
55
pkg/local_object_storage/pilorama/bench_test.go
Normal file
55
pkg/local_object_storage/pilorama/bench_test.go
Normal file
|
@ -0,0 +1,55 @@
|
|||
package pilorama
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
|
||||
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func getTimestamp(reorder int, ts Timestamp) Timestamp {
|
||||
base := ts / Timestamp(reorder)
|
||||
rem := ts % Timestamp(reorder)
|
||||
return base*Timestamp(reorder) + Timestamp(reorder) - rem
|
||||
}
|
||||
|
||||
func BenchmarkCreate(b *testing.B) {
|
||||
// Use `os.TempDir` because we construct multiple times in the same test.
|
||||
tmpDir, err := os.MkdirTemp(os.TempDir(), "*")
|
||||
require.NoError(b, err)
|
||||
|
||||
f := NewBoltForest(
|
||||
WithPath(filepath.Join(tmpDir, "test.db")),
|
||||
WithMaxBatchSize(runtime.GOMAXPROCS(0)))
|
||||
require.NoError(b, f.Open(false))
|
||||
require.NoError(b, f.Init())
|
||||
b.Cleanup(func() {
|
||||
require.NoError(b, f.Close())
|
||||
require.NoError(b, os.RemoveAll(tmpDir))
|
||||
})
|
||||
|
||||
cid := cidtest.ID()
|
||||
treeID := "tree"
|
||||
ctx := context.Background()
|
||||
var index atomic.Int32
|
||||
index.Store(-1)
|
||||
b.SetParallelism(2)
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
i := index.Add(1)
|
||||
op := &Move{
|
||||
Meta: Meta{Time: getTimestamp(runtime.GOMAXPROCS(0)*2, Timestamp(i+1))},
|
||||
Child: Node(i + 1),
|
||||
Parent: RootID,
|
||||
}
|
||||
if err := f.TreeApply(ctx, cid, treeID, op, true); err != nil {
|
||||
b.FailNow()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
Loading…
Reference in a new issue