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  }