@@ -27,6 +27,11 @@ func (r *rander) randValue(datasize int) []byte {
2727 return buf
2828}
2929
30+ func (r * rander ) selectKey (keys []string ) string {
31+ i := rand .Int () % len (keys )
32+ return keys [i ]
33+ }
34+
3035func BenchmarkSerializeNode (b * testing.B ) {
3136 r := rander {rand .New (rand .NewSource (1234 ))}
3237
@@ -87,42 +92,42 @@ func init() {
8792 datasize : 3 ,
8893 keysize : 26 ,
8994 },
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+ // },
126131 }
127132
128133 // bucketsize-aka-arraywidth? maybe someday.
@@ -305,21 +310,83 @@ func doBenchmarkEntriesCount(num int, bitWidth int, datasize int, keysize int) f
305310 }
306311
307312 runtime .GC ()
308- blockstore .stats = blockstoreStats {}
309313 b .ResetTimer ()
310314 b .ReportAllocs ()
311315
312316 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+ }
316326 }
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+ }
317334
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 {
319353 b .Fatal (err )
320354 }
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 ()
321390 }
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.
324391 }
325392}
0 commit comments