@@ -27,6 +27,11 @@ func (r *rander) randValue(datasize int) []byte {
27
27
return buf
28
28
}
29
29
30
+ func (r * rander ) selectKey (keys []string ) string {
31
+ i := rand .Int () % len (keys )
32
+ return keys [i ]
33
+ }
34
+
30
35
func BenchmarkSerializeNode (b * testing.B ) {
31
36
r := rander {rand .New (rand .NewSource (1234 ))}
32
37
@@ -87,42 +92,42 @@ func init() {
87
92
datasize : 3 ,
88
93
keysize : 26 ,
89
94
},
90
- hamtParams {
91
- id : "market.PendingProposals" ,
92
- count : 40713 ,
93
- datasize : 151 ,
94
- keysize : 38 ,
95
- },
96
- hamtParams {
97
- id : "market.EscrowWTable" ,
98
- count : 2113 ,
99
- datasize : 7 ,
100
- keysize : 4 ,
101
- },
102
- hamtParams {
103
- id : "market.LockedTable" ,
104
- count : 2098 ,
105
- datasize : 4 ,
106
- keysize : 4 ,
107
- },
108
- hamtParams {
109
- id : "market.DealOpsByEpoch" ,
110
- count : 16558 ,
111
- datasize : 43 ,
112
- keysize : 3 ,
113
- },
114
- hamtParams {
115
- id : "power.CronEventQueue" ,
116
- count : 60 ,
117
- datasize : 43 ,
118
- keysize : 3 ,
119
- },
120
- hamtParams {
121
- id : "power.CLaims" ,
122
- count : 15610 ,
123
- datasize : 5 ,
124
- keysize : 3 ,
125
- },
95
+ // hamtParams{
96
+ // id: "market.PendingProposals",
97
+ // count: 40713,
98
+ // datasize: 151,
99
+ // keysize: 38,
100
+ // },
101
+ // hamtParams{
102
+ // id: "market.EscrowWTable",
103
+ // count: 2113,
104
+ // datasize: 7,
105
+ // keysize: 4,
106
+ // },
107
+ // hamtParams{
108
+ // id: "market.LockedTable",
109
+ // count: 2098,
110
+ // datasize: 4,
111
+ // keysize: 4,
112
+ // },
113
+ // hamtParams{
114
+ // id: "market.DealOpsByEpoch",
115
+ // count: 16558,
116
+ // datasize: 43,
117
+ // keysize: 3,
118
+ // },
119
+ // hamtParams{
120
+ // id: "power.CronEventQueue",
121
+ // count: 60,
122
+ // datasize: 43,
123
+ // keysize: 3,
124
+ // },
125
+ // hamtParams{
126
+ // id: "power.CLaims",
127
+ // count: 15610,
128
+ // datasize: 5,
129
+ // keysize: 3,
130
+ // },
126
131
}
127
132
128
133
// bucketsize-aka-arraywidth? maybe someday.
@@ -305,21 +310,83 @@ func doBenchmarkEntriesCount(num int, bitWidth int, datasize int, keysize int) f
305
310
}
306
311
307
312
runtime .GC ()
308
- blockstore .stats = blockstoreStats {}
309
313
b .ResetTimer ()
310
314
b .ReportAllocs ()
311
315
312
316
for i := 0 ; i < b .N ; i ++ {
313
- nd , err := LoadNode (context .TODO (), cs , c , UseTreeBitWidth (bitWidth ))
314
- if err != nil {
315
- b .Fatal (err )
317
+ blockstore .stats = blockstoreStats {}
318
+ for j := 0 ; j < 1000 ; j ++ {
319
+ nd , err := LoadNode (context .TODO (), cs , c , UseTreeBitWidth (bitWidth ))
320
+ if err != nil {
321
+ b .Fatal (err )
322
+ }
323
+ if err = nd .Find (context .TODO (), r .selectKey (keys ), nil ); err != nil {
324
+ b .Fatal (err )
325
+ }
316
326
}
327
+ b .StopTimer ()
328
+ b .ReportMetric (float64 (blockstore .stats .evtcntGet )/ float64 (1000 ), "getEvts/find" )
329
+ b .ReportMetric (float64 (blockstore .stats .evtcntPut )/ float64 (1000 ), "putEvts/find" ) // surely this is zero, but for completeness.
330
+ b .StartTimer ()
331
+ }
332
+ }
333
+ }
317
334
318
- if err = nd .Find (context .TODO (), keys [i % num ], nil ); err != nil {
335
+ func BenchmarkReset (b * testing.B ) {
336
+ for _ , t := range caseTable {
337
+ b .Run (fmt .Sprintf ("%s" , t .id ),
338
+ doBenchmarkResetSuite (t .count , t .bitwidth , t .datasize , t .keysize ))
339
+ }
340
+ }
341
+
342
+ func doBenchmarkResetSuite (num int , bitWidth int , datasize int , keysize int ) func (b * testing.B ) {
343
+ r := rander {rand .New (rand .NewSource (int64 (num )))}
344
+ return func (b * testing.B ) {
345
+ blockstore := newMockBlocks ()
346
+ cs := cbor .NewCborStore (blockstore )
347
+ n := NewNode (cs , UseTreeBitWidth (bitWidth ))
348
+
349
+ var keys []string
350
+ for i := 0 ; i < num ; i ++ {
351
+ k := r .randString (keysize )
352
+ if err := n .Set (context .TODO (), k , r .randValue (datasize )); err != nil {
319
353
b .Fatal (err )
320
354
}
355
+ keys = append (keys , k )
356
+ }
357
+
358
+ if err := n .Flush (context .TODO ()); err != nil {
359
+ b .Fatal (err )
360
+ }
361
+
362
+ c , err := cs .Put (context .TODO (), n )
363
+ if err != nil {
364
+ b .Fatal (err )
365
+ }
366
+
367
+ runtime .GC ()
368
+ b .ResetTimer ()
369
+ b .ReportAllocs ()
370
+
371
+ for i := 0 ; i < b .N ; i ++ {
372
+ blockstore .stats = blockstoreStats {}
373
+ for j := 0 ; j < 1000 ; j ++ {
374
+ nd , err := LoadNode (context .TODO (), cs , c , UseTreeBitWidth (bitWidth ))
375
+ if err != nil {
376
+ b .Fatal (err )
377
+ }
378
+ if err := nd .Set (context .Background (), r .selectKey (keys ), r .randValue (datasize )); err != nil {
379
+ b .Fatal (err )
380
+ }
381
+ if err := nd .Flush (context .Background ()); err != nil {
382
+ b .Fatal (err )
383
+ }
384
+ }
385
+ b .StopTimer ()
386
+ b .ReportMetric (float64 (blockstore .stats .evtcntGet )/ 1000 , "getEvts/set" )
387
+ b .ReportMetric (float64 (blockstore .stats .evtcntPut )/ 1000 , "putEvts/set" )
388
+ b .ReportMetric (float64 (blockstore .stats .bytesPut )/ 1000 , "bytesPut/set" )
389
+ b .StartTimer ()
321
390
}
322
- b .ReportMetric (float64 (blockstore .stats .evtcntGet )/ float64 (b .N ), "getEvts/find" )
323
- b .ReportMetric (float64 (blockstore .stats .evtcntPut )/ float64 (b .N ), "putEvts/find" ) // surely this is zero, but for completeness.
324
391
}
325
392
}
0 commit comments