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

Remove added awaits from libp2-gossipsub #3130

Merged
merged 1 commit into from
Sep 13, 2021

Conversation

dapplion
Copy link
Contributor

@dapplion dapplion commented Sep 13, 2021

Motivation

Our current node does not recieve many messages in time from peers because they are buffered by libp2p gossipsub. The cause are the awaits from this PR libp2p/js-libp2p-interfaces#103

Lodestar gossip validation can be very slow, so messages should always be processed in parallel.

This is a critical issue that causes Lodestar to not follow the correct head >90% of the time, making validators daily income negative. This patch is urgent and should be followed by a proper fix upstream.

Description

Processes rpc and rpc messages all at once.

TODO: Do a proper fix upstream. libp2p/js-libp2p-interfaces#106

@github-actions github-actions bot added the scope-networking All issues related to networking, gossip, and libp2p. label Sep 13, 2021
@codeclimate
Copy link

codeclimate bot commented Sep 13, 2021

Code Climate has analyzed commit dbb9d0c and detected 3 issues on this pull request.

Here's the issue category breakdown:

Category Count
Complexity 3

View more on Code Climate.

@codecov
Copy link

codecov bot commented Sep 13, 2021

Codecov Report

Merging #3130 (dbb9d0c) into master (eb98840) will decrease coverage by 0.17%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #3130      +/-   ##
==========================================
- Coverage   58.96%   58.78%   -0.18%     
==========================================
  Files         374      374              
  Lines        9060     9090      +30     
  Branches     1342     1348       +6     
==========================================
+ Hits         5342     5344       +2     
- Misses       3336     3364      +28     
  Partials      382      382              

