Skip to content

fix: use createSingleSignatureSetFromComponents when validate gossip attestation - #5406

Merged
twoeths merged 1 commit into
unstablefrom
tuyen/fix_validate_gossip_attestation_signature_set
Apr 24, 2023
Merged

fix: use createSingleSignatureSetFromComponents when validate gossip attestation#5406
twoeths merged 1 commit into
unstablefrom
tuyen/fix_validate_gossip_attestation_signature_set

Conversation

@twoeths

@twoeths twoeths commented Apr 24, 2023

Copy link
Copy Markdown
Member

Motivation

Found this along with @dapplion

Screenshot 2023-04-24 at 14 32 19

we should not have to aggregate pubkeys when validating gossip attestations

Description

Use createSingleSignatureSetFromComponents() when validating gossip attestation to save 0.8% cpu time

@twoeths
twoeths requested a review from a team as a code owner April 24, 2023 07:33
@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 993a902 Previous: 97ec80e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 799.10 us/op 536.16 us/op 1.49
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 44.506 us/op 46.865 us/op 0.95
BLS verify - blst-native 1.1940 ms/op 1.2452 ms/op 0.96
BLS verifyMultipleSignatures 3 - blst-native 2.4252 ms/op 2.5189 ms/op 0.96
BLS verifyMultipleSignatures 8 - blst-native 5.2217 ms/op 5.3991 ms/op 0.97
BLS verifyMultipleSignatures 32 - blst-native 18.848 ms/op 19.896 ms/op 0.95
BLS aggregatePubkeys 32 - blst-native 25.372 us/op 26.852 us/op 0.94
BLS aggregatePubkeys 128 - blst-native 99.402 us/op 103.49 us/op 0.96
getAttestationsForBlock 54.169 ms/op 60.086 ms/op 0.90
isKnown best case - 1 super set check 248.00 ns/op 266.00 ns/op 0.93
isKnown normal case - 2 super set checks 241.00 ns/op 256.00 ns/op 0.94
isKnown worse case - 16 super set checks 250.00 ns/op 256.00 ns/op 0.98
CheckpointStateCache - add get delete 5.0280 us/op 5.6480 us/op 0.89
validate gossip signedAggregateAndProof - struct 2.7676 ms/op 2.8312 ms/op 0.98
validate gossip attestation - struct 1.3323 ms/op 1.3479 ms/op 0.99
pickEth1Vote - no votes 1.3549 ms/op 1.3980 ms/op 0.97
pickEth1Vote - max votes 9.6384 ms/op 12.099 ms/op 0.80
pickEth1Vote - Eth1Data hashTreeRoot value x2048 9.0144 ms/op 9.9458 ms/op 0.91
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 14.987 ms/op 16.522 ms/op 0.91
pickEth1Vote - Eth1Data fastSerialize value x2048 630.62 us/op 731.13 us/op 0.86
pickEth1Vote - Eth1Data fastSerialize tree x2048 5.7026 ms/op 9.0396 ms/op 0.63
bytes32 toHexString 474.00 ns/op 544.00 ns/op 0.87
bytes32 Buffer.toString(hex) 338.00 ns/op 388.00 ns/op 0.87
bytes32 Buffer.toString(hex) from Uint8Array 553.00 ns/op 606.00 ns/op 0.91
bytes32 Buffer.toString(hex) + 0x 338.00 ns/op 414.00 ns/op 0.82
Object access 1 prop 0.15700 ns/op 0.18600 ns/op 0.84
Map access 1 prop 0.15300 ns/op 0.16600 ns/op 0.92
Object get x1000 6.4730 ns/op 6.7160 ns/op 0.96
Map get x1000 0.62500 ns/op 0.60000 ns/op 1.04
Object set x1000 54.181 ns/op 61.113 ns/op 0.89
Map set x1000 44.973 ns/op 47.385 ns/op 0.95
Return object 10000 times 0.23890 ns/op 0.24320 ns/op 0.98
Throw Error 10000 times 4.2304 us/op 4.2748 us/op 0.99
fastMsgIdFn sha256 / 200 bytes 3.5400 us/op 3.5540 us/op 1.00
fastMsgIdFn h32 xxhash / 200 bytes 293.00 ns/op 311.00 ns/op 0.94
fastMsgIdFn h64 xxhash / 200 bytes 444.00 ns/op 445.00 ns/op 1.00
fastMsgIdFn sha256 / 1000 bytes 11.979 us/op 12.005 us/op 1.00
fastMsgIdFn h32 xxhash / 1000 bytes 437.00 ns/op 437.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 538.00 ns/op 527.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 104.27 us/op 104.98 us/op 0.99
fastMsgIdFn h32 xxhash / 10000 bytes 1.9900 us/op 1.9820 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 1.5880 us/op 1.4380 us/op 1.10
enrSubnets - fastDeserialize 64 bits 2.0300 us/op 1.4130 us/op 1.44
enrSubnets - ssz BitVector 64 bits 639.00 ns/op 523.00 ns/op 1.22
enrSubnets - fastDeserialize 4 bits 206.00 ns/op 196.00 ns/op 1.05
enrSubnets - ssz BitVector 4 bits 601.00 ns/op 562.00 ns/op 1.07
prioritizePeers score -10:0 att 32-0.1 sync 2-0 123.89 us/op 112.64 us/op 1.10
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 151.89 us/op 163.77 us/op 0.93
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 173.47 us/op 201.80 us/op 0.86
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 325.52 us/op 364.97 us/op 0.89
prioritizePeers score 0:0 att 64-1 sync 4-1 427.44 us/op 419.44 us/op 1.02
array of 16000 items push then shift 1.7103 us/op 1.6537 us/op 1.03
LinkedList of 16000 items push then shift 9.2770 ns/op 8.8220 ns/op 1.05
array of 16000 items push then pop 117.99 ns/op 88.150 ns/op 1.34
LinkedList of 16000 items push then pop 9.0740 ns/op 8.5540 ns/op 1.06
array of 24000 items push then shift 2.4458 us/op 2.3617 us/op 1.04
LinkedList of 24000 items push then shift 9.2580 ns/op 8.9340 ns/op 1.04
array of 24000 items push then pop 95.931 ns/op 80.229 ns/op 1.20
LinkedList of 24000 items push then pop 10.653 ns/op 8.4650 ns/op 1.26
intersect bitArray bitLen 8 16.780 ns/op 13.043 ns/op 1.29
intersect array and set length 8 94.539 ns/op 82.051 ns/op 1.15
intersect bitArray bitLen 128 52.806 ns/op 44.737 ns/op 1.18
intersect array and set length 128 1.3832 us/op 1.1525 us/op 1.20
Buffer.concat 32 items 3.7680 us/op 3.1080 us/op 1.21
Uint8Array.set 32 items 2.4140 us/op 2.7720 us/op 0.87
pass gossip attestations to forkchoice per slot 3.6651 ms/op 2.9103 ms/op 1.26
computeDeltas 3.2435 ms/op 3.0726 ms/op 1.06
computeProposerBoostScoreFromBalances 1.9713 ms/op 1.8284 ms/op 1.08
altair processAttestation - 250000 vs - 7PWei normalcase 3.8748 ms/op 3.4193 ms/op 1.13
altair processAttestation - 250000 vs - 7PWei worstcase 5.1308 ms/op 5.1069 ms/op 1.00
altair processAttestation - setStatus - 1/6 committees join 145.56 us/op 145.58 us/op 1.00
altair processAttestation - setStatus - 1/3 committees join 293.10 us/op 291.54 us/op 1.01
altair processAttestation - setStatus - 1/2 committees join 382.22 us/op 392.99 us/op 0.97
altair processAttestation - setStatus - 2/3 committees join 478.94 us/op 492.26 us/op 0.97
altair processAttestation - setStatus - 4/5 committees join 722.11 us/op 723.48 us/op 1.00
altair processAttestation - setStatus - 100% committees join 799.44 us/op 877.65 us/op 0.91
altair processBlock - 250000 vs - 7PWei normalcase 21.994 ms/op 24.030 ms/op 0.92
altair processBlock - 250000 vs - 7PWei normalcase hashState 31.748 ms/op 33.063 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase 70.858 ms/op 64.392 ms/op 1.10
altair processBlock - 250000 vs - 7PWei worstcase hashState 79.082 ms/op 80.511 ms/op 0.98
phase0 processBlock - 250000 vs - 7PWei normalcase 3.0106 ms/op 3.0400 ms/op 0.99
phase0 processBlock - 250000 vs - 7PWei worstcase 34.329 ms/op 35.637 ms/op 0.96
altair processEth1Data - 250000 vs - 7PWei normalcase 761.59 us/op 658.76 us/op 1.16
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 15.216 us/op 14.331 us/op 1.06
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 50.101 us/op 51.109 us/op 0.98
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 17.548 us/op 16.747 us/op 1.05
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 14.965 us/op 15.061 us/op 0.99
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 125.29 us/op 132.62 us/op 0.94
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 810.97 us/op 980.95 us/op 0.83
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 16384 1.1482 ms/op 1.1653 ms/op 0.99
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 16384 1.1305 ms/op 1.6383 ms/op 0.69
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 16384 3.8799 ms/op 3.7236 ms/op 1.04
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 16384 2.0033 ms/op 2.4013 ms/op 0.83
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 16384 6.5393 ms/op 5.5313 ms/op 1.18
Tree 40 250000 create 634.54 ms/op 594.17 ms/op 1.07
Tree 40 250000 get(125000) 202.68 ns/op 204.93 ns/op 0.99
Tree 40 250000 set(125000) 1.1891 us/op 1.7842 us/op 0.67
Tree 40 250000 toArray() 27.798 ms/op 26.931 ms/op 1.03
Tree 40 250000 iterate all - toArray() + loop 26.802 ms/op 26.077 ms/op 1.03
Tree 40 250000 iterate all - get(i) 82.265 ms/op 80.379 ms/op 1.02
MutableVector 250000 create 14.956 ms/op 12.160 ms/op 1.23
MutableVector 250000 get(125000) 7.1010 ns/op 6.9820 ns/op 1.02
MutableVector 250000 set(125000) 472.87 ns/op 423.37 ns/op 1.12
MutableVector 250000 toArray() 4.2192 ms/op 4.4826 ms/op 0.94
MutableVector 250000 iterate all - toArray() + loop 4.3322 ms/op 4.5392 ms/op 0.95
MutableVector 250000 iterate all - get(i) 1.7689 ms/op 1.6203 ms/op 1.09
Array 250000 create 3.8877 ms/op 3.7214 ms/op 1.04
Array 250000 clone - spread 1.3283 ms/op 1.1834 ms/op 1.12
Array 250000 get(125000) 0.80000 ns/op 0.59100 ns/op 1.35
Array 250000 set(125000) 0.91600 ns/op 0.67700 ns/op 1.35
Array 250000 iterate all - loop 97.759 us/op 91.526 us/op 1.07
effectiveBalanceIncrements clone Uint8Array 300000 36.610 us/op 46.368 us/op 0.79
effectiveBalanceIncrements clone MutableVector 300000 314.00 ns/op 347.00 ns/op 0.90
effectiveBalanceIncrements rw all Uint8Array 300000 170.78 us/op 175.86 us/op 0.97
effectiveBalanceIncrements rw all MutableVector 300000 81.016 ms/op 91.231 ms/op 0.89
phase0 afterProcessEpoch - 250000 vs - 7PWei 118.03 ms/op 120.79 ms/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 43.178 ms/op 42.486 ms/op 1.02
altair processEpoch - mainnet_e81889 322.70 ms/op 304.43 ms/op 1.06
mainnet_e81889 - altair beforeProcessEpoch 59.256 ms/op 49.316 ms/op 1.20
mainnet_e81889 - altair processJustificationAndFinalization 22.947 us/op 17.428 us/op 1.32
mainnet_e81889 - altair processInactivityUpdates 6.6060 ms/op 6.6874 ms/op 0.99
mainnet_e81889 - altair processRewardsAndPenalties 56.160 ms/op 54.255 ms/op 1.04
mainnet_e81889 - altair processRegistryUpdates 2.6360 us/op 2.6400 us/op 1.00
mainnet_e81889 - altair processSlashings 542.00 ns/op 494.00 ns/op 1.10
mainnet_e81889 - altair processEth1DataReset 573.00 ns/op 542.00 ns/op 1.06
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2172 ms/op 1.2453 ms/op 0.98
mainnet_e81889 - altair processSlashingsReset 4.9210 us/op 4.6260 us/op 1.06
mainnet_e81889 - altair processRandaoMixesReset 4.9560 us/op 4.5770 us/op 1.08
mainnet_e81889 - altair processHistoricalRootsUpdate 576.00 ns/op 688.00 ns/op 0.84
mainnet_e81889 - altair processParticipationFlagUpdates 2.5160 us/op 2.6940 us/op 0.93
mainnet_e81889 - altair processSyncCommitteeUpdates 1.1200 us/op 1.0850 us/op 1.03
mainnet_e81889 - altair afterProcessEpoch 132.62 ms/op 134.79 ms/op 0.98
phase0 processEpoch - mainnet_e58758 350.34 ms/op 378.80 ms/op 0.92
mainnet_e58758 - phase0 beforeProcessEpoch 129.03 ms/op 144.01 ms/op 0.90
mainnet_e58758 - phase0 processJustificationAndFinalization 22.223 us/op 21.321 us/op 1.04
mainnet_e58758 - phase0 processRewardsAndPenalties 55.477 ms/op 68.459 ms/op 0.81
mainnet_e58758 - phase0 processRegistryUpdates 9.4760 us/op 9.3300 us/op 1.02
mainnet_e58758 - phase0 processSlashings 663.00 ns/op 543.00 ns/op 1.22
mainnet_e58758 - phase0 processEth1DataReset 655.00 ns/op 967.00 ns/op 0.68
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.0352 ms/op 1.2162 ms/op 0.85
mainnet_e58758 - phase0 processSlashingsReset 6.5500 us/op 3.7270 us/op 1.76
mainnet_e58758 - phase0 processRandaoMixesReset 5.1290 us/op 4.8270 us/op 1.06
mainnet_e58758 - phase0 processHistoricalRootsUpdate 1.3810 us/op 769.00 ns/op 1.80
mainnet_e58758 - phase0 processParticipationRecordUpdates 8.4980 us/op 5.8280 us/op 1.46
mainnet_e58758 - phase0 afterProcessEpoch 101.28 ms/op 106.60 ms/op 0.95
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.5234 ms/op 1.3730 ms/op 1.11
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6361 ms/op 1.5488 ms/op 1.06
altair processInactivityUpdates - 250000 normalcase 24.125 ms/op 24.037 ms/op 1.00
altair processInactivityUpdates - 250000 worstcase 26.503 ms/op 26.705 ms/op 0.99
phase0 processRegistryUpdates - 250000 normalcase 7.3940 us/op 7.6030 us/op 0.97
phase0 processRegistryUpdates - 250000 badcase_full_deposits 322.47 us/op 277.39 us/op 1.16
phase0 processRegistryUpdates - 250000 worstcase 0.5 137.06 ms/op 133.97 ms/op 1.02
altair processRewardsAndPenalties - 250000 normalcase 70.408 ms/op 66.496 ms/op 1.06
altair processRewardsAndPenalties - 250000 worstcase 66.520 ms/op 67.492 ms/op 0.99
phase0 getAttestationDeltas - 250000 normalcase 8.5459 ms/op 6.6456 ms/op 1.29
phase0 getAttestationDeltas - 250000 worstcase 6.8926 ms/op 6.6933 ms/op 1.03
phase0 processSlashings - 250000 worstcase 3.5412 ms/op 3.7390 ms/op 0.95
altair processSyncCommitteeUpdates - 250000 193.83 ms/op 184.92 ms/op 1.05
BeaconState.hashTreeRoot - No change 372.00 ns/op 360.00 ns/op 1.03
BeaconState.hashTreeRoot - 1 full validator 52.446 us/op 49.968 us/op 1.05
BeaconState.hashTreeRoot - 32 full validator 529.78 us/op 522.51 us/op 1.01
BeaconState.hashTreeRoot - 512 full validator 5.3740 ms/op 5.6920 ms/op 0.94
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 65.494 us/op 63.172 us/op 1.04
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 953.72 us/op 893.08 us/op 1.07
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 11.794 ms/op 12.215 ms/op 0.97
BeaconState.hashTreeRoot - 1 balances 54.681 us/op 49.806 us/op 1.10
BeaconState.hashTreeRoot - 32 balances 481.35 us/op 467.32 us/op 1.03
BeaconState.hashTreeRoot - 512 balances 4.6114 ms/op 4.4353 ms/op 1.04
BeaconState.hashTreeRoot - 250000 balances 76.172 ms/op 75.323 ms/op 1.01
aggregationBits - 2048 els - zipIndexesInBitList 18.989 us/op 15.661 us/op 1.21
regular array get 100000 times 34.082 us/op 33.035 us/op 1.03
wrappedArray get 100000 times 33.559 us/op 40.741 us/op 0.82
arrayWithProxy get 100000 times 17.430 ms/op 16.550 ms/op 1.05
ssz.Root.equals 574.00 ns/op 548.00 ns/op 1.05
byteArrayEquals 567.00 ns/op 554.00 ns/op 1.02
shuffle list - 16384 els 7.1021 ms/op 6.9495 ms/op 1.02
shuffle list - 250000 els 106.77 ms/op 102.72 ms/op 1.04
processSlot - 1 slots 8.8810 us/op 8.5120 us/op 1.04
processSlot - 32 slots 1.3588 ms/op 1.3242 ms/op 1.03
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 38.241 ms/op 37.066 ms/op 1.03
getCommitteeAssignments - req 1 vs - 250000 vc 3.0121 ms/op 2.9329 ms/op 1.03
getCommitteeAssignments - req 100 vs - 250000 vc 4.1925 ms/op 4.1562 ms/op 1.01
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5372 ms/op 4.5150 ms/op 1.00
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.2200 ns/op 4.8200 ns/op 1.08
state getBlockRootAtSlot - 250000 vs - 7PWei 714.15 ns/op 699.22 ns/op 1.02
computeProposers - vc 250000 10.646 ms/op 11.338 ms/op 0.94
computeEpochShuffling - vc 250000 106.78 ms/op 104.57 ms/op 1.02
getNextSyncCommittee - vc 250000 177.47 ms/op 177.57 ms/op 1.00
computeSigningRoot for AttestationData 14.105 us/op 13.378 us/op 1.05
hash AttestationData serialized data then Buffer.toString(base64) 2.5374 us/op 2.4878 us/op 1.02
toHexString serialized data 1.1868 us/op 1.0777 us/op 1.10
Buffer.toString(base64) 341.39 ns/op 327.33 ns/op 1.04

by benchmarkbot/action

@twoeths
twoeths merged commit 9d8b831 into unstable Apr 24, 2023
@twoeths
twoeths deleted the tuyen/fix_validate_gossip_attestation_signature_set branch April 24, 2023 08:41
@wemeetagain

Copy link
Copy Markdown
Member

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