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

Adapt RangeSync process blocks in same epoch only #4322

Merged
merged 1 commit into from Jul 18, 2022

Conversation

dapplion
Copy link
Contributor

Motivation

Description

RangeSync currently uses params:

  • BATCH_SLOT_OFFSET: 2
  • EPOCHS_PER_BATCH: 1

But we want to have all blocks in a chain segment in the same epoch to verify in batch. Changing this params requires changing the whole logic to stop and mark chains as completed:

Before Jul2022 an offset of 1 was required to download the checkpoint block during finalized sync. Otherwise the block necessary so switch from Finalized sync to Head sync won't be in the fork-choice and range sync would be stuck in a loop downloading the previous epoch to finalized epoch, until we get rate-limited.

After Jul2022 during finalized sync the entire epoch of finalized epoch will be downloaded fullfilling the goal to switch to Head sync latter. This does not affect performance nor sync speed and just downloads a few extra blocks that would be required by Head sync anyway. However, having an offset of 0 allows to send to the processor blocks that belong to the same epoch, which enables batch verification optimizations.

@dapplion dapplion requested a review from a team as a code owner July 18, 2022 14:21
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 01ba855 Previous: 8ccbcb8 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.1322 ms/op 2.8611 ms/op 0.75
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 66.188 us/op 99.330 us/op 0.67
BLS verify - blst-native 2.1661 ms/op 2.5026 ms/op 0.87
BLS verifyMultipleSignatures 3 - blst-native 4.4713 ms/op 5.0421 ms/op 0.89
BLS verifyMultipleSignatures 8 - blst-native 9.6738 ms/op 10.784 ms/op 0.90
BLS verifyMultipleSignatures 32 - blst-native 35.155 ms/op 40.242 ms/op 0.87
BLS aggregatePubkeys 32 - blst-native 46.689 us/op 50.287 us/op 0.93
BLS aggregatePubkeys 128 - blst-native 182.53 us/op 201.91 us/op 0.90
getAttestationsForBlock 43.529 ms/op 54.020 ms/op 0.81
isKnown best case - 1 super set check 482.00 ns/op 559.00 ns/op 0.86
isKnown normal case - 2 super set checks 475.00 ns/op 527.00 ns/op 0.90
isKnown worse case - 16 super set checks 487.00 ns/op 551.00 ns/op 0.88
CheckpointStateCache - add get delete 11.844 us/op 14.871 us/op 0.80
validate gossip signedAggregateAndProof - struct 5.0301 ms/op 5.5222 ms/op 0.91
validate gossip attestation - struct 2.3628 ms/op 2.6006 ms/op 0.91
altair verifyImport mainnet_s3766816:31 12.531 s/op 14.467 s/op 0.87
pickEth1Vote - no votes 2.1832 ms/op 2.7460 ms/op 0.80
pickEth1Vote - max votes 22.860 ms/op 29.634 ms/op 0.77
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.646 ms/op 16.104 ms/op 0.85
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 22.132 ms/op 31.018 ms/op 0.71
pickEth1Vote - Eth1Data fastSerialize value x2048 1.5632 ms/op 1.7828 ms/op 0.88
pickEth1Vote - Eth1Data fastSerialize tree x2048 16.147 ms/op 16.099 ms/op 1.00
bytes32 toHexString 1.1970 us/op 1.1340 us/op 1.06
bytes32 Buffer.toString(hex) 860.00 ns/op 804.00 ns/op 1.07
bytes32 Buffer.toString(hex) from Uint8Array 1.1370 us/op 1.1330 us/op 1.00
bytes32 Buffer.toString(hex) + 0x 861.00 ns/op 826.00 ns/op 1.04
Object access 1 prop 0.44800 ns/op 0.39900 ns/op 1.12
Map access 1 prop 0.35000 ns/op 0.34500 ns/op 1.01
Object get x1000 11.230 ns/op 16.924 ns/op 0.66
Map get x1000 1.0090 ns/op 0.97200 ns/op 1.04
Object set x1000 89.827 ns/op 114.69 ns/op 0.78
Map set x1000 60.158 ns/op 87.623 ns/op 0.69
Return object 10000 times 0.43940 ns/op 0.43350 ns/op 1.01
Throw Error 10000 times 6.1466 us/op 6.7865 us/op 0.91
enrSubnets - fastDeserialize 64 bits 3.3050 us/op 2.9120 us/op 1.13
enrSubnets - ssz BitVector 64 bits 924.00 ns/op 830.00 ns/op 1.11
enrSubnets - fastDeserialize 4 bits 535.00 ns/op 439.00 ns/op 1.22
enrSubnets - ssz BitVector 4 bits 965.00 ns/op 892.00 ns/op 1.08
prioritizePeers score -10:0 att 32-0.1 sync 2-0 93.646 us/op 123.48 us/op 0.76
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 114.58 us/op 157.90 us/op 0.73
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 226.64 us/op 282.48 us/op 0.80
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 449.70 us/op 626.81 us/op 0.72
prioritizePeers score 0:0 att 64-1 sync 4-1 406.54 us/op 564.42 us/op 0.72
RateTracker 1000000 limit, 1 obj count per request 208.40 ns/op 209.01 ns/op 1.00
RateTracker 1000000 limit, 2 obj count per request 156.00 ns/op 152.87 ns/op 1.02
RateTracker 1000000 limit, 4 obj count per request 130.56 ns/op 129.16 ns/op 1.01
RateTracker 1000000 limit, 8 obj count per request 115.21 ns/op 109.58 ns/op 1.05
RateTracker with prune 5.1630 us/op 4.8890 us/op 1.06
array of 16000 items push then shift 51.587 us/op 5.3179 us/op 9.70
LinkedList of 16000 items push then shift 12.659 ns/op 32.104 ns/op 0.39
array of 16000 items push then pop 239.65 ns/op 257.99 ns/op 0.93
LinkedList of 16000 items push then pop 12.339 ns/op 28.620 ns/op 0.43
array of 24000 items push then shift 77.359 us/op 8.3714 us/op 9.24
LinkedList of 24000 items push then shift 13.353 ns/op 30.488 ns/op 0.44
array of 24000 items push then pop 201.36 ns/op 257.17 ns/op 0.78
LinkedList of 24000 items push then pop 12.456 ns/op 27.693 ns/op 0.45
intersect bitArray bitLen 8 10.874 ns/op 13.677 ns/op 0.80
intersect array and set length 8 157.30 ns/op 219.46 ns/op 0.72
intersect bitArray bitLen 128 57.194 ns/op 75.832 ns/op 0.75
intersect array and set length 128 2.0308 us/op 2.4903 us/op 0.82
pass gossip attestations to forkchoice per slot 2.8638 ms/op 3.7210 ms/op 0.77
computeDeltas 3.3345 ms/op 3.9275 ms/op 0.85
computeProposerBoostScoreFromBalances 804.00 us/op 872.79 us/op 0.92
altair processAttestation - 250000 vs - 7PWei normalcase 3.9395 ms/op 6.3981 ms/op 0.62
altair processAttestation - 250000 vs - 7PWei worstcase 5.4262 ms/op 8.9853 ms/op 0.60
altair processAttestation - setStatus - 1/6 committees join 183.40 us/op 277.32 us/op 0.66
altair processAttestation - setStatus - 1/3 committees join 358.37 us/op 539.55 us/op 0.66
altair processAttestation - setStatus - 1/2 committees join 516.92 us/op 766.67 us/op 0.67
altair processAttestation - setStatus - 2/3 committees join 676.54 us/op 973.43 us/op 0.70
altair processAttestation - setStatus - 4/5 committees join 941.61 us/op 1.2744 ms/op 0.74
altair processAttestation - setStatus - 100% committees join 1.1378 ms/op 1.5217 ms/op 0.75
altair processBlock - 250000 vs - 7PWei normalcase 24.567 ms/op 31.272 ms/op 0.79
altair processBlock - 250000 vs - 7PWei normalcase hashState 34.178 ms/op 45.030 ms/op 0.76
altair processBlock - 250000 vs - 7PWei worstcase 82.754 ms/op 100.25 ms/op 0.83
altair processBlock - 250000 vs - 7PWei worstcase hashState 103.17 ms/op 114.53 ms/op 0.90
phase0 processBlock - 250000 vs - 7PWei normalcase 4.6138 ms/op 4.6899 ms/op 0.98
phase0 processBlock - 250000 vs - 7PWei worstcase 52.307 ms/op 56.037 ms/op 0.93
altair processEth1Data - 250000 vs - 7PWei normalcase 725.31 us/op 1.1997 ms/op 0.60
Tree 40 250000 create 730.31 ms/op 963.27 ms/op 0.76
Tree 40 250000 get(125000) 232.84 ns/op 330.39 ns/op 0.70
Tree 40 250000 set(125000) 2.1667 us/op 2.9091 us/op 0.74
Tree 40 250000 toArray() 27.779 ms/op 38.061 ms/op 0.73
Tree 40 250000 iterate all - toArray() + loop 27.948 ms/op 38.892 ms/op 0.72
Tree 40 250000 iterate all - get(i) 115.52 ms/op 138.38 ms/op 0.83
MutableVector 250000 create 13.207 ms/op 17.689 ms/op 0.75
MutableVector 250000 get(125000) 10.740 ns/op 14.620 ns/op 0.73
MutableVector 250000 set(125000) 536.90 ns/op 807.73 ns/op 0.66
MutableVector 250000 toArray() 5.9832 ms/op 7.1200 ms/op 0.84
MutableVector 250000 iterate all - toArray() + loop 6.2623 ms/op 7.1790 ms/op 0.87
MutableVector 250000 iterate all - get(i) 2.6691 ms/op 3.6360 ms/op 0.73
Array 250000 create 5.8124 ms/op 7.3424 ms/op 0.79
Array 250000 clone - spread 3.3886 ms/op 4.1980 ms/op 0.81
Array 250000 get(125000) 1.6020 ns/op 1.8670 ns/op 0.86
Array 250000 set(125000) 1.5480 ns/op 1.8120 ns/op 0.85
Array 250000 iterate all - loop 155.41 us/op 140.06 us/op 1.11
effectiveBalanceIncrements clone Uint8Array 300000 71.071 us/op 259.11 us/op 0.27
effectiveBalanceIncrements clone MutableVector 300000 668.00 ns/op 1.1710 us/op 0.57
effectiveBalanceIncrements rw all Uint8Array 300000 247.52 us/op 304.52 us/op 0.81
effectiveBalanceIncrements rw all MutableVector 300000 131.10 ms/op 238.29 ms/op 0.55
phase0 afterProcessEpoch - 250000 vs - 7PWei 186.62 ms/op 224.64 ms/op 0.83
phase0 beforeProcessEpoch - 250000 vs - 7PWei 56.281 ms/op 84.673 ms/op 0.66
altair processEpoch - mainnet_e81889 545.23 ms/op 684.12 ms/op 0.80
mainnet_e81889 - altair beforeProcessEpoch 128.84 ms/op 178.81 ms/op 0.72
mainnet_e81889 - altair processJustificationAndFinalization 16.480 us/op 75.279 us/op 0.22
mainnet_e81889 - altair processInactivityUpdates 9.7336 ms/op 12.658 ms/op 0.77
mainnet_e81889 - altair processRewardsAndPenalties 82.675 ms/op 114.33 ms/op 0.72
mainnet_e81889 - altair processRegistryUpdates 3.7460 us/op 14.843 us/op 0.25
mainnet_e81889 - altair processSlashings 896.00 ns/op 4.2140 us/op 0.21
mainnet_e81889 - altair processEth1DataReset 874.00 ns/op 4.2480 us/op 0.21
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.1694 ms/op 2.6946 ms/op 0.81
mainnet_e81889 - altair processSlashingsReset 4.3330 us/op 23.823 us/op 0.18
mainnet_e81889 - altair processRandaoMixesReset 4.7810 us/op 25.082 us/op 0.19
mainnet_e81889 - altair processHistoricalRootsUpdate 1.0700 us/op 4.4520 us/op 0.24
mainnet_e81889 - altair processParticipationFlagUpdates 3.9210 us/op 15.456 us/op 0.25
mainnet_e81889 - altair processSyncCommitteeUpdates 814.00 ns/op 3.8180 us/op 0.21
mainnet_e81889 - altair afterProcessEpoch 196.89 ms/op 217.92 ms/op 0.90
phase0 processEpoch - mainnet_e58758 488.09 ms/op 662.17 ms/op 0.74
mainnet_e58758 - phase0 beforeProcessEpoch 179.98 ms/op 289.11 ms/op 0.62
mainnet_e58758 - phase0 processJustificationAndFinalization 17.836 us/op 61.278 us/op 0.29
mainnet_e58758 - phase0 processRewardsAndPenalties 118.57 ms/op 174.88 ms/op 0.68
mainnet_e58758 - phase0 processRegistryUpdates 9.8790 us/op 33.556 us/op 0.29
mainnet_e58758 - phase0 processSlashings 653.00 ns/op 3.4270 us/op 0.19
mainnet_e58758 - phase0 processEth1DataReset 775.00 ns/op 3.7280 us/op 0.21
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.7406 ms/op 2.8063 ms/op 0.62
mainnet_e58758 - phase0 processSlashingsReset 3.0280 us/op 20.647 us/op 0.15
mainnet_e58758 - phase0 processRandaoMixesReset 3.7960 us/op 25.042 us/op 0.15
mainnet_e58758 - phase0 processHistoricalRootsUpdate 682.00 ns/op 4.3510 us/op 0.16
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.5660 us/op 24.001 us/op 0.19
mainnet_e58758 - phase0 afterProcessEpoch 161.99 ms/op 183.43 ms/op 0.88
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.0192 ms/op 2.6397 ms/op 0.76
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.2935 ms/op 2.8653 ms/op 0.80
altair processInactivityUpdates - 250000 normalcase 40.955 ms/op 56.462 ms/op 0.73
altair processInactivityUpdates - 250000 worstcase 33.886 ms/op 60.137 ms/op 0.56
phase0 processRegistryUpdates - 250000 normalcase 7.8730 us/op 27.215 us/op 0.29
phase0 processRegistryUpdates - 250000 badcase_full_deposits 368.45 us/op 508.48 us/op 0.72
phase0 processRegistryUpdates - 250000 worstcase 0.5 190.55 ms/op 255.68 ms/op 0.75
altair processRewardsAndPenalties - 250000 normalcase 106.41 ms/op 111.95 ms/op 0.95
altair processRewardsAndPenalties - 250000 worstcase 75.655 ms/op 151.74 ms/op 0.50
phase0 getAttestationDeltas - 250000 normalcase 12.145 ms/op 13.952 ms/op 0.87
phase0 getAttestationDeltas - 250000 worstcase 12.840 ms/op 14.983 ms/op 0.86
phase0 processSlashings - 250000 worstcase 5.0847 ms/op 6.9962 ms/op 0.73
altair processSyncCommitteeUpdates - 250000 300.91 ms/op 355.68 ms/op 0.85
BeaconState.hashTreeRoot - No change 690.00 ns/op 937.00 ns/op 0.74
BeaconState.hashTreeRoot - 1 full validator 70.047 us/op 78.060 us/op 0.90
BeaconState.hashTreeRoot - 32 full validator 673.82 us/op 745.70 us/op 0.90
BeaconState.hashTreeRoot - 512 full validator 7.1743 ms/op 7.6156 ms/op 0.94
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 84.710 us/op 101.75 us/op 0.83
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.1269 ms/op 1.3911 ms/op 0.81
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.800 ms/op 17.823 ms/op 0.83
BeaconState.hashTreeRoot - 1 balances 65.076 us/op 74.349 us/op 0.88
BeaconState.hashTreeRoot - 32 balances 560.68 us/op 649.13 us/op 0.86
BeaconState.hashTreeRoot - 512 balances 5.3046 ms/op 5.7806 ms/op 0.92
BeaconState.hashTreeRoot - 250000 balances 106.97 ms/op 112.94 ms/op 0.95
aggregationBits - 2048 els - zipIndexesInBitList 30.651 us/op 44.610 us/op 0.69
regular array get 100000 times 63.061 us/op 60.024 us/op 1.05
wrappedArray get 100000 times 63.036 us/op 58.949 us/op 1.07
arrayWithProxy get 100000 times 33.342 ms/op 36.763 ms/op 0.91
ssz.Root.equals 559.00 ns/op 802.00 ns/op 0.70
byteArrayEquals 533.00 ns/op 779.00 ns/op 0.68
shuffle list - 16384 els 11.399 ms/op 12.837 ms/op 0.89
shuffle list - 250000 els 166.51 ms/op 185.46 ms/op 0.90
processSlot - 1 slots 13.083 us/op 20.359 us/op 0.64
processSlot - 32 slots 1.9451 ms/op 2.3822 ms/op 0.82
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 399.74 us/op 412.37 us/op 0.97
getCommitteeAssignments - req 1 vs - 250000 vc 5.4430 ms/op 6.0030 ms/op 0.91
getCommitteeAssignments - req 100 vs - 250000 vc 7.9889 ms/op 8.3531 ms/op 0.96
getCommitteeAssignments - req 1000 vs - 250000 vc 8.5926 ms/op 9.2716 ms/op 0.93
computeProposers - vc 250000 17.891 ms/op 21.373 ms/op 0.84
computeEpochShuffling - vc 250000 169.21 ms/op 192.02 ms/op 0.88
getNextSyncCommittee - vc 250000 299.60 ms/op 361.51 ms/op 0.83

by benchmarkbot/action

@wemeetagain wemeetagain merged commit 57673fe into unstable Jul 18, 2022
@wemeetagain wemeetagain deleted the dapplion/range-sync-1-epoch branch July 18, 2022 14:54
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