@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: a14b1c3 Previous: eb98840 Ratio
BeaconState.hashTreeRoot - No change 744.00 ns/op 894.00 ns/op 0.83
BeaconState.hashTreeRoot - 1 full validator 80.204 us/op 96.561 us/op 0.83
BeaconState.hashTreeRoot - 32 full validator 1.1306 ms/op 1.3993 ms/op 0.81
BeaconState.hashTreeRoot - 512 full validator 14.578 ms/op 18.229 ms/op 0.80
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 80.150 us/op 98.442 us/op 0.81
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3744 ms/op 1.3165 ms/op 1.04
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 17.148 ms/op 20.723 ms/op 0.83
BeaconState.hashTreeRoot - 1 balances 57.500 us/op 72.608 us/op 0.79
BeaconState.hashTreeRoot - 32 balances 485.19 us/op 612.72 us/op 0.79
BeaconState.hashTreeRoot - 512 balances 4.8501 ms/op 5.8102 ms/op 0.83
BeaconState.hashTreeRoot - 250000 balances 88.384 ms/op 107.53 ms/op 0.82
processSlot - 1 slots 41.792 us/op 48.562 us/op 0.86
processSlot - 32 slots 2.2240 ms/op 2.7272 ms/op 0.82
getCommitteeAssignments - req 1 vs - 250000 vc 5.1861 ms/op 6.4997 ms/op 0.80
getCommitteeAssignments - req 100 vs - 250000 vc 7.1771 ms/op 8.9512 ms/op 0.80
getCommitteeAssignments - req 1000 vs - 250000 vc 7.6639 ms/op 9.5857 ms/op 0.80
computeProposers - vc 250000 21.412 ms/op 26.443 ms/op 0.81
computeEpochShuffling - vc 250000 191.63 ms/op 236.10 ms/op 0.81
getNextSyncCommittee - vc 250000 349.32 ms/op 433.32 ms/op 0.81
altair processBlock - 250000 vs - 7PWei normalcase 73.616 ms/op 88.623 ms/op 0.83
altair processBlock - 250000 vs - 7PWei worstcase 197.83 ms/op 232.97 ms/op 0.85
altair processEpoch - pyrmont_e62330 491.59 ms/op 605.64 ms/op 0.81
pyrmont_e62330 - altair beforeProcessEpoch 141.82 ms/op 168.81 ms/op 0.84
pyrmont_e62330 - altair processJustificationAndFinalization 54.691 us/op 112.64 us/op 0.49
pyrmont_e62330 - altair processInactivityUpdates 68.141 ms/op 88.912 ms/op 0.77
pyrmont_e62330 - altair processRewardsAndPenalties 53.579 ms/op 64.581 ms/op 0.83
pyrmont_e62330 - altair processRegistryUpdates 7.1820 us/op 16.218 us/op 0.44
pyrmont_e62330 - altair processSlashings 1.3600 us/op 4.4270 us/op 0.31
pyrmont_e62330 - altair processEth1DataReset 1.1700 us/op 3.6470 us/op 0.32
pyrmont_e62330 - altair processEffectiveBalanceUpdates 5.4020 ms/op 6.8673 ms/op 0.79
pyrmont_e62330 - altair processSlashingsReset 13.807 us/op 20.778 us/op 0.66
pyrmont_e62330 - altair processRandaoMixesReset 20.109 us/op 29.784 us/op 0.68
pyrmont_e62330 - altair processHistoricalRootsUpdate 2.1340 us/op 3.8630 us/op 0.55
pyrmont_e62330 - altair processParticipationFlagUpdates 49.033 ms/op 52.096 ms/op 0.94
pyrmont_e62330 - altair processSyncCommitteeUpdates 1.8730 us/op 3.2700 us/op 0.57
pyrmont_e62330 - altair afterProcessEpoch 115.38 ms/op 141.88 ms/op 0.81
altair processInactivityUpdates - 250000 normalcase 194.69 ms/op 252.01 ms/op 0.77
altair processInactivityUpdates - 250000 worstcase 212.77 ms/op 236.21 ms/op 0.90
altair processParticipationFlagUpdates - 250000 anycase 82.211 ms/op 102.11 ms/op 0.81
altair processRewardsAndPenalties - 250000 normalcase 111.61 ms/op 135.33 ms/op 0.82
altair processRewardsAndPenalties - 250000 worstcase 110.09 ms/op 133.24 ms/op 0.83
altair processSyncCommitteeUpdates - 250000 361.27 ms/op 451.93 ms/op 0.80
Tree 40 250000 create 445.60 ms/op 526.65 ms/op 0.85
Tree 40 250000 get(125000) 267.49 ns/op 331.82 ns/op 0.81
Tree 40 250000 set(125000) 1.3441 us/op 1.5793 us/op 0.85
Tree 40 250000 toArray() 35.611 ms/op 41.652 ms/op 0.85
Tree 40 250000 iterate all - toArray() + loop 36.467 ms/op 42.260 ms/op 0.86
Tree 40 250000 iterate all - get(i) 102.26 ms/op 127.58 ms/op 0.80
MutableVector 250000 create 20.791 ms/op 28.332 ms/op 0.73
MutableVector 250000 get(125000) 12.957 ns/op 16.238 ns/op 0.80
MutableVector 250000 set(125000) 524.88 ns/op 590.58 ns/op 0.89
MutableVector 250000 toArray() 7.4800 ms/op 8.7856 ms/op 0.85
MutableVector 250000 iterate all - toArray() + loop 8.3258 ms/op 8.9648 ms/op 0.93
MutableVector 250000 iterate all - get(i) 3.2556 ms/op 4.3725 ms/op 0.74
Array 250000 create 4.7730 ms/op 5.6403 ms/op 0.85
Array 250000 clone - spread 1.5424 ms/op 2.0225 ms/op 0.76
Array 250000 get(125000) 1.1110 ns/op 1.4190 ns/op 0.78
Array 250000 set(125000) 0.78900 ns/op 1.0250 ns/op 0.77
Array 250000 iterate all - loop 168.50 us/op 209.90 us/op 0.80
aggregationBits - 2048 els - readonlyValues 205.12 us/op 289.50 us/op 0.71
aggregationBits - 2048 els - zipIndexesInBitList 35.461 us/op 46.225 us/op 0.77
ssz.Root.equals 1.2350 us/op 1.5900 us/op 0.78
ssz.Root.equals with valueOf() 1.4140 us/op 1.7560 us/op 0.81
byteArrayEquals with valueOf() 1.4100 us/op 1.7440 us/op 0.81
phase0 processBlock - 250000 vs - 7PWei normalcase 11.658 ms/op 14.763 ms/op 0.79
phase0 processBlock - 250000 vs - 7PWei worstcase 73.730 ms/op 93.810 ms/op 0.79
phase0 afterProcessEpoch - 250000 vs - 7PWei 209.37 ms/op 260.42 ms/op 0.80
phase0 beforeProcessEpoch - 250000 vs - 7PWei 548.82 ms/op 653.61 ms/op 0.84
phase0 processEpoch - mainnet_e58758 789.22 ms/op 929.23 ms/op 0.85
mainnet_e58758 - phase0 beforeProcessEpoch 479.17 ms/op 508.35 ms/op 0.94
mainnet_e58758 - phase0 processJustificationAndFinalization 52.410 us/op 131.13 us/op 0.40
mainnet_e58758 - phase0 processRewardsAndPenalties 79.494 ms/op 95.433 ms/op 0.83
mainnet_e58758 - phase0 processRegistryUpdates 39.234 us/op 77.755 us/op 0.50
mainnet_e58758 - phase0 processSlashings 1.4050 us/op 4.5540 us/op 0.31
mainnet_e58758 - phase0 processEth1DataReset 1.1670 us/op 3.6210 us/op 0.32
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 9.4650 ms/op 11.505 ms/op 0.82
mainnet_e58758 - phase0 processSlashingsReset 8.3300 us/op 19.378 us/op 0.43
mainnet_e58758 - phase0 processRandaoMixesReset 14.509 us/op 29.913 us/op 0.49
mainnet_e58758 - phase0 processHistoricalRootsUpdate 1.3960 us/op 5.1940 us/op 0.27
mainnet_e58758 - phase0 processParticipationRecordUpdates 10.323 us/op 19.148 us/op 0.54
mainnet_e58758 - phase0 afterProcessEpoch 186.35 ms/op 227.58 ms/op 0.82
phase0 processEffectiveBalanceUpdates - 250000 normalcase 11.120 ms/op 13.116 ms/op 0.85
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.1793 s/op 1.4859 s/op 0.79
phase0 processRegistryUpdates - 250000 normalcase 56.709 us/op 71.257 us/op 0.80
phase0 processRegistryUpdates - 250000 badcase_full_deposits 3.4259 ms/op 3.9918 ms/op 0.86
phase0 processRegistryUpdates - 250000 worstcase 0.5 1.5478 s/op 1.8623 s/op 0.83
phase0 getAttestationDeltas - 250000 normalcase 34.909 ms/op 43.062 ms/op 0.81
phase0 getAttestationDeltas - 250000 worstcase 34.724 ms/op 43.568 ms/op 0.80
phase0 processSlashings - 250000 worstcase 33.281 ms/op 40.728 ms/op 0.82
shuffle list - 16384 els 13.084 ms/op 16.120 ms/op 0.81
shuffle list - 250000 els 188.07 ms/op 231.45 ms/op 0.81
getEffectiveBalances - 250000 vs - 7PWei 10.405 ms/op 12.864 ms/op 0.81
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.1622 ms/op 1.9788 ms/op 1.09
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 979.07 us/op 1.2101 ms/op 0.81
BLS verify - blst-native 1.8569 ms/op 2.3247 ms/op 0.80
BLS verifyMultipleSignatures 3 - blst-native 3.8132 ms/op 4.7607 ms/op 0.80
BLS verifyMultipleSignatures 8 - blst-native 8.2133 ms/op 10.259 ms/op 0.80
BLS verifyMultipleSignatures 32 - blst-native 29.788 ms/op 37.220 ms/op 0.80
BLS aggregatePubkeys 32 - blst-native 40.064 us/op 50.260 us/op 0.80
BLS aggregatePubkeys 128 - blst-native 155.60 us/op 194.66 us/op 0.80
getAttestationsForBlock 74.430 ms/op 87.387 ms/op 0.85
CheckpointStateCache - add get delete 15.370 us/op 18.336 us/op 0.84
validate gossip signedAggregateAndProof - struct 4.4565 ms/op 5.5498 ms/op 0.80
validate gossip signedAggregateAndProof - treeBacked 4.4226 ms/op 5.4736 ms/op 0.81
validate gossip attestation - struct 2.0773 ms/op 2.6321 ms/op 0.79
validate gossip attestation - treeBacked 2.0810 ms/op 2.5978 ms/op 0.80

by benchmarkbot/action

@dapplion dapplion merged commit 2796455 into master Sep 13, 2021
@dapplion dapplion deleted the dapplion/libp2p-gossipsub-await branch September 13, 2021 21:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
scope-networking All issues related to networking, gossip, and libp2p.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants