Skip to content

Commit 4ef414f

Browse files
committed
fstree: add bench test to GetRange
Signed-off-by: Andrey Butusov <[email protected]>
1 parent 3c09860 commit 4ef414f

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package fstree_test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/nspcc-dev/neofs-node/pkg/core/object"
8+
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/compression"
9+
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/fstree"
10+
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func BenchmarkFSTree_GetRange(b *testing.B) {
15+
const (
16+
KB = 1024
17+
MB = 1024 * 1024
18+
)
19+
20+
testCases := []struct {
21+
from uint64
22+
length uint64
23+
objectSize int
24+
}{
25+
{from: 1 * MB, length: 4 * KB, objectSize: 10 * MB},
26+
{from: 0, length: 10 * MB, objectSize: 10 * MB},
27+
{from: 0, length: 0, objectSize: 10 * MB},
28+
{from: 0, length: 4 * KB, objectSize: 4 * KB},
29+
{from: 0, length: 0, objectSize: 4 * KB},
30+
{from: 1 * KB, length: 1 * KB, objectSize: 4 * KB},
31+
{from: 9 * MB, length: 4 * KB, objectSize: 10 * MB},
32+
}
33+
34+
for _, tc := range testCases {
35+
b.Run(fmt.Sprintf("size=%s,off=%s,len=%s",
36+
generateSizeLabel(tc.objectSize), generateSizeLabel(int(tc.from)), generateSizeLabel(int(tc.length))),
37+
func(b *testing.B) {
38+
tmpDir := b.TempDir()
39+
40+
fsTree := fstree.New(fstree.WithPath(tmpDir))
41+
42+
obj := generateTestObject(tc.objectSize)
43+
addr := object.AddressOf(obj)
44+
45+
b.Run("regular", func(b *testing.B) {
46+
require.NoError(b, fsTree.Put(addr, obj.Marshal()))
47+
b.ResetTimer()
48+
for range b.N {
49+
_, err := fsTree.GetRange(addr, tc.from, tc.length)
50+
if err != nil {
51+
b.Fatal(err)
52+
}
53+
}
54+
})
55+
56+
b.Run("compressed", func(b *testing.B) {
57+
compressConfig := &compression.Config{
58+
Enabled: true,
59+
}
60+
require.NoError(b, compressConfig.Init())
61+
require.NoError(b, fsTree.Put(addr, obj.Marshal()))
62+
63+
b.ResetTimer()
64+
for range b.N {
65+
_, err := fsTree.GetRange(addr, tc.from, tc.length)
66+
if err != nil {
67+
b.Fatal(err)
68+
}
69+
}
70+
})
71+
72+
b.Run("combined", func(b *testing.B) {
73+
const numObjects = 10
74+
75+
objMap := make(map[oid.Address][]byte, numObjects)
76+
addrs := make([]oid.Address, numObjects)
77+
for i := range numObjects {
78+
o := generateTestObject(tc.objectSize)
79+
objMap[object.AddressOf(o)] = o.Marshal()
80+
addrs[i] = object.AddressOf(o)
81+
}
82+
require.NoError(b, fsTree.PutBatch(objMap))
83+
84+
b.ResetTimer()
85+
for k := range b.N {
86+
_, err := fsTree.GetRange(addrs[k%numObjects], tc.from, tc.length)
87+
if err != nil {
88+
b.Fatal(err)
89+
}
90+
}
91+
})
92+
})
93+
}
94+
}

0 commit comments

Comments
 (0)