Skip to content

Conversation

@twoeths
Copy link
Contributor

@twoeths twoeths commented Mar 24, 2023

Motivation

  • Follow the spec to make the implementation easier to maintain in the future

Description

@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: a72ac08 Previous: ac77c6f Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 677.25 us/op 1.3514 ms/op 0.50
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 45.442 us/op 73.268 us/op 0.62
BLS verify - blst-native 1.1885 ms/op 1.4163 ms/op 0.84
BLS verifyMultipleSignatures 3 - blst-native 2.4661 ms/op 2.8833 ms/op 0.86
BLS verifyMultipleSignatures 8 - blst-native 5.1870 ms/op 6.1700 ms/op 0.84
BLS verifyMultipleSignatures 32 - blst-native 18.716 ms/op 21.248 ms/op 0.88
BLS aggregatePubkeys 32 - blst-native 25.083 us/op 29.505 us/op 0.85
BLS aggregatePubkeys 128 - blst-native 97.633 us/op 107.60 us/op 0.91
getAttestationsForBlock 52.865 ms/op 87.419 ms/op 0.60
isKnown best case - 1 super set check 251.00 ns/op 301.00 ns/op 0.83
isKnown normal case - 2 super set checks 248.00 ns/op 307.00 ns/op 0.81
isKnown worse case - 16 super set checks 246.00 ns/op 292.00 ns/op 0.84
CheckpointStateCache - add get delete 4.8570 us/op 6.7390 us/op 0.72
validate gossip signedAggregateAndProof - struct 2.6946 ms/op 2.9639 ms/op 0.91
validate gossip attestation - struct 1.3251 ms/op 1.5476 ms/op 0.86
pickEth1Vote - no votes 1.2429 ms/op 1.5972 ms/op 0.78
pickEth1Vote - max votes 9.9733 ms/op 16.635 ms/op 0.60
pickEth1Vote - Eth1Data hashTreeRoot value x2048 8.6820 ms/op 12.172 ms/op 0.71
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 14.803 ms/op 21.993 ms/op 0.67
pickEth1Vote - Eth1Data fastSerialize value x2048 627.49 us/op 997.57 us/op 0.63
pickEth1Vote - Eth1Data fastSerialize tree x2048 7.9233 ms/op 10.518 ms/op 0.75
bytes32 toHexString 476.00 ns/op 872.00 ns/op 0.55
bytes32 Buffer.toString(hex) 328.00 ns/op 468.00 ns/op 0.70
bytes32 Buffer.toString(hex) from Uint8Array 531.00 ns/op 694.00 ns/op 0.77
bytes32 Buffer.toString(hex) + 0x 325.00 ns/op 467.00 ns/op 0.70
Object access 1 prop 0.16000 ns/op 0.23000 ns/op 0.70
Map access 1 prop 0.15200 ns/op 0.18700 ns/op 0.81
Object get x1000 6.7410 ns/op 10.909 ns/op 0.62
Map get x1000 0.60100 ns/op 0.85400 ns/op 0.70
Object set x1000 51.098 ns/op 84.894 ns/op 0.60
Map set x1000 43.463 ns/op 63.142 ns/op 0.69
Return object 10000 times 0.22860 ns/op 0.37480 ns/op 0.61
Throw Error 10000 times 4.0235 us/op 5.0684 us/op 0.79
fastMsgIdFn sha256 / 200 bytes 3.3620 us/op 3.8600 us/op 0.87
fastMsgIdFn h32 xxhash / 200 bytes 281.00 ns/op 353.00 ns/op 0.80
fastMsgIdFn h64 xxhash / 200 bytes 398.00 ns/op 495.00 ns/op 0.80
fastMsgIdFn sha256 / 1000 bytes 11.234 us/op 12.962 us/op 0.87
fastMsgIdFn h32 xxhash / 1000 bytes 419.00 ns/op 492.00 ns/op 0.85
fastMsgIdFn h64 xxhash / 1000 bytes 478.00 ns/op 578.00 ns/op 0.83
fastMsgIdFn sha256 / 10000 bytes 101.08 us/op 112.08 us/op 0.90
fastMsgIdFn h32 xxhash / 10000 bytes 1.8760 us/op 2.1400 us/op 0.88
fastMsgIdFn h64 xxhash / 10000 bytes 1.3480 us/op 1.5690 us/op 0.86
enrSubnets - fastDeserialize 64 bits 1.2600 us/op 2.1710 us/op 0.58
enrSubnets - ssz BitVector 64 bits 493.00 ns/op 679.00 ns/op 0.73
enrSubnets - fastDeserialize 4 bits 181.00 ns/op 248.00 ns/op 0.73
enrSubnets - ssz BitVector 4 bits 493.00 ns/op 700.00 ns/op 0.70
prioritizePeers score -10:0 att 32-0.1 sync 2-0 102.02 us/op 163.34 us/op 0.62
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 132.44 us/op 175.23 us/op 0.76
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 162.99 us/op 210.60 us/op 0.77
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 293.63 us/op 333.69 us/op 0.88
prioritizePeers score 0:0 att 64-1 sync 4-1 356.47 us/op 378.55 us/op 0.94
array of 16000 items push then shift 1.6025 us/op 1.7502 us/op 0.92
LinkedList of 16000 items push then shift 8.6120 ns/op 9.2670 ns/op 0.93
array of 16000 items push then pop 94.225 ns/op 99.992 ns/op 0.94
LinkedList of 16000 items push then pop 8.8870 ns/op 8.6480 ns/op 1.03
array of 24000 items push then shift 2.3792 us/op 2.4946 us/op 0.95
LinkedList of 24000 items push then shift 9.1540 ns/op 9.2620 ns/op 0.99
array of 24000 items push then pop 82.062 ns/op 80.192 ns/op 1.02
LinkedList of 24000 items push then pop 8.8790 ns/op 8.7920 ns/op 1.01
intersect bitArray bitLen 8 13.047 ns/op 14.083 ns/op 0.93
intersect array and set length 8 91.718 ns/op 78.806 ns/op 1.16
intersect bitArray bitLen 128 44.486 ns/op 44.612 ns/op 1.00
intersect array and set length 128 1.2658 us/op 1.0661 us/op 1.19
Buffer.concat 32 items 3.0390 us/op 2.7030 us/op 1.12
Uint8Array.set 32 items 2.2360 us/op 2.1780 us/op 1.03
pass gossip attestations to forkchoice per slot 2.8828 ms/op 3.0293 ms/op 0.95
computeDeltas 3.2523 ms/op 3.1452 ms/op 1.03
computeProposerBoostScoreFromBalances 1.8829 ms/op 1.8342 ms/op 1.03
altair processAttestation - 250000 vs - 7PWei normalcase 3.3507 ms/op 2.6876 ms/op 1.25
altair processAttestation - 250000 vs - 7PWei worstcase 5.0002 ms/op 4.8372 ms/op 1.03
altair processAttestation - setStatus - 1/6 committees join 153.41 us/op 155.07 us/op 0.99
altair processAttestation - setStatus - 1/3 committees join 294.64 us/op 284.84 us/op 1.03
altair processAttestation - setStatus - 1/2 committees join 394.17 us/op 387.15 us/op 1.02
altair processAttestation - setStatus - 2/3 committees join 500.09 us/op 492.99 us/op 1.01
altair processAttestation - setStatus - 4/5 committees join 698.08 us/op 688.55 us/op 1.01
altair processAttestation - setStatus - 100% committees join 849.22 us/op 781.79 us/op 1.09
altair processBlock - 250000 vs - 7PWei normalcase 21.788 ms/op 17.086 ms/op 1.28
altair processBlock - 250000 vs - 7PWei normalcase hashState 29.729 ms/op 28.814 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase 56.920 ms/op 55.995 ms/op 1.02
altair processBlock - 250000 vs - 7PWei worstcase hashState 78.059 ms/op 71.757 ms/op 1.09
phase0 processBlock - 250000 vs - 7PWei normalcase 2.5100 ms/op 2.2320 ms/op 1.12
phase0 processBlock - 250000 vs - 7PWei worstcase 33.102 ms/op 31.519 ms/op 1.05
altair processEth1Data - 250000 vs - 7PWei normalcase 627.11 us/op 598.60 us/op 1.05
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 12.514 us/op 9.2960 us/op 1.35
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 36.702 us/op 30.000 us/op 1.22
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 16.124 us/op 11.612 us/op 1.39
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 11.275 us/op 10.800 us/op 1.04
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 122.89 us/op 109.54 us/op 1.12
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 676.27 us/op 655.23 us/op 1.03
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 16384 925.22 us/op 914.83 us/op 1.01
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 16384 921.61 us/op 869.16 us/op 1.06
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 16384 2.6472 ms/op 2.4213 ms/op 1.09
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 16384 1.7543 ms/op 1.5723 ms/op 1.12
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 16384 4.9931 ms/op 3.9014 ms/op 1.28
Tree 40 250000 create 428.29 ms/op 317.46 ms/op 1.35
Tree 40 250000 get(125000) 205.17 ns/op 199.25 ns/op 1.03
Tree 40 250000 set(125000) 1.0988 us/op 1.1707 us/op 0.94
Tree 40 250000 toArray() 23.139 ms/op 21.741 ms/op 1.06
Tree 40 250000 iterate all - toArray() + loop 23.518 ms/op 21.422 ms/op 1.10
Tree 40 250000 iterate all - get(i) 79.282 ms/op 74.717 ms/op 1.06
MutableVector 250000 create 12.630 ms/op 10.795 ms/op 1.17
MutableVector 250000 get(125000) 6.7730 ns/op 6.3270 ns/op 1.07
MutableVector 250000 set(125000) 313.04 ns/op 256.30 ns/op 1.22
MutableVector 250000 toArray() 4.1015 ms/op 2.7015 ms/op 1.52
MutableVector 250000 iterate all - toArray() + loop 4.2917 ms/op 3.2822 ms/op 1.31
MutableVector 250000 iterate all - get(i) 1.6044 ms/op 1.5278 ms/op 1.05
Array 250000 create 3.9625 ms/op 2.5343 ms/op 1.56
Array 250000 clone - spread 1.4199 ms/op 1.2674 ms/op 1.12
Array 250000 get(125000) 0.69200 ns/op 0.61200 ns/op 1.13
Array 250000 set(125000) 0.77300 ns/op 0.68500 ns/op 1.13
Array 250000 iterate all - loop 92.117 us/op 83.162 us/op 1.11
effectiveBalanceIncrements clone Uint8Array 300000 54.867 us/op 30.183 us/op 1.82
effectiveBalanceIncrements clone MutableVector 300000 456.00 ns/op 390.00 ns/op 1.17
effectiveBalanceIncrements rw all Uint8Array 300000 175.94 us/op 168.74 us/op 1.04
effectiveBalanceIncrements rw all MutableVector 300000 127.52 ms/op 87.270 ms/op 1.46
phase0 afterProcessEpoch - 250000 vs - 7PWei 121.81 ms/op 120.10 ms/op 1.01
phase0 beforeProcessEpoch - 250000 vs - 7PWei 39.289 ms/op 36.095 ms/op 1.09
altair processEpoch - mainnet_e81889 346.13 ms/op 306.41 ms/op 1.13
mainnet_e81889 - altair beforeProcessEpoch 55.208 ms/op 67.688 ms/op 0.82
mainnet_e81889 - altair processJustificationAndFinalization 21.708 us/op 16.763 us/op 1.29
mainnet_e81889 - altair processInactivityUpdates 6.4303 ms/op 5.4399 ms/op 1.18
mainnet_e81889 - altair processRewardsAndPenalties 59.466 ms/op 66.131 ms/op 0.90
mainnet_e81889 - altair processRegistryUpdates 4.7040 us/op 2.8180 us/op 1.67
mainnet_e81889 - altair processSlashings 607.00 ns/op 548.00 ns/op 1.11
mainnet_e81889 - altair processEth1DataReset 752.00 ns/op 558.00 ns/op 1.35
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.3027 ms/op 1.2420 ms/op 1.05
mainnet_e81889 - altair processSlashingsReset 5.2440 us/op 4.6630 us/op 1.12
mainnet_e81889 - altair processRandaoMixesReset 4.8300 us/op 4.2720 us/op 1.13
mainnet_e81889 - altair processHistoricalRootsUpdate 957.00 ns/op 606.00 ns/op 1.58
mainnet_e81889 - altair processParticipationFlagUpdates 5.2270 us/op 3.2540 us/op 1.61
mainnet_e81889 - altair processSyncCommitteeUpdates 756.00 ns/op 895.00 ns/op 0.84
mainnet_e81889 - altair afterProcessEpoch 135.81 ms/op 129.76 ms/op 1.05
phase0 processEpoch - mainnet_e58758 401.97 ms/op 329.12 ms/op 1.22
mainnet_e58758 - phase0 beforeProcessEpoch 136.08 ms/op 106.14 ms/op 1.28
mainnet_e58758 - phase0 processJustificationAndFinalization 17.136 us/op 16.083 us/op 1.07
mainnet_e58758 - phase0 processRewardsAndPenalties 63.329 ms/op 54.412 ms/op 1.16
mainnet_e58758 - phase0 processRegistryUpdates 7.6780 us/op 7.8630 us/op 0.98
mainnet_e58758 - phase0 processSlashings 498.00 ns/op 524.00 ns/op 0.95
mainnet_e58758 - phase0 processEth1DataReset 439.00 ns/op 472.00 ns/op 0.93
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 991.22 us/op 971.44 us/op 1.02
mainnet_e58758 - phase0 processSlashingsReset 3.9930 us/op 3.8130 us/op 1.05
mainnet_e58758 - phase0 processRandaoMixesReset 4.2910 us/op 4.6630 us/op 0.92
mainnet_e58758 - phase0 processHistoricalRootsUpdate 791.00 ns/op 999.00 ns/op 0.79
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.2020 us/op 4.4640 us/op 0.94
mainnet_e58758 - phase0 afterProcessEpoch 97.488 ms/op 95.769 ms/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2390 ms/op 1.2333 ms/op 1.00
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5398 ms/op 1.5434 ms/op 1.00
altair processInactivityUpdates - 250000 normalcase 23.723 ms/op 25.962 ms/op 0.91
altair processInactivityUpdates - 250000 worstcase 25.101 ms/op 27.495 ms/op 0.91
phase0 processRegistryUpdates - 250000 normalcase 6.2750 us/op 6.9530 us/op 0.90
phase0 processRegistryUpdates - 250000 badcase_full_deposits 232.29 us/op 239.22 us/op 0.97
phase0 processRegistryUpdates - 250000 worstcase 0.5 124.09 ms/op 134.23 ms/op 0.92
altair processRewardsAndPenalties - 250000 normalcase 67.443 ms/op 67.220 ms/op 1.00
altair processRewardsAndPenalties - 250000 worstcase 68.475 ms/op 69.682 ms/op 0.98
phase0 getAttestationDeltas - 250000 normalcase 6.4696 ms/op 6.8663 ms/op 0.94
phase0 getAttestationDeltas - 250000 worstcase 6.4476 ms/op 6.8279 ms/op 0.94
phase0 processSlashings - 250000 worstcase 3.5462 ms/op 3.6571 ms/op 0.97
altair processSyncCommitteeUpdates - 250000 173.57 ms/op 183.18 ms/op 0.95
BeaconState.hashTreeRoot - No change 269.00 ns/op 267.00 ns/op 1.01
BeaconState.hashTreeRoot - 1 full validator 52.393 us/op 52.959 us/op 0.99
BeaconState.hashTreeRoot - 32 full validator 501.17 us/op 521.33 us/op 0.96
BeaconState.hashTreeRoot - 512 full validator 5.1679 ms/op 5.8735 ms/op 0.88
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 63.117 us/op 63.217 us/op 1.00
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 902.77 us/op 919.53 us/op 0.98
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 11.063 ms/op 11.904 ms/op 0.93
BeaconState.hashTreeRoot - 1 balances 49.988 us/op 49.228 us/op 1.02
BeaconState.hashTreeRoot - 32 balances 428.46 us/op 448.59 us/op 0.96
BeaconState.hashTreeRoot - 512 balances 4.3022 ms/op 4.5551 ms/op 0.94
BeaconState.hashTreeRoot - 250000 balances 70.069 ms/op 71.903 ms/op 0.97
aggregationBits - 2048 els - zipIndexesInBitList 15.499 us/op 16.280 us/op 0.95
regular array get 100000 times 43.951 us/op 33.052 us/op 1.33
wrappedArray get 100000 times 32.916 us/op 33.069 us/op 1.00
arrayWithProxy get 100000 times 16.357 ms/op 17.309 ms/op 0.95
ssz.Root.equals 540.00 ns/op 543.00 ns/op 0.99
byteArrayEquals 530.00 ns/op 538.00 ns/op 0.99
shuffle list - 16384 els 6.8436 ms/op 6.9746 ms/op 0.98
shuffle list - 250000 els 101.25 ms/op 105.41 ms/op 0.96
processSlot - 1 slots 8.5130 us/op 9.2520 us/op 0.92
processSlot - 32 slots 1.3134 ms/op 1.4446 ms/op 0.91
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 35.856 ms/op 37.201 ms/op 0.96
getCommitteeAssignments - req 1 vs - 250000 vc 3.0414 ms/op 2.9981 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 4.2879 ms/op 4.2245 ms/op 1.01
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5353 ms/op 4.6735 ms/op 0.97
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.6800 ns/op 5.3100 ns/op 0.88
state getBlockRootAtSlot - 250000 vs - 7PWei 820.32 ns/op 913.67 ns/op 0.90
computeProposers - vc 250000 10.474 ms/op 11.365 ms/op 0.92
computeEpochShuffling - vc 250000 102.65 ms/op 107.75 ms/op 0.95
getNextSyncCommittee - vc 250000 179.29 ms/op 186.90 ms/op 0.96

by benchmarkbot/action

@twoeths twoeths marked this pull request as ready for review March 24, 2023 02:55
@twoeths twoeths requested a review from a team as a code owner March 24, 2023 02:55
@dapplion dapplion merged commit 3fdde84 into unstable Mar 24, 2023
@dapplion dapplion deleted the tuyen/compute_pulled_up_tip branch March 24, 2023 05:09
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.7.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.

3 participants