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

Discv5: Do not issue FINDNODES right after the start #3429

Merged
merged 3 commits into from
Nov 15, 2021

Conversation

twoeths
Copy link
Contributor

@twoeths twoeths commented Nov 12, 2021

Motivation

Sometimes we're not able to send/receive discv5 packets successfully right after it starts. Ideally we should investigate discv5 for that, but I found we all await for the discv5 start process correctly.

2021-11-11T11:44:03.605Z discv5:service Starting discv5 service with node id a94979c6e3449280c849ddfcde174ddadd3cd4db280193d28743aeeef291a3fb
2021-11-11T11:44:03.605Z discv5:sessionService Starting session service with node id a94979c6e3449280c849ddfcde174ddadd3cd4db280193d28743aeeef291a3fb
2021-11-11T11:44:03.611Z discv5:service Starting a new lookup. Id: 1

Description

  • Skip doing FINDNODES in the 1st heart beat of peer manager

part of #3423

@codeclimate
Copy link

codeclimate bot commented Nov 12, 2021

Code Climate has analyzed commit 8dfad5d and detected 0 issues on this pull request.

View more on Code Climate.

@codecov
Copy link

codecov bot commented Nov 12, 2021

Codecov Report

Merging #3429 (8dfad5d) into master (09a4e53) will decrease coverage by 0.02%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #3429      +/-   ##
==========================================
- Coverage   38.12%   38.09%   -0.03%     
==========================================
  Files         303      303              
  Lines        7911     7917       +6     
  Branches     1219     1220       +1     
==========================================
  Hits         3016     3016              
- Misses       4754     4760       +6     
  Partials      141      141              

@github-actions
Copy link
Contributor

