Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add skipCreateStateCacheIfAvailable #4319

Merged
merged 1 commit into from Jul 18, 2022
Merged

Conversation

dapplion
Copy link
Contributor

Motivation

anchorState may already by a CachedBeaconState. If so, don't create the cache again, since deserializing all pubkeys takes ~30 seconds for 350k keys (mainnet 2022Q2). When the BeaconStateCache is created in eth1 genesis builder it may be incorrect. Until we can ensure that it's safe to re-use ANY BeaconStateCache, this option is disabled by default and only used in tests.

Description

  • use skipCreateStateCacheIfAvailable in perf test for sync

@dapplion dapplion requested a review from a team as a code owner July 17, 2022 19:38
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: f66ff08 Previous: 3239eb2 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.8942 ms/op 1.5147 ms/op 1.25
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 70.358 us/op 62.432 us/op 1.13
BLS verify - blst-native 2.3525 ms/op 2.1644 ms/op 1.09
BLS verifyMultipleSignatures 3 - blst-native 4.9594 ms/op 4.4661 ms/op 1.11
BLS verifyMultipleSignatures 8 - blst-native 10.375 ms/op 9.6598 ms/op 1.07
BLS verifyMultipleSignatures 32 - blst-native 38.937 ms/op 35.116 ms/op 1.11
BLS aggregatePubkeys 32 - blst-native 52.915 us/op 46.809 us/op 1.13
BLS aggregatePubkeys 128 - blst-native 200.56 us/op 182.78 us/op 1.10
getAttestationsForBlock 45.702 ms/op 39.228 ms/op 1.17
isKnown best case - 1 super set check 466.00 ns/op 470.00 ns/op 0.99
isKnown normal case - 2 super set checks 441.00 ns/op 463.00 ns/op 0.95
isKnown worse case - 16 super set checks 444.00 ns/op 455.00 ns/op 0.98
CheckpointStateCache - add get delete 12.010 us/op 10.639 us/op 1.13
validate gossip signedAggregateAndProof - struct 5.4835 ms/op 5.0264 ms/op 1.09
validate gossip attestation - struct 2.6112 ms/op 2.3704 ms/op 1.10
altair verifyImport mainnet_s3766816:31 13.649 s/op 12.468 s/op 1.09
pickEth1Vote - no votes 2.1745 ms/op 1.9804 ms/op 1.10
pickEth1Vote - max votes 20.242 ms/op 19.720 ms/op 1.03
pickEth1Vote - Eth1Data hashTreeRoot value x2048 12.578 ms/op 12.595 ms/op 1.00
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 20.767 ms/op 20.079 ms/op 1.03
pickEth1Vote - Eth1Data fastSerialize value x2048 1.5822 ms/op 1.4245 ms/op 1.11
pickEth1Vote - Eth1Data fastSerialize tree x2048 14.998 ms/op 14.049 ms/op 1.07
bytes32 toHexString 1.1150 us/op 972.00 ns/op 1.15
bytes32 Buffer.toString(hex) 707.00 ns/op 769.00 ns/op 0.92
bytes32 Buffer.toString(hex) from Uint8Array 991.00 ns/op 1.0160 us/op 0.98
bytes32 Buffer.toString(hex) + 0x 718.00 ns/op 763.00 ns/op 0.94
Object access 1 prop 0.36200 ns/op 0.35700 ns/op 1.01
Map access 1 prop 0.30200 ns/op 0.30800 ns/op 0.98
Object get x1000 14.770 ns/op 11.787 ns/op 1.25
Map get x1000 0.98900 ns/op 1.0650 ns/op 0.93
Object set x1000 103.60 ns/op 72.481 ns/op 1.43
Map set x1000 71.561 ns/op 48.429 ns/op 1.48
Return object 10000 times 0.37800 ns/op 0.43240 ns/op 0.87
Throw Error 10000 times 6.3986 us/op 6.2300 us/op 1.03
enrSubnets - fastDeserialize 64 bits 2.9780 us/op 2.6560 us/op 1.12
enrSubnets - ssz BitVector 64 bits 779.00 ns/op 804.00 ns/op 0.97
enrSubnets - fastDeserialize 4 bits 408.00 ns/op 413.00 ns/op 0.99
enrSubnets - ssz BitVector 4 bits 752.00 ns/op 809.00 ns/op 0.93
prioritizePeers score -10:0 att 32-0.1 sync 2-0 98.013 us/op 83.024 us/op 1.18
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 135.96 us/op 125.46 us/op 1.08
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 239.75 us/op 204.56 us/op 1.17
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 535.62 us/op 336.21 us/op 1.59
prioritizePeers score 0:0 att 64-1 sync 4-1 583.80 us/op 406.82 us/op 1.44
RateTracker 1000000 limit, 1 obj count per request 182.60 ns/op 187.39 ns/op 0.97
RateTracker 1000000 limit, 2 obj count per request 135.29 ns/op 136.56 ns/op 0.99
RateTracker 1000000 limit, 4 obj count per request 115.18 ns/op 111.78 ns/op 1.03
RateTracker 1000000 limit, 8 obj count per request 102.52 ns/op 98.853 ns/op 1.04
RateTracker with prune 4.6510 us/op 3.9980 us/op 1.16
array of 16000 items push then shift 4.9527 us/op 51.564 us/op 0.10
LinkedList of 16000 items push then shift 17.735 ns/op 14.880 ns/op 1.19
array of 16000 items push then pop 225.16 ns/op 213.58 ns/op 1.05
LinkedList of 16000 items push then pop 16.270 ns/op 13.784 ns/op 1.18
array of 24000 items push then shift 6.9885 us/op 77.320 us/op 0.09
LinkedList of 24000 items push then shift 17.753 ns/op 17.353 ns/op 1.02
array of 24000 items push then pop 197.57 ns/op 182.57 ns/op 1.08
LinkedList of 24000 items push then pop 15.950 ns/op 14.620 ns/op 1.09
intersect bitArray bitLen 8 11.273 ns/op 10.695 ns/op 1.05
intersect array and set length 8 179.66 ns/op 137.48 ns/op 1.31
intersect bitArray bitLen 128 63.307 ns/op 57.915 ns/op 1.09
intersect array and set length 128 2.2470 us/op 1.7867 us/op 1.26
pass gossip attestations to forkchoice per slot 3.1990 ms/op 2.8728 ms/op 1.11
computeDeltas 3.2056 ms/op 3.3493 ms/op 0.96
computeProposerBoostScoreFromBalances 779.77 us/op 805.20 us/op 0.97
altair processAttestation - 250000 vs - 7PWei normalcase 4.2592 ms/op 3.4886 ms/op 1.22
altair processAttestation - 250000 vs - 7PWei worstcase 6.2040 ms/op 5.2000 ms/op 1.19
altair processAttestation - setStatus - 1/6 committees join 209.47 us/op 184.44 us/op 1.14
altair processAttestation - setStatus - 1/3 committees join 411.54 us/op 363.39 us/op 1.13
altair processAttestation - setStatus - 1/2 committees join 614.18 us/op 527.76 us/op 1.16
altair processAttestation - setStatus - 2/3 committees join 798.48 us/op 691.89 us/op 1.15
altair processAttestation - setStatus - 4/5 committees join 1.0897 ms/op 947.23 us/op 1.15
altair processAttestation - setStatus - 100% committees join 1.2956 ms/op 1.1676 ms/op 1.11
altair processBlock - 250000 vs - 7PWei normalcase 27.165 ms/op 23.108 ms/op 1.18
altair processBlock - 250000 vs - 7PWei normalcase hashState 36.857 ms/op 36.779 ms/op 1.00
altair processBlock - 250000 vs - 7PWei worstcase 91.721 ms/op 81.385 ms/op 1.13
altair processBlock - 250000 vs - 7PWei worstcase hashState 111.44 ms/op 110.99 ms/op 1.00
phase0 processBlock - 250000 vs - 7PWei normalcase 4.7058 ms/op 3.7176 ms/op 1.27
phase0 processBlock - 250000 vs - 7PWei worstcase 56.925 ms/op 51.406 ms/op 1.11
altair processEth1Data - 250000 vs - 7PWei normalcase 833.46 us/op 691.99 us/op 1.20
Tree 40 250000 create 806.45 ms/op 662.35 ms/op 1.22
Tree 40 250000 get(125000) 290.06 ns/op 226.86 ns/op 1.28
Tree 40 250000 set(125000) 2.8585 us/op 2.0793 us/op 1.37
Tree 40 250000 toArray() 32.505 ms/op 24.919 ms/op 1.30
Tree 40 250000 iterate all - toArray() + loop 31.879 ms/op 24.938 ms/op 1.28
Tree 40 250000 iterate all - get(i) 116.02 ms/op 103.51 ms/op 1.12
MutableVector 250000 create 14.581 ms/op 13.943 ms/op 1.05
MutableVector 250000 get(125000) 12.727 ns/op 10.789 ns/op 1.18
MutableVector 250000 set(125000) 736.47 ns/op 498.30 ns/op 1.48
MutableVector 250000 toArray() 6.1256 ms/op 5.2719 ms/op 1.16
MutableVector 250000 iterate all - toArray() + loop 6.3070 ms/op 5.3774 ms/op 1.17
MutableVector 250000 iterate all - get(i) 3.5709 ms/op 2.5883 ms/op 1.38
Array 250000 create 5.4932 ms/op 5.2949 ms/op 1.04
Array 250000 clone - spread 4.2002 ms/op 3.1719 ms/op 1.32
Array 250000 get(125000) 1.7070 ns/op 1.4790 ns/op 1.15
Array 250000 set(125000) 1.8240 ns/op 1.4910 ns/op 1.22
Array 250000 iterate all - loop 128.63 us/op 150.88 us/op 0.85
effectiveBalanceIncrements clone Uint8Array 300000 201.88 us/op 45.010 us/op 4.49
effectiveBalanceIncrements clone MutableVector 300000 639.00 ns/op 1.1010 us/op 0.58
effectiveBalanceIncrements rw all Uint8Array 300000 264.81 us/op 247.38 us/op 1.07
effectiveBalanceIncrements rw all MutableVector 300000 179.67 ms/op 162.13 ms/op 1.11
phase0 afterProcessEpoch - 250000 vs - 7PWei 177.08 ms/op 189.07 ms/op 0.94
phase0 beforeProcessEpoch - 250000 vs - 7PWei 69.668 ms/op 54.845 ms/op 1.27
altair processEpoch - mainnet_e81889 580.90 ms/op 539.13 ms/op 1.08
mainnet_e81889 - altair beforeProcessEpoch 151.95 ms/op 116.46 ms/op 1.30
mainnet_e81889 - altair processJustificationAndFinalization 99.037 us/op 22.168 us/op 4.47
mainnet_e81889 - altair processInactivityUpdates 10.177 ms/op 8.5264 ms/op 1.19
mainnet_e81889 - altair processRewardsAndPenalties 94.048 ms/op 77.494 ms/op 1.21
mainnet_e81889 - altair processRegistryUpdates 26.068 us/op 4.6560 us/op 5.60
mainnet_e81889 - altair processSlashings 6.7920 us/op 1.2100 us/op 5.61
mainnet_e81889 - altair processEth1DataReset 7.1260 us/op 1.0580 us/op 6.74
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.4636 ms/op 1.9152 ms/op 1.29
mainnet_e81889 - altair processSlashingsReset 41.997 us/op 7.5610 us/op 5.55
mainnet_e81889 - altair processRandaoMixesReset 41.885 us/op 7.0960 us/op 5.90
mainnet_e81889 - altair processHistoricalRootsUpdate 4.8130 us/op 3.0920 us/op 1.56
mainnet_e81889 - altair processParticipationFlagUpdates 26.695 us/op 8.6060 us/op 3.10
mainnet_e81889 - altair processSyncCommitteeUpdates 3.3450 us/op 2.5190 us/op 1.33
mainnet_e81889 - altair afterProcessEpoch 189.27 ms/op 216.65 ms/op 0.87
phase0 processEpoch - mainnet_e58758 553.01 ms/op 608.01 ms/op 0.91
mainnet_e58758 - phase0 beforeProcessEpoch 249.09 ms/op 227.83 ms/op 1.09
mainnet_e58758 - phase0 processJustificationAndFinalization 113.28 us/op 26.384 us/op 4.29
mainnet_e58758 - phase0 processRewardsAndPenalties 79.345 ms/op 135.32 ms/op 0.59
mainnet_e58758 - phase0 processRegistryUpdates 55.087 us/op 10.363 us/op 5.32
mainnet_e58758 - phase0 processSlashings 5.8640 us/op 1.0560 us/op 5.55
mainnet_e58758 - phase0 processEth1DataReset 6.1140 us/op 1.0200 us/op 5.99
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.9374 ms/op 1.8972 ms/op 1.02
mainnet_e58758 - phase0 processSlashingsReset 22.879 us/op 6.0510 us/op 3.78
mainnet_e58758 - phase0 processRandaoMixesReset 43.142 us/op 6.9360 us/op 6.22
mainnet_e58758 - phase0 processHistoricalRootsUpdate 7.8340 us/op 1.2230 us/op 6.41
mainnet_e58758 - phase0 processParticipationRecordUpdates 35.730 us/op 6.1370 us/op 5.82
mainnet_e58758 - phase0 afterProcessEpoch 154.67 ms/op 162.36 ms/op 0.95
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.2388 ms/op 1.9961 ms/op 1.12
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.6369 ms/op 2.2681 ms/op 1.16
altair processInactivityUpdates - 250000 normalcase 42.685 ms/op 50.313 ms/op 0.85
altair processInactivityUpdates - 250000 worstcase 41.198 ms/op 51.311 ms/op 0.80
phase0 processRegistryUpdates - 250000 normalcase 46.586 us/op 10.406 us/op 4.48
phase0 processRegistryUpdates - 250000 badcase_full_deposits 488.36 us/op 491.18 us/op 0.99
phase0 processRegistryUpdates - 250000 worstcase 0.5 236.69 ms/op 213.49 ms/op 1.11
altair processRewardsAndPenalties - 250000 normalcase 117.37 ms/op 128.85 ms/op 0.91
altair processRewardsAndPenalties - 250000 worstcase 86.124 ms/op 142.46 ms/op 0.60
phase0 getAttestationDeltas - 250000 normalcase 13.183 ms/op 10.931 ms/op 1.21
phase0 getAttestationDeltas - 250000 worstcase 13.727 ms/op 11.299 ms/op 1.21
phase0 processSlashings - 250000 worstcase 5.8664 ms/op 5.0620 ms/op 1.16
altair processSyncCommitteeUpdates - 250000 309.11 ms/op 287.41 ms/op 1.08
BeaconState.hashTreeRoot - No change 666.00 ns/op 575.00 ns/op 1.16
BeaconState.hashTreeRoot - 1 full validator 67.335 us/op 66.009 us/op 1.02
BeaconState.hashTreeRoot - 32 full validator 685.57 us/op 657.61 us/op 1.04
BeaconState.hashTreeRoot - 512 full validator 6.9626 ms/op 6.9571 ms/op 1.00
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 87.143 us/op 81.740 us/op 1.07
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2871 ms/op 1.1717 ms/op 1.10
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.582 ms/op 14.431 ms/op 1.01
BeaconState.hashTreeRoot - 1 balances 65.254 us/op 64.623 us/op 1.01
BeaconState.hashTreeRoot - 32 balances 556.81 us/op 559.36 us/op 1.00
BeaconState.hashTreeRoot - 512 balances 5.2438 ms/op 5.2804 ms/op 0.99
BeaconState.hashTreeRoot - 250000 balances 108.26 ms/op 120.09 ms/op 0.90
aggregationBits - 2048 els - zipIndexesInBitList 27.922 us/op 23.798 us/op 1.17
regular array get 100000 times 51.351 us/op 60.551 us/op 0.85
wrappedArray get 100000 times 51.006 us/op 62.330 us/op 0.82
arrayWithProxy get 100000 times 31.269 ms/op 28.826 ms/op 1.08
ssz.Root.equals 493.00 ns/op 474.00 ns/op 1.04
byteArrayEquals 473.00 ns/op 456.00 ns/op 1.04
shuffle list - 16384 els 10.887 ms/op 11.365 ms/op 0.96
shuffle list - 250000 els 157.60 ms/op 167.67 ms/op 0.94
processSlot - 1 slots 14.262 us/op 11.949 us/op 1.19
processSlot - 32 slots 2.0489 ms/op 1.8621 ms/op 1.10
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 460.21 us/op 346.31 us/op 1.33
getCommitteeAssignments - req 1 vs - 250000 vc 4.9122 ms/op 5.4590 ms/op 0.90
getCommitteeAssignments - req 100 vs - 250000 vc 6.9792 ms/op 7.9812 ms/op 0.87
getCommitteeAssignments - req 1000 vs - 250000 vc 7.5274 ms/op 8.5685 ms/op 0.88
computeProposers - vc 250000 17.298 ms/op 16.861 ms/op 1.03
computeEpochShuffling - vc 250000 161.43 ms/op 170.18 ms/op 0.95
getNextSyncCommittee - vc 250000 288.74 ms/op 288.78 ms/op 1.00

by benchmarkbot/action

@wemeetagain wemeetagain merged commit eccde2f into unstable Jul 18, 2022
@wemeetagain wemeetagain deleted the dapplion/state-cache-init branch July 18, 2022 02:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants