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

fix(validator): abortable sleep in prepareForNextEpoch #5666

Merged
merged 1 commit into from
Jun 19, 2023

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Jun 18, 2023

Motivation

Should be abortable to be able to gracefully shut down vc process without having up to 1/3 slot seconds delay.

Description

Forward abort signal to sleep fn inside prepareForNextEpoch to make it abortable.

@nflaig nflaig requested a review from a team as a code owner June 18, 2023 13:02
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: a32b230 Previous: 483aad7 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 493.31 us/op 739.13 us/op 0.67
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 50.534 us/op 45.357 us/op 1.11
BLS verify - blst-native 1.2587 ms/op 1.2047 ms/op 1.04
BLS verifyMultipleSignatures 3 - blst-native 2.6675 ms/op 2.4485 ms/op 1.09
BLS verifyMultipleSignatures 8 - blst-native 5.5977 ms/op 5.2533 ms/op 1.07
BLS verifyMultipleSignatures 32 - blst-native 20.168 ms/op 19.002 ms/op 1.06
BLS aggregatePubkeys 32 - blst-native 26.836 us/op 25.511 us/op 1.05
BLS aggregatePubkeys 128 - blst-native 105.07 us/op 99.338 us/op 1.06
getAttestationsForBlock 57.361 ms/op 50.441 ms/op 1.14
isKnown best case - 1 super set check 262.00 ns/op 260.00 ns/op 1.01
isKnown normal case - 2 super set checks 255.00 ns/op 249.00 ns/op 1.02
isKnown worse case - 16 super set checks 262.00 ns/op 256.00 ns/op 1.02
CheckpointStateCache - add get delete 5.6640 us/op 4.8840 us/op 1.16
validate gossip signedAggregateAndProof - struct 2.8662 ms/op 2.7509 ms/op 1.04
validate gossip attestation - struct 1.4069 ms/op 1.3143 ms/op 1.07
pickEth1Vote - no votes 1.2886 ms/op 1.2265 ms/op 1.05
pickEth1Vote - max votes 11.497 ms/op 10.347 ms/op 1.11
pickEth1Vote - Eth1Data hashTreeRoot value x2048 9.1232 ms/op 8.6894 ms/op 1.05
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 14.934 ms/op 14.296 ms/op 1.04
pickEth1Vote - Eth1Data fastSerialize value x2048 618.29 us/op 636.44 us/op 0.97
pickEth1Vote - Eth1Data fastSerialize tree x2048 7.9020 ms/op 6.6705 ms/op 1.18
bytes32 toHexString 483.00 ns/op 486.00 ns/op 0.99
bytes32 Buffer.toString(hex) 348.00 ns/op 343.00 ns/op 1.01
bytes32 Buffer.toString(hex) from Uint8Array 551.00 ns/op 549.00 ns/op 1.00
bytes32 Buffer.toString(hex) + 0x 352.00 ns/op 342.00 ns/op 1.03
Object access 1 prop 0.16100 ns/op 0.16400 ns/op 0.98
Map access 1 prop 0.15400 ns/op 0.15600 ns/op 0.99
Object get x1000 6.4920 ns/op 6.7030 ns/op 0.97
Map get x1000 0.55900 ns/op 0.51300 ns/op 1.09
Object set x1000 51.442 ns/op 52.835 ns/op 0.97
Map set x1000 43.174 ns/op 44.072 ns/op 0.98
Return object 10000 times 0.23640 ns/op 0.23880 ns/op 0.99
Throw Error 10000 times 4.2251 us/op 4.2119 us/op 1.00
fastMsgIdFn sha256 / 200 bytes 3.4840 us/op 3.4700 us/op 1.00
fastMsgIdFn h32 xxhash / 200 bytes 279.00 ns/op 281.00 ns/op 0.99
fastMsgIdFn h64 xxhash / 200 bytes 388.00 ns/op 383.00 ns/op 1.01
fastMsgIdFn sha256 / 1000 bytes 11.559 us/op 11.764 us/op 0.98
fastMsgIdFn h32 xxhash / 1000 bytes 410.00 ns/op 420.00 ns/op 0.98
fastMsgIdFn h64 xxhash / 1000 bytes 457.00 ns/op 474.00 ns/op 0.96
fastMsgIdFn sha256 / 10000 bytes 103.89 us/op 103.51 us/op 1.00
fastMsgIdFn h32 xxhash / 10000 bytes 1.8890 us/op 1.9270 us/op 0.98
fastMsgIdFn h64 xxhash / 10000 bytes 1.3290 us/op 1.3640 us/op 0.97
enrSubnets - fastDeserialize 64 bits 1.2750 us/op 1.2750 us/op 1.00
enrSubnets - ssz BitVector 64 bits 485.00 ns/op 478.00 ns/op 1.01
enrSubnets - fastDeserialize 4 bits 166.00 ns/op 165.00 ns/op 1.01
enrSubnets - ssz BitVector 4 bits 494.00 ns/op 480.00 ns/op 1.03
prioritizePeers score -10:0 att 32-0.1 sync 2-0 104.91 us/op 104.64 us/op 1.00
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 131.51 us/op 129.67 us/op 1.01
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 165.68 us/op 169.17 us/op 0.98
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 303.73 us/op 304.98 us/op 1.00
prioritizePeers score 0:0 att 64-1 sync 4-1 368.55 us/op 364.35 us/op 1.01
array of 16000 items push then shift 1.6543 us/op 1.6114 us/op 1.03
LinkedList of 16000 items push then shift 8.7990 ns/op 8.8030 ns/op 1.00
array of 16000 items push then pop 79.542 ns/op 78.051 ns/op 1.02
LinkedList of 16000 items push then pop 8.5380 ns/op 8.5320 ns/op 1.00
array of 24000 items push then shift 2.3812 us/op 2.3406 us/op 1.02
LinkedList of 24000 items push then shift 8.8310 ns/op 8.6430 ns/op 1.02
array of 24000 items push then pop 73.691 ns/op 70.065 ns/op 1.05
LinkedList of 24000 items push then pop 8.5290 ns/op 8.3840 ns/op 1.02
intersect bitArray bitLen 8 13.466 ns/op 13.154 ns/op 1.02
intersect array and set length 8 77.708 ns/op 76.902 ns/op 1.01
intersect bitArray bitLen 128 44.602 ns/op 43.741 ns/op 1.02
intersect array and set length 128 1.0524 us/op 1.0573 us/op 1.00
Buffer.concat 32 items 2.8740 us/op 2.7430 us/op 1.05
Uint8Array.set 32 items 2.4540 us/op 2.5280 us/op 0.97
transfer serialized Status (84 B) 2.0840 us/op 2.0420 us/op 1.02
copy serialized Status (84 B) 1.7930 us/op 1.8190 us/op 0.99
transfer serialized SignedVoluntaryExit (112 B) 2.1050 us/op 2.2260 us/op 0.95
copy serialized SignedVoluntaryExit (112 B) 1.8500 us/op 1.8430 us/op 1.00
transfer serialized ProposerSlashing (416 B) 2.5920 us/op 2.8120 us/op 0.92
copy serialized ProposerSlashing (416 B) 2.5700 us/op 2.8890 us/op 0.89
transfer serialized Attestation (485 B) 2.5380 us/op 3.2780 us/op 0.77
copy serialized Attestation (485 B) 2.3430 us/op 3.2440 us/op 0.72
transfer serialized AttesterSlashing (33232 B) 2.8560 us/op 3.3590 us/op 0.85
copy serialized AttesterSlashing (33232 B) 5.7360 us/op 6.5930 us/op 0.87
transfer serialized Small SignedBeaconBlock (128000 B) 2.8830 us/op 3.6430 us/op 0.79
copy serialized Small SignedBeaconBlock (128000 B) 12.775 us/op 13.825 us/op 0.92
transfer serialized Avg SignedBeaconBlock (200000 B) 3.5100 us/op 3.8560 us/op 0.91
copy serialized Avg SignedBeaconBlock (200000 B) 18.134 us/op 19.844 us/op 0.91
transfer serialized BlobsSidecar (524380 B) 3.1610 us/op 3.6630 us/op 0.86
copy serialized BlobsSidecar (524380 B) 171.30 us/op 97.505 us/op 1.76
transfer serialized Big SignedBeaconBlock (1000000 B) 3.3830 us/op 3.6920 us/op 0.92
copy serialized Big SignedBeaconBlock (1000000 B) 257.21 us/op 246.86 us/op 1.04
pass gossip attestations to forkchoice per slot 2.6266 ms/op 2.6318 ms/op 1.00
forkChoice updateHead vc 100000 bc 64 eq 0 2.0774 ms/op 2.0061 ms/op 1.04
forkChoice updateHead vc 600000 bc 64 eq 0 11.367 ms/op 11.589 ms/op 0.98
forkChoice updateHead vc 1000000 bc 64 eq 0 21.503 ms/op 20.798 ms/op 1.03
forkChoice updateHead vc 600000 bc 320 eq 0 16.760 ms/op 16.820 ms/op 1.00
forkChoice updateHead vc 600000 bc 1200 eq 0 78.526 ms/op 79.254 ms/op 0.99
forkChoice updateHead vc 600000 bc 64 eq 1000 20.187 ms/op 19.974 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 10000 22.086 ms/op 22.211 ms/op 0.99
forkChoice updateHead vc 600000 bc 64 eq 300000 30.223 ms/op 31.183 ms/op 0.97
computeDeltas 3.8079 ms/op 3.9755 ms/op 0.96
computeProposerBoostScoreFromBalances 1.7687 ms/op 1.7596 ms/op 1.01
altair processAttestation - 250000 vs - 7PWei normalcase 2.1946 ms/op 2.0648 ms/op 1.06
altair processAttestation - 250000 vs - 7PWei worstcase 3.7724 ms/op 3.2650 ms/op 1.16
altair processAttestation - setStatus - 1/6 committees join 140.05 us/op 137.68 us/op 1.02
altair processAttestation - setStatus - 1/3 committees join 278.23 us/op 271.45 us/op 1.02
altair processAttestation - setStatus - 1/2 committees join 372.21 us/op 353.89 us/op 1.05
altair processAttestation - setStatus - 2/3 committees join 470.03 us/op 443.78 us/op 1.06
altair processAttestation - setStatus - 4/5 committees join 658.08 us/op 646.53 us/op 1.02
altair processAttestation - setStatus - 100% committees join 755.29 us/op 751.56 us/op 1.00
altair processBlock - 250000 vs - 7PWei normalcase 18.833 ms/op 17.885 ms/op 1.05
altair processBlock - 250000 vs - 7PWei normalcase hashState 24.759 ms/op 28.495 ms/op 0.87
altair processBlock - 250000 vs - 7PWei worstcase 51.919 ms/op 48.210 ms/op 1.08
altair processBlock - 250000 vs - 7PWei worstcase hashState 67.076 ms/op 70.030 ms/op 0.96
phase0 processBlock - 250000 vs - 7PWei normalcase 2.0008 ms/op 1.9028 ms/op 1.05
phase0 processBlock - 250000 vs - 7PWei worstcase 27.836 ms/op 28.549 ms/op 0.98
altair processEth1Data - 250000 vs - 7PWei normalcase 475.31 us/op 466.44 us/op 1.02
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 6.9060 us/op 7.0420 us/op 0.98
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 19.681 us/op 20.375 us/op 0.97
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 8.4560 us/op 8.2480 us/op 1.03
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 6.6220 us/op 6.2380 us/op 1.06
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 74.262 us/op 80.180 us/op 0.93
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 620.64 us/op 620.62 us/op 1.00
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 862.50 us/op 905.86 us/op 0.95
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 894.88 us/op 862.36 us/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.2567 ms/op 2.1709 ms/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.5082 ms/op 1.7393 ms/op 0.87
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.6413 ms/op 3.8309 ms/op 0.95
Tree 40 250000 create 315.23 ms/op 294.20 ms/op 1.07
Tree 40 250000 get(125000) 176.56 ns/op 169.66 ns/op 1.04
Tree 40 250000 set(125000) 918.18 ns/op 833.68 ns/op 1.10
Tree 40 250000 toArray() 16.847 ms/op 16.574 ms/op 1.02
Tree 40 250000 iterate all - toArray() + loop 17.046 ms/op 16.493 ms/op 1.03
Tree 40 250000 iterate all - get(i) 66.811 ms/op 63.480 ms/op 1.05
MutableVector 250000 create 9.5193 ms/op 9.9738 ms/op 0.95
MutableVector 250000 get(125000) 6.3200 ns/op 6.4430 ns/op 0.98
MutableVector 250000 set(125000) 240.38 ns/op 222.80 ns/op 1.08
MutableVector 250000 toArray() 2.6805 ms/op 2.7527 ms/op 0.97
MutableVector 250000 iterate all - toArray() + loop 2.7682 ms/op 2.7444 ms/op 1.01
MutableVector 250000 iterate all - get(i) 1.5048 ms/op 1.4249 ms/op 1.06
Array 250000 create 2.4421 ms/op 2.4018 ms/op 1.02
Array 250000 clone - spread 1.0919 ms/op 1.0316 ms/op 1.06
Array 250000 get(125000) 0.55000 ns/op 0.51200 ns/op 1.07
Array 250000 set(125000) 0.62800 ns/op 0.58500 ns/op 1.07
Array 250000 iterate all - loop 81.245 us/op 101.43 us/op 0.80
effectiveBalanceIncrements clone Uint8Array 300000 27.504 us/op 24.066 us/op 1.14
effectiveBalanceIncrements clone MutableVector 300000 350.00 ns/op 307.00 ns/op 1.14
effectiveBalanceIncrements rw all Uint8Array 300000 166.00 us/op 161.44 us/op 1.03
effectiveBalanceIncrements rw all MutableVector 300000 78.292 ms/op 72.886 ms/op 1.07
phase0 afterProcessEpoch - 250000 vs - 7PWei 112.25 ms/op 110.48 ms/op 1.02
phase0 beforeProcessEpoch - 250000 vs - 7PWei 40.721 ms/op 40.012 ms/op 1.02
altair processEpoch - mainnet_e81889 322.81 ms/op 297.21 ms/op 1.09
mainnet_e81889 - altair beforeProcessEpoch 64.776 ms/op 62.535 ms/op 1.04
mainnet_e81889 - altair processJustificationAndFinalization 16.858 us/op 16.385 us/op 1.03
mainnet_e81889 - altair processInactivityUpdates 5.4486 ms/op 5.0540 ms/op 1.08
mainnet_e81889 - altair processRewardsAndPenalties 66.499 ms/op 66.348 ms/op 1.00
mainnet_e81889 - altair processRegistryUpdates 2.5100 us/op 2.6880 us/op 0.93
mainnet_e81889 - altair processSlashings 464.00 ns/op 524.00 ns/op 0.89
mainnet_e81889 - altair processEth1DataReset 482.00 ns/op 560.00 ns/op 0.86
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.1926 ms/op 1.2330 ms/op 0.97
mainnet_e81889 - altair processSlashingsReset 4.9510 us/op 4.5440 us/op 1.09
mainnet_e81889 - altair processRandaoMixesReset 4.6250 us/op 4.5500 us/op 1.02
mainnet_e81889 - altair processHistoricalRootsUpdate 755.00 ns/op 712.00 ns/op 1.06
mainnet_e81889 - altair processParticipationFlagUpdates 3.8790 us/op 2.0400 us/op 1.90
mainnet_e81889 - altair processSyncCommitteeUpdates 762.00 ns/op 918.00 ns/op 0.83
mainnet_e81889 - altair afterProcessEpoch 124.35 ms/op 121.06 ms/op 1.03
phase0 processEpoch - mainnet_e58758 359.26 ms/op 356.61 ms/op 1.01
mainnet_e58758 - phase0 beforeProcessEpoch 132.89 ms/op 131.21 ms/op 1.01
mainnet_e58758 - phase0 processJustificationAndFinalization 17.071 us/op 17.219 us/op 0.99
mainnet_e58758 - phase0 processRewardsAndPenalties 59.999 ms/op 60.687 ms/op 0.99
mainnet_e58758 - phase0 processRegistryUpdates 7.9900 us/op 7.7840 us/op 1.03
mainnet_e58758 - phase0 processSlashings 612.00 ns/op 546.00 ns/op 1.12
mainnet_e58758 - phase0 processEth1DataReset 489.00 ns/op 570.00 ns/op 0.86
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.0130 ms/op 944.91 us/op 1.07
mainnet_e58758 - phase0 processSlashingsReset 4.6710 us/op 3.7570 us/op 1.24
mainnet_e58758 - phase0 processRandaoMixesReset 4.4840 us/op 4.6570 us/op 0.96
mainnet_e58758 - phase0 processHistoricalRootsUpdate 748.00 ns/op 726.00 ns/op 1.03
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.1970 us/op 4.3760 us/op 0.96
mainnet_e58758 - phase0 afterProcessEpoch 97.228 ms/op 95.123 ms/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2735 ms/op 1.2173 ms/op 1.05
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6568 ms/op 1.4262 ms/op 1.16
altair processInactivityUpdates - 250000 normalcase 23.061 ms/op 23.758 ms/op 0.97
altair processInactivityUpdates - 250000 worstcase 22.087 ms/op 25.993 ms/op 0.85
phase0 processRegistryUpdates - 250000 normalcase 7.3250 us/op 6.9380 us/op 1.06
phase0 processRegistryUpdates - 250000 badcase_full_deposits 286.36 us/op 233.84 us/op 1.22
phase0 processRegistryUpdates - 250000 worstcase 0.5 108.66 ms/op 126.67 ms/op 0.86
altair processRewardsAndPenalties - 250000 normalcase 55.474 ms/op 66.822 ms/op 0.83
altair processRewardsAndPenalties - 250000 worstcase 55.058 ms/op 70.189 ms/op 0.78
phase0 getAttestationDeltas - 250000 normalcase 6.9179 ms/op 6.4507 ms/op 1.07
phase0 getAttestationDeltas - 250000 worstcase 8.7102 ms/op 6.3789 ms/op 1.37
phase0 processSlashings - 250000 worstcase 3.8327 ms/op 3.4635 ms/op 1.11
altair processSyncCommitteeUpdates - 250000 183.13 ms/op 166.68 ms/op 1.10
BeaconState.hashTreeRoot - No change 270.00 ns/op 256.00 ns/op 1.05
BeaconState.hashTreeRoot - 1 full validator 52.805 us/op 52.367 us/op 1.01
BeaconState.hashTreeRoot - 32 full validator 530.34 us/op 516.90 us/op 1.03
BeaconState.hashTreeRoot - 512 full validator 5.2158 ms/op 5.5523 ms/op 0.94
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 61.694 us/op 62.563 us/op 0.99
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 880.88 us/op 874.63 us/op 1.01
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 11.424 ms/op 10.834 ms/op 1.05
BeaconState.hashTreeRoot - 1 balances 48.845 us/op 47.610 us/op 1.03
BeaconState.hashTreeRoot - 32 balances 448.81 us/op 454.32 us/op 0.99
BeaconState.hashTreeRoot - 512 balances 4.3015 ms/op 4.2618 ms/op 1.01
BeaconState.hashTreeRoot - 250000 balances 73.793 ms/op 68.552 ms/op 1.08
aggregationBits - 2048 els - zipIndexesInBitList 16.677 us/op 15.115 us/op 1.10
regular array get 100000 times 41.156 us/op 32.371 us/op 1.27
wrappedArray get 100000 times 32.706 us/op 32.350 us/op 1.01
arrayWithProxy get 100000 times 15.837 ms/op 15.431 ms/op 1.03
ssz.Root.equals 550.00 ns/op 536.00 ns/op 1.03
byteArrayEquals 544.00 ns/op 529.00 ns/op 1.03
shuffle list - 16384 els 6.8187 ms/op 6.7194 ms/op 1.01
shuffle list - 250000 els 100.31 ms/op 98.262 ms/op 1.02
processSlot - 1 slots 8.6090 us/op 8.5480 us/op 1.01
processSlot - 32 slots 1.3131 ms/op 1.3011 ms/op 1.01
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 33.414 ms/op 37.217 ms/op 0.90
getCommitteeAssignments - req 1 vs - 250000 vc 2.8880 ms/op 2.8384 ms/op 1.02
getCommitteeAssignments - req 100 vs - 250000 vc 4.1410 ms/op 4.0267 ms/op 1.03
getCommitteeAssignments - req 1000 vs - 250000 vc 4.4863 ms/op 4.3924 ms/op 1.02
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.7600 ns/op 4.2900 ns/op 1.11
state getBlockRootAtSlot - 250000 vs - 7PWei 586.48 ns/op 919.52 ns/op 0.64
computeProposers - vc 250000 10.244 ms/op 10.158 ms/op 1.01
computeEpochShuffling - vc 250000 105.79 ms/op 99.233 ms/op 1.07
getNextSyncCommittee - vc 250000 175.80 ms/op 176.55 ms/op 1.00
computeSigningRoot for AttestationData 13.926 us/op 13.281 us/op 1.05
hash AttestationData serialized data then Buffer.toString(base64) 2.4383 us/op 2.3358 us/op 1.04
toHexString serialized data 1.1415 us/op 1.0182 us/op 1.12
Buffer.toString(base64) 325.59 ns/op 303.60 ns/op 1.07

by benchmarkbot/action

@dapplion dapplion merged commit fd0f476 into unstable Jun 19, 2023
11 checks passed
@dapplion dapplion deleted the nflaig/abortable-prepare-next-epoch branch June 19, 2023 08:04
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.10.0 🎉

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

4 participants