github-actions bot commented Nov 12, 2021

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 18759b4 Previous: 09a4e53 Ratio
BeaconState.hashTreeRoot - No change 827.00 ns/op 788.00 ns/op 1.05
BeaconState.hashTreeRoot - 1 full validator 101.99 us/op 112.93 us/op 0.90
BeaconState.hashTreeRoot - 32 full validator 1.4668 ms/op 1.4700 ms/op 1.00
BeaconState.hashTreeRoot - 512 full validator 18.447 ms/op 20.340 ms/op 0.91
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 106.88 us/op 117.58 us/op 0.91
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4815 ms/op 1.5839 ms/op 0.94
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 22.330 ms/op 24.323 ms/op 0.92
BeaconState.hashTreeRoot - 1 balances 80.619 us/op 78.903 us/op 1.02
BeaconState.hashTreeRoot - 32 balances 634.66 us/op 695.86 us/op 0.91
BeaconState.hashTreeRoot - 512 balances 6.0514 ms/op 6.6043 ms/op 0.92
BeaconState.hashTreeRoot - 250000 balances 110.72 ms/op 117.04 ms/op 0.95
processSlot - 1 slots 53.249 us/op 65.320 us/op 0.82
processSlot - 32 slots 2.7930 ms/op 3.3285 ms/op 0.84
getCommitteeAssignments - req 1 vs - 250000 vc 5.1916 ms/op 5.9923 ms/op 0.87
getCommitteeAssignments - req 100 vs - 250000 vc 7.4837 ms/op 8.6081 ms/op 0.87
getCommitteeAssignments - req 1000 vs - 250000 vc 8.5476 ms/op 9.1859 ms/op 0.93
computeProposers - vc 250000 25.015 ms/op 27.765 ms/op 0.90
computeEpochShuffling - vc 250000 198.20 ms/op 226.85 ms/op 0.87
getNextSyncCommittee - vc 250000 402.83 ms/op 450.09 ms/op 0.89
altair processAttestation - 250000 vs - 7PWei normalcase 40.932 ms/op 45.349 ms/op 0.90
altair processAttestation - 250000 vs - 7PWei worstcase 47.201 ms/op 49.089 ms/op 0.96
altair processAttestation - setStatus - 1/6 committees join 12.556 ms/op 12.794 ms/op 0.98
altair processAttestation - setStatus - 1/3 committees join 25.754 ms/op 26.454 ms/op 0.97
altair processAttestation - setStatus - 1/2 committees join 39.820 ms/op 40.844 ms/op 0.97
altair processAttestation - setStatus - 2/3 committees join 52.858 ms/op 57.259 ms/op 0.92
altair processAttestation - setStatus - 4/5 committees join 64.576 ms/op 72.405 ms/op 0.89
altair processAttestation - setStatus - 100% committees join 78.920 ms/op 85.385 ms/op 0.92
altair processAttestation - updateEpochParticipants - 1/6 committees join 13.325 ms/op 13.996 ms/op 0.95
altair processAttestation - updateEpochParticipants - 1/3 committees join 28.315 ms/op 27.325 ms/op 1.04
altair processAttestation - updateEpochParticipants - 1/2 committees join 25.158 ms/op 25.394 ms/op 0.99
altair processAttestation - updateEpochParticipants - 2/3 committees join 27.457 ms/op 28.162 ms/op 0.97
altair processAttestation - updateEpochParticipants - 4/5 committees join 29.570 ms/op 31.040 ms/op 0.95
altair processAttestation - updateEpochParticipants - 100% committees join 33.447 ms/op 30.144 ms/op 1.11
altair processAttestation - updateAllStatus 22.058 ms/op 20.613 ms/op 1.07
altair processBlock - 250000 vs - 7PWei normalcase 46.591 ms/op 46.143 ms/op 1.01
altair processBlock - 250000 vs - 7PWei worstcase 131.73 ms/op 141.43 ms/op 0.93
altair processEpoch - pyrmont_e62330 497.81 ms/op 519.40 ms/op 0.96
pyrmont_e62330 - altair beforeProcessEpoch 167.89 ms/op 174.06 ms/op 0.96
pyrmont_e62330 - altair processJustificationAndFinalization 113.12 us/op 117.07 us/op 0.97
pyrmont_e62330 - altair processInactivityUpdates 9.3063 ms/op 9.2743 ms/op 1.00
pyrmont_e62330 - altair processRewardsAndPenalties 60.584 ms/op 61.199 ms/op 0.99
pyrmont_e62330 - altair processRegistryUpdates 19.237 us/op 17.745 us/op 1.08
pyrmont_e62330 - altair processSlashings 5.7710 us/op 6.0350 us/op 0.96
pyrmont_e62330 - altair processEth1DataReset 5.3840 us/op 5.9510 us/op 0.90
pyrmont_e62330 - altair processEffectiveBalanceUpdates 6.1865 ms/op 6.5526 ms/op 0.94
pyrmont_e62330 - altair processSlashingsReset 36.273 us/op 32.963 us/op 1.10
pyrmont_e62330 - altair processRandaoMixesReset 41.946 us/op 43.268 us/op 0.97
pyrmont_e62330 - altair processHistoricalRootsUpdate 7.8650 us/op 7.9550 us/op 0.99
pyrmont_e62330 - altair processParticipationFlagUpdates 44.718 ms/op 45.388 ms/op 0.99
pyrmont_e62330 - altair processSyncCommitteeUpdates 4.9320 us/op 4.8520 us/op 1.02
pyrmont_e62330 - altair afterProcessEpoch 141.08 ms/op 126.95 ms/op 1.11
altair processInactivityUpdates - 250000 normalcase 76.821 ms/op 77.498 ms/op 0.99
altair processInactivityUpdates - 250000 worstcase 72.440 ms/op 86.516 ms/op 0.84
altair processParticipationFlagUpdates - 250000 anycase 97.165 ms/op 106.37 ms/op 0.91
altair processRewardsAndPenalties - 250000 normalcase 126.53 ms/op 125.09 ms/op 1.01
altair processRewardsAndPenalties - 250000 worstcase 138.68 ms/op 127.55 ms/op 1.09
altair processSyncCommitteeUpdates - 250000 421.97 ms/op 433.23 ms/op 0.97
Tree 40 250000 create 666.07 ms/op 627.07 ms/op 1.06
Tree 40 250000 get(125000) 276.57 ns/op 272.56 ns/op 1.01
Tree 40 250000 set(125000) 2.2578 us/op 1.9708 us/op 1.15
Tree 40 250000 toArray() 49.743 ms/op 43.832 ms/op 1.13
Tree 40 250000 iterate all - toArray() + loop 49.194 ms/op 44.129 ms/op 1.11
Tree 40 250000 iterate all - get(i) 128.47 ms/op 112.94 ms/op 1.14
MutableVector 250000 create 27.169 ms/op 27.693 ms/op 0.98
MutableVector 250000 get(125000) 15.552 ns/op 15.773 ns/op 0.99
MutableVector 250000 set(125000) 763.54 ns/op 694.54 ns/op 1.10
MutableVector 250000 toArray() 10.554 ms/op 10.674 ms/op 0.99
MutableVector 250000 iterate all - toArray() + loop 10.301 ms/op 11.071 ms/op 0.93
MutableVector 250000 iterate all - get(i) 3.7799 ms/op 4.0118 ms/op 0.94
Array 250000 create 6.9986 ms/op 5.8717 ms/op 1.19
Array 250000 clone - spread 1.8790 ms/op 2.0504 ms/op 0.92
Array 250000 get(125000) 0.92600 ns/op 0.91400 ns/op 1.01
Array 250000 set(125000) 0.93200 ns/op 1.0230 ns/op 0.91
Array 250000 iterate all - loop 155.08 us/op 147.77 us/op 1.05
aggregationBits - 2048 els - readonlyValues 284.51 us/op 270.97 us/op 1.05
aggregationBits - 2048 els - zipIndexesInBitList 47.803 us/op 45.137 us/op 1.06
regular array get 100000 times 59.084 us/op 59.374 us/op 1.00
wrappedArray get 100000 times 60.697 us/op 58.976 us/op 1.03
arrayWithProxy get 100000 times 34.366 ms/op 38.182 ms/op 0.90
ssz.Root.equals 1.5520 us/op 1.5240 us/op 1.02
ssz.Root.equals with valueOf() 1.7140 us/op 1.8500 us/op 0.93
byteArrayEquals with valueOf() 1.8410 us/op 1.8970 us/op 0.97
phase0 processBlock - 250000 vs - 7PWei normalcase 13.911 ms/op 13.541 ms/op 1.03
phase0 processBlock - 250000 vs - 7PWei worstcase 94.917 ms/op 102.75 ms/op 0.92
phase0 afterProcessEpoch - 250000 vs - 7PWei 224.91 ms/op 236.83 ms/op 0.95
phase0 beforeProcessEpoch - 250000 vs - 7PWei 700.28 ms/op 725.81 ms/op 0.96
phase0 processEpoch - mainnet_e58758 900.80 ms/op 973.65 ms/op 0.93
mainnet_e58758 - phase0 beforeProcessEpoch 521.08 ms/op 562.56 ms/op 0.93
mainnet_e58758 - phase0 processJustificationAndFinalization 138.57 us/op 131.56 us/op 1.05
mainnet_e58758 - phase0 processRewardsAndPenalties 89.475 ms/op 89.830 ms/op 1.00
mainnet_e58758 - phase0 processRegistryUpdates 82.553 us/op 79.562 us/op 1.04
mainnet_e58758 - phase0 processSlashings 5.9890 us/op 6.2010 us/op 0.97
mainnet_e58758 - phase0 processEth1DataReset 5.5400 us/op 5.6830 us/op 0.97
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 9.8870 ms/op 10.639 ms/op 0.93
mainnet_e58758 - phase0 processSlashingsReset 34.122 us/op 29.584 us/op 1.15
mainnet_e58758 - phase0 processRandaoMixesReset 41.718 us/op 41.112 us/op 1.01
mainnet_e58758 - phase0 processHistoricalRootsUpdate 7.0510 us/op 7.9690 us/op 0.88
mainnet_e58758 - phase0 processParticipationRecordUpdates 28.134 us/op 27.273 us/op 1.03
mainnet_e58758 - phase0 afterProcessEpoch 195.02 ms/op 206.13 ms/op 0.95
phase0 processEffectiveBalanceUpdates - 250000 normalcase 12.823 ms/op 12.517 ms/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6346 s/op 1.6022 s/op 1.02
phase0 processRegistryUpdates - 250000 normalcase 84.097 us/op 80.935 us/op 1.04
phase0 processRegistryUpdates - 250000 badcase_full_deposits 4.2891 ms/op 4.0304 ms/op 1.06
phase0 processRegistryUpdates - 250000 worstcase 0.5 2.1592 s/op 2.0651 s/op 1.05
phase0 getAttestationDeltas - 250000 normalcase 37.097 ms/op 41.009 ms/op 0.90
phase0 getAttestationDeltas - 250000 worstcase 36.808 ms/op 42.238 ms/op 0.87
phase0 processSlashings - 250000 worstcase 35.567 ms/op 42.295 ms/op 0.84
shuffle list - 16384 els 13.690 ms/op 14.639 ms/op 0.94
shuffle list - 250000 els 189.94 ms/op 209.46 ms/op 0.91
getEffectiveBalances - 250000 vs - 7PWei 11.877 ms/op 13.148 ms/op 0.90
computeDeltas 3.6521 ms/op 3.9580 ms/op 0.92
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.7876 ms/op 2.4641 ms/op 1.13
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 1.0192 ms/op 1.0712 ms/op 0.95
BLS verify - blst-native 2.1618 ms/op 2.7132 ms/op 0.80
BLS verifyMultipleSignatures 3 - blst-native 4.3160 ms/op 5.5873 ms/op 0.77
BLS verifyMultipleSignatures 8 - blst-native 9.2201 ms/op 12.337 ms/op 0.75
BLS verifyMultipleSignatures 32 - blst-native 34.288 ms/op 44.233 ms/op 0.78
BLS aggregatePubkeys 32 - blst-native 45.965 us/op 60.606 us/op 0.76
BLS aggregatePubkeys 128 - blst-native 178.80 us/op 236.85 us/op 0.75
getAttestationsForBlock 88.727 ms/op 84.310 ms/op 1.05
CheckpointStateCache - add get delete 19.683 us/op 18.564 us/op 1.06
validate gossip signedAggregateAndProof - struct 5.2169 ms/op 6.5599 ms/op 0.80
validate gossip signedAggregateAndProof - treeBacked 5.1366 ms/op 6.3900 ms/op 0.80
validate gossip attestation - struct 2.4533 ms/op 3.0412 ms/op 0.81
validate gossip attestation - treeBacked 2.3946 ms/op 3.1306 ms/op 0.76
Object access 1 prop 0.50400 ns/op 0.49500 ns/op 1.02
Map access 1 prop 0.45900 ns/op 0.48200 ns/op 0.95
Object get x1000 16.622 ns/op 16.461 ns/op 1.01
Map get x1000 1.0550 ns/op 1.1180 ns/op 0.94
Object set x1000 115.10 ns/op 109.47 ns/op 1.05
Map set x1000 83.811 ns/op 73.308 ns/op 1.14
Return object 10000 times 0.44690 ns/op 0.43570 ns/op 1.03
Throw Error 10000 times 6.8454 us/op 7.4604 us/op 0.92

