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

Slow down the dynamic batch size recovery for eth1 deposit tracker #4588

Merged
merged 1 commit into from Sep 23, 2022

Conversation

g11tech
Copy link
Contributor

@g11tech g11tech commented Sep 22, 2022

Motivation
Rather than increasing the batch size back exponentially (2x on each successful fetch), increase it linearly and slowly to give EL more space to recover when choked (could be doing some internal maintenance for e.g)

This PR slows down the dynamic batch size recovery for eth1 deposit tracker by only incrementing batch size linearly while the decrease is still exponential.

@g11tech g11tech requested a review from a team as a code owner September 22, 2022 18:19
@g11tech g11tech enabled auto-merge (squash) September 22, 2022 18:20
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: b5028c7 Previous: fd8e335 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.6136 ms/op 2.1053 ms/op 1.24
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 92.919 us/op 71.008 us/op 1.31
BLS verify - blst-native 2.2340 ms/op 1.9182 ms/op 1.16
BLS verifyMultipleSignatures 3 - blst-native 4.5662 ms/op 4.0199 ms/op 1.14
BLS verifyMultipleSignatures 8 - blst-native 9.8300 ms/op 8.6175 ms/op 1.14
BLS verifyMultipleSignatures 32 - blst-native 35.865 ms/op 29.900 ms/op 1.20
BLS aggregatePubkeys 32 - blst-native 47.034 us/op 38.948 us/op 1.21
BLS aggregatePubkeys 128 - blst-native 183.95 us/op 159.21 us/op 1.16
getAttestationsForBlock 107.83 ms/op 94.012 ms/op 1.15
isKnown best case - 1 super set check 533.00 ns/op 437.00 ns/op 1.22
isKnown normal case - 2 super set checks 502.00 ns/op 412.00 ns/op 1.22
isKnown worse case - 16 super set checks 501.00 ns/op 416.00 ns/op 1.20
CheckpointStateCache - add get delete 11.069 us/op 9.4750 us/op 1.17
validate gossip signedAggregateAndProof - struct 5.2262 ms/op 4.3962 ms/op 1.19
validate gossip attestation - struct 2.4411 ms/op 2.1398 ms/op 1.14
pickEth1Vote - no votes 2.6096 ms/op 2.2435 ms/op 1.16
pickEth1Vote - max votes 26.025 ms/op 18.706 ms/op 1.39
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.768 ms/op 11.886 ms/op 1.16
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 25.930 ms/op 19.559 ms/op 1.33
pickEth1Vote - Eth1Data fastSerialize value x2048 1.8439 ms/op 1.4902 ms/op 1.24
pickEth1Vote - Eth1Data fastSerialize tree x2048 16.993 ms/op 13.780 ms/op 1.23
bytes32 toHexString 1.4160 us/op 1.0510 us/op 1.35
bytes32 Buffer.toString(hex) 886.00 ns/op 706.00 ns/op 1.25
bytes32 Buffer.toString(hex) from Uint8Array 1.1860 us/op 936.00 ns/op 1.27
bytes32 Buffer.toString(hex) + 0x 908.00 ns/op 636.00 ns/op 1.43
Object access 1 prop 0.46700 ns/op 0.32800 ns/op 1.42
Map access 1 prop 0.35300 ns/op 0.30000 ns/op 1.18
Object get x1000 22.600 ns/op 15.918 ns/op 1.42
Map get x1000 1.2090 ns/op 0.87000 ns/op 1.39
Object set x1000 146.61 ns/op 99.581 ns/op 1.47
Map set x1000 88.499 ns/op 66.585 ns/op 1.33
Return object 10000 times 0.44940 ns/op 0.36750 ns/op 1.22
Throw Error 10000 times 6.9437 us/op 6.8930 us/op 1.01
enrSubnets - fastDeserialize 64 bits 3.3440 us/op 2.5590 us/op 1.31
enrSubnets - ssz BitVector 64 bits 923.00 ns/op 693.00 ns/op 1.33
enrSubnets - fastDeserialize 4 bits 482.00 ns/op 352.00 ns/op 1.37
enrSubnets - ssz BitVector 4 bits 915.00 ns/op 653.00 ns/op 1.40
prioritizePeers score -10:0 att 32-0.1 sync 2-0 120.26 us/op 95.063 us/op 1.27
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 161.11 us/op 141.10 us/op 1.14
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 306.26 us/op 238.09 us/op 1.29
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 556.66 us/op 469.67 us/op 1.19
prioritizePeers score 0:0 att 64-1 sync 4-1 554.36 us/op 475.82 us/op 1.17
RateTracker 1000000 limit, 1 obj count per request 241.38 ns/op 164.49 ns/op 1.47
RateTracker 1000000 limit, 2 obj count per request 182.20 ns/op 123.46 ns/op 1.48
RateTracker 1000000 limit, 4 obj count per request 154.21 ns/op 104.68 ns/op 1.47
RateTracker 1000000 limit, 8 obj count per request 143.65 ns/op 92.408 ns/op 1.55
RateTracker with prune 5.0970 us/op 4.2700 us/op 1.19
array of 16000 items push then shift 3.6697 us/op 4.5058 us/op 0.81
LinkedList of 16000 items push then shift 20.391 ns/op 16.882 ns/op 1.21
array of 16000 items push then pop 281.22 ns/op 212.73 ns/op 1.32
LinkedList of 16000 items push then pop 20.062 ns/op 16.201 ns/op 1.24
array of 24000 items push then shift 5.4154 us/op 6.7287 us/op 0.80
LinkedList of 24000 items push then shift 24.623 ns/op 17.366 ns/op 1.42
array of 24000 items push then pop 246.58 ns/op 228.20 ns/op 1.08
LinkedList of 24000 items push then pop 21.194 ns/op 16.313 ns/op 1.30
intersect bitArray bitLen 8 13.779 ns/op 10.632 ns/op 1.30
intersect array and set length 8 196.42 ns/op 162.46 ns/op 1.21
intersect bitArray bitLen 128 86.309 ns/op 60.167 ns/op 1.43
intersect array and set length 128 2.6216 us/op 2.0027 us/op 1.31
Buffer.concat 32 items 2.7100 ns/op 2.0070 ns/op 1.35
pass gossip attestations to forkchoice per slot 3.7671 ms/op 3.4069 ms/op 1.11
computeDeltas 3.6061 ms/op 3.7056 ms/op 0.97
computeProposerBoostScoreFromBalances 1.0860 ms/op 755.33 us/op 1.44
altair processAttestation - 250000 vs - 7PWei normalcase 4.9992 ms/op 4.5200 ms/op 1.11
altair processAttestation - 250000 vs - 7PWei worstcase 7.5444 ms/op 6.1768 ms/op 1.22
altair processAttestation - setStatus - 1/6 committees join 257.73 us/op 254.59 us/op 1.01
altair processAttestation - setStatus - 1/3 committees join 465.93 us/op 447.04 us/op 1.04
altair processAttestation - setStatus - 1/2 committees join 656.89 us/op 596.71 us/op 1.10
altair processAttestation - setStatus - 2/3 committees join 830.04 us/op 864.70 us/op 0.96
altair processAttestation - setStatus - 4/5 committees join 1.1003 ms/op 1.0846 ms/op 1.01
altair processAttestation - setStatus - 100% committees join 1.3354 ms/op 1.2786 ms/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 30.401 ms/op 27.676 ms/op 1.10
altair processBlock - 250000 vs - 7PWei normalcase hashState 41.299 ms/op 42.615 ms/op 0.97
altair processBlock - 250000 vs - 7PWei worstcase 93.393 ms/op 77.641 ms/op 1.20
altair processBlock - 250000 vs - 7PWei worstcase hashState 112.14 ms/op 110.67 ms/op 1.01
phase0 processBlock - 250000 vs - 7PWei normalcase 4.1723 ms/op 3.8516 ms/op 1.08
phase0 processBlock - 250000 vs - 7PWei worstcase 55.506 ms/op 48.038 ms/op 1.16
altair processEth1Data - 250000 vs - 7PWei normalcase 972.98 us/op 937.05 us/op 1.04
Tree 40 250000 create 873.73 ms/op 727.71 ms/op 1.20
Tree 40 250000 get(125000) 339.04 ns/op 271.73 ns/op 1.25
Tree 40 250000 set(125000) 2.8126 us/op 2.3897 us/op 1.18
Tree 40 250000 toArray() 37.732 ms/op 33.452 ms/op 1.13
Tree 40 250000 iterate all - toArray() + loop 36.715 ms/op 33.854 ms/op 1.08
Tree 40 250000 iterate all - get(i) 127.43 ms/op 115.97 ms/op 1.10
MutableVector 250000 create 24.049 ms/op 17.070 ms/op 1.41
MutableVector 250000 get(125000) 16.102 ns/op 12.387 ns/op 1.30
MutableVector 250000 set(125000) 706.57 ns/op 743.94 ns/op 0.95
MutableVector 250000 toArray() 8.6777 ms/op 6.8728 ms/op 1.26
MutableVector 250000 iterate all - toArray() + loop 8.5748 ms/op 6.6127 ms/op 1.30
MutableVector 250000 iterate all - get(i) 4.1896 ms/op 3.6767 ms/op 1.14
Array 250000 create 8.7586 ms/op 6.5225 ms/op 1.34
Array 250000 clone - spread 4.0411 ms/op 4.1642 ms/op 0.97
Array 250000 get(125000) 1.7790 ns/op 1.5630 ns/op 1.14
Array 250000 set(125000) 1.8790 ns/op 1.6130 ns/op 1.16
Array 250000 iterate all - loop 201.57 us/op 123.30 us/op 1.63
effectiveBalanceIncrements clone Uint8Array 300000 107.87 us/op 200.59 us/op 0.54
effectiveBalanceIncrements clone MutableVector 300000 1.3010 us/op 691.00 ns/op 1.88
effectiveBalanceIncrements rw all Uint8Array 300000 303.25 us/op 242.56 us/op 1.25
effectiveBalanceIncrements rw all MutableVector 300000 238.83 ms/op 177.85 ms/op 1.34
phase0 afterProcessEpoch - 250000 vs - 7PWei 226.70 ms/op 165.11 ms/op 1.37
phase0 beforeProcessEpoch - 250000 vs - 7PWei 110.00 ms/op 69.601 ms/op 1.58
altair processEpoch - mainnet_e81889 684.99 ms/op 557.61 ms/op 1.23
mainnet_e81889 - altair beforeProcessEpoch 178.29 ms/op 152.55 ms/op 1.17
mainnet_e81889 - altair processJustificationAndFinalization 35.975 us/op 64.080 us/op 0.56
mainnet_e81889 - altair processInactivityUpdates 12.860 ms/op 9.8942 ms/op 1.30
mainnet_e81889 - altair processRewardsAndPenalties 109.67 ms/op 95.865 ms/op 1.14
mainnet_e81889 - altair processRegistryUpdates 7.9230 us/op 14.358 us/op 0.55
mainnet_e81889 - altair processSlashings 2.2070 us/op 3.8690 us/op 0.57
mainnet_e81889 - altair processEth1DataReset 2.2170 us/op 4.3300 us/op 0.51
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.9037 ms/op 2.1014 ms/op 1.38
mainnet_e81889 - altair processSlashingsReset 12.939 us/op 26.327 us/op 0.49
mainnet_e81889 - altair processRandaoMixesReset 12.146 us/op 26.834 us/op 0.45
mainnet_e81889 - altair processHistoricalRootsUpdate 2.2460 us/op 4.2210 us/op 0.53
mainnet_e81889 - altair processParticipationFlagUpdates 7.5540 us/op 15.046 us/op 0.50
mainnet_e81889 - altair processSyncCommitteeUpdates 1.8620 us/op 3.5700 us/op 0.52
mainnet_e81889 - altair afterProcessEpoch 229.51 ms/op 176.14 ms/op 1.30
phase0 processEpoch - mainnet_e58758 610.76 ms/op 520.30 ms/op 1.17
mainnet_e58758 - phase0 beforeProcessEpoch 265.13 ms/op 232.77 ms/op 1.14
mainnet_e58758 - phase0 processJustificationAndFinalization 30.775 us/op 61.176 us/op 0.50
mainnet_e58758 - phase0 processRewardsAndPenalties 165.69 ms/op 142.88 ms/op 1.16
mainnet_e58758 - phase0 processRegistryUpdates 19.432 us/op 32.989 us/op 0.59
mainnet_e58758 - phase0 processSlashings 1.8490 us/op 3.1600 us/op 0.59
mainnet_e58758 - phase0 processEth1DataReset 2.0170 us/op 3.6220 us/op 0.56
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.4224 ms/op 1.9563 ms/op 1.24
mainnet_e58758 - phase0 processSlashingsReset 9.9500 us/op 13.425 us/op 0.74
mainnet_e58758 - phase0 processRandaoMixesReset 14.477 us/op 25.836 us/op 0.56
mainnet_e58758 - phase0 processHistoricalRootsUpdate 2.2300 us/op 4.1650 us/op 0.54
mainnet_e58758 - phase0 processParticipationRecordUpdates 11.272 us/op 23.535 us/op 0.48
mainnet_e58758 - phase0 afterProcessEpoch 192.27 ms/op 149.72 ms/op 1.28
phase0 processEffectiveBalanceUpdates - 250000 normalcase 3.0638 ms/op 2.0507 ms/op 1.49
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 4.0892 ms/op 2.6758 ms/op 1.53
altair processInactivityUpdates - 250000 normalcase 47.586 ms/op 45.441 ms/op 1.05
altair processInactivityUpdates - 250000 worstcase 59.189 ms/op 56.453 ms/op 1.05
phase0 processRegistryUpdates - 250000 normalcase 15.479 us/op 26.806 us/op 0.58
phase0 processRegistryUpdates - 250000 badcase_full_deposits 492.13 us/op 445.25 us/op 1.11
phase0 processRegistryUpdates - 250000 worstcase 0.5 251.98 ms/op 254.27 ms/op 0.99
altair processRewardsAndPenalties - 250000 normalcase 162.45 ms/op 135.74 ms/op 1.20
altair processRewardsAndPenalties - 250000 worstcase 100.80 ms/op 88.725 ms/op 1.14
phase0 getAttestationDeltas - 250000 normalcase 15.583 ms/op 12.589 ms/op 1.24
phase0 getAttestationDeltas - 250000 worstcase 15.986 ms/op 13.696 ms/op 1.17
phase0 processSlashings - 250000 worstcase 6.3626 ms/op 5.2926 ms/op 1.20
altair processSyncCommitteeUpdates - 250000 339.14 ms/op 292.97 ms/op 1.16
BeaconState.hashTreeRoot - No change 836.00 ns/op 531.00 ns/op 1.57
BeaconState.hashTreeRoot - 1 full validator 65.308 us/op 67.877 us/op 0.96
BeaconState.hashTreeRoot - 32 full validator 649.68 us/op 847.29 us/op 0.77
BeaconState.hashTreeRoot - 512 full validator 7.3043 ms/op 6.8674 ms/op 1.06
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 86.327 us/op 84.350 us/op 1.02
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2255 ms/op 1.2740 ms/op 0.96
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 15.714 ms/op 16.080 ms/op 0.98
BeaconState.hashTreeRoot - 1 balances 62.775 us/op 70.387 us/op 0.89
BeaconState.hashTreeRoot - 32 balances 592.15 us/op 620.83 us/op 0.95
BeaconState.hashTreeRoot - 512 balances 5.3752 ms/op 5.8802 ms/op 0.91
BeaconState.hashTreeRoot - 250000 balances 113.06 ms/op 96.995 ms/op 1.17
aggregationBits - 2048 els - zipIndexesInBitList 37.482 us/op 29.152 us/op 1.29
regular array get 100000 times 80.920 us/op 48.500 us/op 1.67
wrappedArray get 100000 times 80.935 us/op 49.849 us/op 1.62
arrayWithProxy get 100000 times 34.570 ms/op 29.262 ms/op 1.18
ssz.Root.equals 583.00 ns/op 524.00 ns/op 1.11
byteArrayEquals 572.00 ns/op 519.00 ns/op 1.10
shuffle list - 16384 els 13.274 ms/op 11.679 ms/op 1.14
shuffle list - 250000 els 194.56 ms/op 144.16 ms/op 1.35
processSlot - 1 slots 15.054 us/op 12.931 us/op 1.16
processSlot - 32 slots 2.0015 ms/op 1.9784 ms/op 1.01
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 477.57 us/op 372.21 us/op 1.28
getCommitteeAssignments - req 1 vs - 250000 vc 6.3450 ms/op 4.6527 ms/op 1.36
getCommitteeAssignments - req 100 vs - 250000 vc 8.9111 ms/op 6.7033 ms/op 1.33
getCommitteeAssignments - req 1000 vs - 250000 vc 9.5478 ms/op 6.7332 ms/op 1.42
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 11.840 ns/op 8.5100 ns/op 1.39
state getBlockRootAtSlot - 250000 vs - 7PWei 1.4529 us/op 1.2590 us/op 1.15
computeProposers - vc 250000 20.612 ms/op 16.538 ms/op 1.25
computeEpochShuffling - vc 250000 202.23 ms/op 146.49 ms/op 1.38
getNextSyncCommittee - vc 250000 341.42 ms/op 299.83 ms/op 1.14

by benchmarkbot/action

@g11tech g11tech merged commit 1708e4a into unstable Sep 23, 2022
@g11tech g11tech deleted the g11tech/eth1-slow-batchsize-increase branch September 23, 2022 14:36
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