[#447] pilorama: Add benchmark for create ops

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
pull/474/head
Evgenii Stratonikov 2023-04-26 14:23:33 +03:00 committed by Evgenii Stratonikov
parent 72fedff7ad
commit dd3874eff1
1 changed files with 55 additions and 0 deletions

View 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()
}
}
})
}