github.com/prysmaticlabs/prysm@v1.4.4/slasher/db/kv/benchmark_test.go (about) 1 package kv 2 3 import ( 4 "context" 5 "testing" 6 7 types "github.com/prysmaticlabs/eth2-types" 8 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 9 "github.com/prysmaticlabs/prysm/shared/testutil/require" 10 slashertypes "github.com/prysmaticlabs/prysm/slasher/detection/attestations/types" 11 ) 12 13 const ( 14 benchmarkValidator = 300000 15 ) 16 17 func BenchmarkStore_SaveEpochSpans(b *testing.B) { 18 ctx := context.Background() 19 sigBytes := [2]byte{} 20 db := setupDB(b) 21 es := &slashertypes.EpochStore{} 22 23 es, err := es.SetValidatorSpan(benchmarkValidator, slashertypes.Span{MinSpan: 1, MaxSpan: 2, SigBytes: sigBytes, HasAttested: true}) 24 assert.NoError(b, err) 25 for i := 0; i < benchmarkValidator; i++ { 26 es, err = es.SetValidatorSpan(uint64(i), slashertypes.Span{MinSpan: 1, MaxSpan: 2, SigBytes: sigBytes, HasAttested: true}) 27 assert.NoError(b, err) 28 } 29 b.ReportAllocs() 30 b.ResetTimer() 31 for i := 0; i < b.N; i++ { 32 err := db.SaveEpochSpans(ctx, types.Epoch(i%54000), es, false) 33 require.NoError(b, err, "Save validator span map failed") 34 } 35 } 36 37 func BenchmarkStore_EpochSpans(b *testing.B) { 38 db := setupDB(b) 39 ctx := context.Background() 40 sigBytes := [2]byte{} 41 es := &slashertypes.EpochStore{} 42 es, err := es.SetValidatorSpan(benchmarkValidator, slashertypes.Span{MinSpan: 1, MaxSpan: 2, SigBytes: sigBytes, HasAttested: true}) 43 assert.NoError(b, err) 44 for i := 0; i < benchmarkValidator; i++ { 45 es, err = es.SetValidatorSpan(uint64(i), slashertypes.Span{MinSpan: 1, MaxSpan: 2, SigBytes: sigBytes, HasAttested: true}) 46 assert.NoError(b, err) 47 } 48 b.Log(len(es.Bytes())) 49 for i := 0; i < 200; i++ { 50 err := db.SaveEpochSpans(ctx, types.Epoch(i), es, false) 51 require.NoError(b, err, "Save validator span map failed") 52 } 53 b.Log(db.db.Info()) 54 b.ReportAllocs() 55 b.ResetTimer() 56 for i := 0; i < b.N; i++ { 57 _, err := db.EpochSpans(ctx, types.Epoch(i%200), false) 58 require.NoError(b, err, "Read validator span map failed") 59 } 60 } 61 62 func BenchmarkStore_GetValidatorSpan(b *testing.B) { 63 sigBytes := [2]byte{} 64 es := &slashertypes.EpochStore{} 65 es, err := es.SetValidatorSpan(benchmarkValidator, slashertypes.Span{MinSpan: 1, MaxSpan: 2, SigBytes: sigBytes, HasAttested: true}) 66 assert.NoError(b, err) 67 for i := 0; i < benchmarkValidator; i++ { 68 es, err = es.SetValidatorSpan(uint64(i), slashertypes.Span{MinSpan: uint16(i), MaxSpan: uint16(benchmarkValidator - i), SigBytes: sigBytes, HasAttested: true}) 69 assert.NoError(b, err) 70 } 71 b.Log(len(es.Bytes())) 72 73 b.ReportAllocs() 74 b.ResetTimer() 75 for i := 0; i < b.N; i++ { 76 _, err := es.GetValidatorSpan(uint64(i % benchmarkValidator)) 77 require.NoError(b, err, "Read validator span map failed") 78 } 79 } 80 81 func BenchmarkStore_SetValidatorSpan(b *testing.B) { 82 sigBytes := [2]byte{} 83 var err error 84 es := &slashertypes.EpochStore{} 85 es, err = es.SetValidatorSpan(benchmarkValidator, slashertypes.Span{MinSpan: 1, MaxSpan: 2, SigBytes: sigBytes, HasAttested: true}) 86 assert.NoError(b, err) 87 88 for i := 0; i < benchmarkValidator; i++ { 89 es, err = es.SetValidatorSpan(uint64(i), slashertypes.Span{MinSpan: uint16(i), MaxSpan: uint16(benchmarkValidator - i), SigBytes: sigBytes, HasAttested: true}) 90 assert.NoError(b, err) 91 } 92 b.Log(len(es.Bytes())) 93 b.ReportAllocs() 94 b.ResetTimer() 95 for i := 0; i < b.N; i++ { 96 es, err = es.SetValidatorSpan(uint64(i%benchmarkValidator), slashertypes.Span{MinSpan: uint16(i), MaxSpan: uint16(benchmarkValidator - i), SigBytes: sigBytes, HasAttested: true}) 97 require.NoError(b, err, "Read validator span map failed") 98 } 99 }