by benchmarkbot/action

@twoeths twoeths force-pushed the tuyen/first-hearbeat branch from 5d75192 to c5cef29 Compare November 15, 2021 09:09
@twoeths
Copy link
Contributor Author

twoeths commented Nov 15, 2021

@dapplion even through we define discv5FirstQueryDelayMs, it'll always start issueing FINDNODES request from the 2nd heartbeat

021-11-15T10:10:51.530Z discv5:service Starting discv5 service with node id 5ba50119c3f282470441414915f897f587c1fb48ac2bdaef82039a9dc8053038
2021-11-15T10:10:51.531Z discv5:sessionService Starting session service with node id 5ba50119c3f282470441414915f897f587c1fb48ac2bdaef82039a9dc8053038


2021-11-15T10:11:21.539Z discv5:service Starting a new lookup. Id: 1

// Delay the 1st query after starting discv5
if (Date.now() - this.discv5StartMs <= this.discv5FirstQueryDelayMs) {
return;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whitespace after this if please 🙏

@@ -196,6 +202,10 @@ export class PeerDiscovery {
* Request to find peers. First, looked at cached peers in peerStore
*/
private async runFindRandomNodeQuery(): Promise<void> {
// Delay the 1st query after starting discv5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link to the Github issue that explain why this is necessary

@dapplion
Copy link
Contributor

even through we define discv5FirstQueryDelayMs, it'll always start issueing FINDNODES request from the 2nd heartbeat

Makes sense, not a problem 👍 but now we can add longer delays if we need that would go beyond the second heartbeat

@dapplion dapplion merged commit 0f5ee0e into master Nov 15, 2021
@dapplion dapplion deleted the tuyen/first-hearbeat branch November 15, 2021 11:42
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.

2 participants