Skip to content

Commit d5ca37c

Browse files
committed
Fix sealing bench
1 parent b29f9b7 commit d5ca37c

File tree

4 files changed

+70
-57
lines changed

4 files changed

+70
-57
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ junit.xml
2424
/go.work*
2525
/data
2626
.immature
27+
cpu.pprof

fracmanager/sealer_test.go

Lines changed: 58 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package fracmanager
33
import (
44
"bufio"
55
"io"
6+
"math/rand"
67
"os"
78
"path/filepath"
89
"strconv"
@@ -11,112 +12,112 @@ import (
1112
"time"
1213

1314
insaneJSON "github.com/ozontech/insane-json"
15+
"github.com/pkg/profile"
1416
"github.com/stretchr/testify/assert"
1517

1618
"github.com/ozontech/seq-db/consts"
17-
"github.com/ozontech/seq-db/disk"
1819
"github.com/ozontech/seq-db/frac"
1920
"github.com/ozontech/seq-db/seq"
2021
"github.com/ozontech/seq-db/tests/common"
2122
)
2223

23-
func fillActiveFraction(active *frac.Active, wg *sync.WaitGroup) error {
24+
func fillActiveFraction(active *frac.Active) error {
2425
const muliplier = 10
2526

2627
docRoot := insaneJSON.Spawn()
2728
defer insaneJSON.Release(docRoot)
2829

29-
dp := frac.NewDocProvider()
30-
3130
file, err := os.Open(filepath.Join(common.TestDataDir, "k8s.logs"))
3231
if err != nil {
3332
return err
3433
}
3534
defer file.Close()
35+
36+
k := 0
37+
wg := sync.WaitGroup{}
38+
dp := frac.NewDocProvider()
3639
for i := 0; i < muliplier; i++ {
3740
dp.TryReset()
38-
_, err := file.Seek(0, io.SeekStart)
39-
if err != nil {
41+
42+
if _, err := file.Seek(0, io.SeekStart); err != nil {
4043
return err
4144
}
45+
4246
scanner := bufio.NewScanner(file)
4347
for scanner.Scan() {
48+
k++
4449
doc := scanner.Bytes()
45-
err := docRoot.DecodeBytes(doc)
46-
if err != nil {
50+
if err := docRoot.DecodeBytes(doc); err != nil {
4751
return err
4852
}
49-
tokens := seq.Tokens("_all_:", "service:100500", "k8s_pod:"+strconv.Itoa(i))
50-
dp.Append(doc, docRoot, seq.SimpleID(0), tokens)
53+
54+
id := seq.NewID(time.Now(), uint64(rand.Int63()))
55+
dp.Append(doc, docRoot, id, seq.Tokens(
56+
"_all_:",
57+
"service:service"+strconv.Itoa(rand.Intn(200)),
58+
"k8s_pod1:"+strconv.Itoa(k%100000),
59+
"k8s_pod2:"+strconv.Itoa(k%1000000),
60+
))
5161
}
5262
docs, metas := dp.Provide()
5363
wg.Add(1)
54-
if err := active.Append(docs, metas, wg); err != nil {
64+
if err := active.Append(docs, metas, &wg); err != nil {
5565
return err
5666
}
5767
}
5868

69+
wg.Wait()
5970
return nil
6071
}
6172

62-
func getCacheMaintainer() (*CacheMaintainer, func()) {
63-
done := make(chan struct{})
64-
cm := NewCacheMaintainer(32*consts.MB, 24*consts.MB, nil)
65-
wg := cm.RunCleanLoop(done, time.Second, time.Second)
66-
return cm, func() {
67-
close(done)
68-
wg.Wait()
73+
func defaultSealingParams() frac.SealParams {
74+
const minZstdLevel = 1
75+
return frac.SealParams{
76+
IDsZstdLevel: minZstdLevel,
77+
LIDsZstdLevel: minZstdLevel,
78+
TokenListZstdLevel: minZstdLevel,
79+
DocsPositionsZstdLevel: minZstdLevel,
80+
TokenTableZstdLevel: minZstdLevel,
81+
DocBlocksZstdLevel: minZstdLevel,
82+
DocBlockSize: 128 * consts.KB,
6983
}
7084
}
7185

72-
func BenchmarkSealing(b *testing.B) {
73-
b.ResetTimer()
74-
b.StopTimer()
75-
b.ReportAllocs()
86+
func Benchmark_SealingNoSort(b *testing.B) {
87+
runSealingBench(b, &frac.Config{SkipSortDocs: true})
88+
}
89+
90+
func Benchmark_SealingWithSort(b *testing.B) {
91+
runSealingBench(b, &frac.Config{})
92+
}
7693

77-
cm, stopFn := getCacheMaintainer()
78-
defer stopFn()
94+
func runSealingBench(b *testing.B, cfg *frac.Config) {
95+
cm := NewCacheMaintainer(consts.MB*64, consts.MB*64, nil)
96+
fp := newFractionProvider(cfg, cm, 1, 1)
97+
defer fp.Stop()
7998

8099
dataDir := filepath.Join(b.TempDir(), "BenchmarkSealing")
81100
common.RecreateDir(dataDir)
82101

83-
readLimiter := disk.NewReadLimiter(1, nil)
84-
85-
activeIndexer := frac.NewActiveIndexer(10, 10)
102+
active := fp.NewActive(filepath.Join(dataDir, "test"))
103+
err := fillActiveFraction(active)
104+
assert.NoError(b, err)
86105

87-
activeIndexer.Start()
88-
defer activeIndexer.Stop()
106+
params := defaultSealingParams()
107+
// The first sealing will sort all the LIDs, so we take this load out of the measurement range
108+
_, err = frac.Seal(active, params)
109+
assert.NoError(b, err)
89110

90-
const minZstdLevel = -5
91-
defaultSealParams := frac.SealParams{
92-
IDsZstdLevel: minZstdLevel,
93-
LIDsZstdLevel: minZstdLevel,
94-
TokenListZstdLevel: minZstdLevel,
95-
DocsPositionsZstdLevel: minZstdLevel,
96-
TokenTableZstdLevel: minZstdLevel,
97-
DocBlocksZstdLevel: minZstdLevel,
98-
DocBlockSize: consts.MB * 4,
99-
}
100-
for i := 0; i < b.N; i++ {
101-
wg := sync.WaitGroup{}
102-
active := frac.NewActive(
103-
filepath.Join(dataDir, "test_"+strconv.Itoa(i)),
104-
activeIndexer,
105-
readLimiter,
106-
cm.CreateDocBlockCache(),
107-
cm.CreateSortDocsCache(),
108-
&frac.Config{},
109-
)
110-
err := fillActiveFraction(active, &wg)
111-
assert.NoError(b, err)
111+
b.ReportAllocs()
112112

113-
wg.Wait()
114-
active.GetAllDocuments() // emulate search-pre-sorted LIDs
113+
defer profile.Start( // turn on profiling (look for the file fracmanager/cpu.pprof)
114+
profile.CPUProfile,
115+
profile.ProfilePath("."),
116+
profile.NoShutdownHook,
117+
).Stop()
115118

116-
b.StartTimer()
117-
_, err = frac.Seal(active, defaultSealParams)
119+
for b.Loop() {
120+
_, err = frac.Seal(active, params)
118121
assert.NoError(b, err)
119-
120-
b.StopTimer()
121122
}
122123
}

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@ require (
3939
github.com/beorn7/perks v1.0.1 // indirect
4040
github.com/cespare/xxhash/v2 v2.3.0 // indirect
4141
github.com/davecgh/go-spew v1.1.1 // indirect
42+
github.com/felixge/fgprof v0.9.3 // indirect
4243
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
44+
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
4345
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
4446
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
47+
github.com/pkg/profile v1.7.0 // indirect
4548
github.com/pmezard/go-difflib v1.0.0 // indirect
4649
github.com/prometheus/client_model v0.6.1 // indirect
4750
github.com/prometheus/common v0.62.0 // indirect

go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
106106
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
107107
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
108108
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
109+
github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
110+
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
109111
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
110112
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
111113
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -186,6 +188,8 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
186188
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
187189
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
188190
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
191+
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
192+
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
189193
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
190194
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
191195
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -208,6 +212,7 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
208212
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
209213
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
210214
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
215+
github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
211216
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
212217
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
213218
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -233,6 +238,8 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhM
233238
github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
234239
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
235240
github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
241+
github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA=
242+
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
236243
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
237244
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
238245
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -475,6 +482,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
475482
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
476483
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
477484
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
485+
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
478486
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
479487
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
480488
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

0 commit comments

Comments
 (0)