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

sleep(0) must yield event loop #3987

Merged
merged 1 commit into from
May 8, 2022
Merged

sleep(0) must yield event loop #3987

merged 1 commit into from
May 8, 2022

Conversation

dapplion
Copy link
Contributor

@dapplion dapplion commented May 7, 2022

Motivation

Fix a regression introduced in #3944 which changed how sleep(0) behaves

-  if (ms < 0) return;
+  if (ms <= 0) {
+    return;
+  }

Description

  • sleep(0) must yield event loop
  • Add unit test to guarantee correct behaviour

@dapplion dapplion requested a review from a team as a code owner May 7, 2022 21:40
@codecov
Copy link

codecov bot commented May 7, 2022

Codecov Report

Merging #3987 (b532a17) into master (fe52e43) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #3987   +/-   ##
=======================================
  Coverage   36.78%   36.78%           
=======================================
  Files         325      325           
  Lines        9224     9224           
  Branches     1498     1498           
=======================================
  Hits         3393     3393           
  Misses       5640     5640           
  Partials      191      191           

@github-actions
Copy link
Contributor

github-actions bot commented May 7, 2022

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 370a7a3 Previous: fe52e43 Ratio
BeaconState.hashTreeRoot - No change 551.00 ns/op 510.00 ns/op 1.08
BeaconState.hashTreeRoot - 1 full validator 73.706 us/op 54.489 us/op 1.35
BeaconState.hashTreeRoot - 32 full validator 710.92 us/op 538.60 us/op 1.32
BeaconState.hashTreeRoot - 512 full validator 7.8501 ms/op 6.0222 ms/op 1.30
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 96.507 us/op 68.226 us/op 1.41
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2702 ms/op 943.16 us/op 1.35
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.397 ms/op 13.047 ms/op 1.41
BeaconState.hashTreeRoot - 1 balances 66.696 us/op 52.861 us/op 1.26
BeaconState.hashTreeRoot - 32 balances 616.00 us/op 473.51 us/op 1.30
BeaconState.hashTreeRoot - 512 balances 5.6644 ms/op 4.5838 ms/op 1.24
BeaconState.hashTreeRoot - 250000 balances 136.36 ms/op 102.05 ms/op 1.34
processSlot - 1 slots 14.382 us/op 9.6870 us/op 1.48
processSlot - 32 slots 2.2642 ms/op 1.5494 ms/op 1.46
getCommitteeAssignments - req 1 vs - 250000 vc 6.0456 ms/op 5.2431 ms/op 1.15
getCommitteeAssignments - req 100 vs - 250000 vc 8.1812 ms/op 7.2527 ms/op 1.13
getCommitteeAssignments - req 1000 vs - 250000 vc 8.3775 ms/op 7.7272 ms/op 1.08
computeProposers - vc 250000 21.719 ms/op 16.401 ms/op 1.32
computeEpochShuffling - vc 250000 171.17 ms/op 161.07 ms/op 1.06
getNextSyncCommittee - vc 250000 361.60 ms/op 267.46 ms/op 1.35
altair processAttestation - 250000 vs - 7PWei normalcase 5.0534 ms/op 3.7152 ms/op 1.36
altair processAttestation - 250000 vs - 7PWei worstcase 7.3849 ms/op 5.3955 ms/op 1.37
altair processAttestation - setStatus - 1/6 committees join 241.48 us/op 192.78 us/op 1.25
altair processAttestation - setStatus - 1/3 committees join 436.84 us/op 375.43 us/op 1.16
altair processAttestation - setStatus - 1/2 committees join 614.60 us/op 523.11 us/op 1.17
altair processAttestation - setStatus - 2/3 committees join 857.58 us/op 672.93 us/op 1.27
altair processAttestation - setStatus - 4/5 committees join 1.1695 ms/op 945.24 us/op 1.24
altair processAttestation - setStatus - 100% committees join 1.4142 ms/op 1.0878 ms/op 1.30
altair processBlock - 250000 vs - 7PWei normalcase 31.378 ms/op 31.491 ms/op 1.00
altair processBlock - 250000 vs - 7PWei normalcase hashState 44.537 ms/op 35.553 ms/op 1.25
altair processBlock - 250000 vs - 7PWei worstcase 87.791 ms/op 72.532 ms/op 1.21
altair processBlock - 250000 vs - 7PWei worstcase hashState 118.01 ms/op 107.19 ms/op 1.10
altair processEth1Data - 250000 vs - 7PWei normalcase 962.10 us/op 758.90 us/op 1.27
altair processEpoch - mainnet_e81889 668.85 ms/op 566.71 ms/op 1.18
mainnet_e81889 - altair beforeProcessEpoch 113.19 ms/op 156.45 ms/op 0.72
mainnet_e81889 - altair processJustificationAndFinalization 69.908 us/op 35.648 us/op 1.96
mainnet_e81889 - altair processInactivityUpdates 12.072 ms/op 11.531 ms/op 1.05
mainnet_e81889 - altair processRewardsAndPenalties 174.64 ms/op 83.601 ms/op 2.09
mainnet_e81889 - altair processRegistryUpdates 16.057 us/op 5.2320 us/op 3.07
mainnet_e81889 - altair processSlashings 6.4090 us/op 1.7820 us/op 3.60
mainnet_e81889 - altair processEth1DataReset 7.0440 us/op 1.9630 us/op 3.59
mainnet_e81889 - altair processEffectiveBalanceUpdates 8.3969 ms/op 7.0887 ms/op 1.18
mainnet_e81889 - altair processSlashingsReset 22.720 us/op 7.5140 us/op 3.02
mainnet_e81889 - altair processRandaoMixesReset 27.031 us/op 9.3140 us/op 2.90
mainnet_e81889 - altair processHistoricalRootsUpdate 8.4600 us/op 1.8670 us/op 4.53
mainnet_e81889 - altair processParticipationFlagUpdates 16.135 us/op 4.6280 us/op 3.49
mainnet_e81889 - altair processSyncCommitteeUpdates 5.8220 us/op 1.8710 us/op 3.11
mainnet_e81889 - altair afterProcessEpoch 196.56 ms/op 211.53 ms/op 0.93
altair processInactivityUpdates - 250000 normalcase 56.317 ms/op 42.629 ms/op 1.32
altair processInactivityUpdates - 250000 worstcase 34.746 ms/op 30.624 ms/op 1.13
altair processRewardsAndPenalties - 250000 normalcase 114.46 ms/op 119.38 ms/op 0.96
altair processRewardsAndPenalties - 250000 worstcase 126.52 ms/op 77.821 ms/op 1.63
altair processSyncCommitteeUpdates - 250000 362.01 ms/op 283.85 ms/op 1.28
Tree 40 250000 create 1.0105 s/op 680.15 ms/op 1.49
Tree 40 250000 get(125000) 347.82 ns/op 291.35 ns/op 1.19
Tree 40 250000 set(125000) 3.4352 us/op 2.2345 us/op 1.54
Tree 40 250000 toArray() 35.713 ms/op 32.183 ms/op 1.11
Tree 40 250000 iterate all - toArray() + loop 36.259 ms/op 32.234 ms/op 1.12
Tree 40 250000 iterate all - get(i) 142.24 ms/op 112.50 ms/op 1.26
MutableVector 250000 create 17.526 ms/op 14.651 ms/op 1.20
MutableVector 250000 get(125000) 13.789 ns/op 14.786 ns/op 0.93
MutableVector 250000 set(125000) 923.41 ns/op 590.39 ns/op 1.56
MutableVector 250000 toArray() 7.6781 ms/op 6.2367 ms/op 1.23
MutableVector 250000 iterate all - toArray() + loop 7.7376 ms/op 6.4350 ms/op 1.20
MutableVector 250000 iterate all - get(i) 3.5465 ms/op 3.4457 ms/op 1.03
Array 250000 create 7.7708 ms/op 5.5236 ms/op 1.41
Array 250000 clone - spread 2.0670 ms/op 2.4857 ms/op 0.83
Array 250000 get(125000) 1.0290 ns/op 1.1490 ns/op 0.90
Array 250000 set(125000) 1.0060 ns/op 1.1600 ns/op 0.87
Array 250000 iterate all - loop 141.79 us/op 167.81 us/op 0.84
effectiveBalanceIncrements clone Uint8Array 300000 367.68 us/op 70.671 us/op 5.20
effectiveBalanceIncrements clone MutableVector 300000 638.00 ns/op 788.00 ns/op 0.81
effectiveBalanceIncrements rw all Uint8Array 300000 202.35 us/op 301.75 us/op 0.67
effectiveBalanceIncrements rw all MutableVector 300000 212.02 ms/op 184.36 ms/op 1.15
aggregationBits - 2048 els - zipIndexesInBitList 29.787 us/op 31.022 us/op 0.96
regular array get 100000 times 62.701 us/op 67.418 us/op 0.93
wrappedArray get 100000 times 64.023 us/op 67.423 us/op 0.95
arrayWithProxy get 100000 times 42.930 ms/op 29.347 ms/op 1.46
ssz.Root.equals 538.00 ns/op 491.00 ns/op 1.10
byteArrayEquals 520.00 ns/op 407.00 ns/op 1.28
phase0 processBlock - 250000 vs - 7PWei normalcase 4.6356 ms/op 3.2403 ms/op 1.43
phase0 processBlock - 250000 vs - 7PWei worstcase 62.595 ms/op 44.331 ms/op 1.41
phase0 afterProcessEpoch - 250000 vs - 7PWei 191.79 ms/op 178.63 ms/op 1.07
phase0 beforeProcessEpoch - 250000 vs - 7PWei 90.074 ms/op 76.720 ms/op 1.17
phase0 processEpoch - mainnet_e58758 595.52 ms/op 514.40 ms/op 1.16
mainnet_e58758 - phase0 beforeProcessEpoch 277.23 ms/op 229.26 ms/op 1.21
mainnet_e58758 - phase0 processJustificationAndFinalization 71.929 us/op 26.271 us/op 2.74
mainnet_e58758 - phase0 processRewardsAndPenalties 95.333 ms/op 127.36 ms/op 0.75
mainnet_e58758 - phase0 processRegistryUpdates 33.775 us/op 16.083 us/op 2.10
mainnet_e58758 - phase0 processSlashings 7.0070 us/op 1.6460 us/op 4.26
mainnet_e58758 - phase0 processEth1DataReset 6.7090 us/op 1.8340 us/op 3.66
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 6.2645 ms/op 5.9050 ms/op 1.06
mainnet_e58758 - phase0 processSlashingsReset 22.427 us/op 6.5470 us/op 3.43
mainnet_e58758 - phase0 processRandaoMixesReset 27.342 us/op 7.1790 us/op 3.81
mainnet_e58758 - phase0 processHistoricalRootsUpdate 8.2770 us/op 1.5520 us/op 5.33
mainnet_e58758 - phase0 processParticipationRecordUpdates 24.510 us/op 7.6770 us/op 3.19
mainnet_e58758 - phase0 afterProcessEpoch 170.63 ms/op 156.65 ms/op 1.09
phase0 processEffectiveBalanceUpdates - 250000 normalcase 7.2776 ms/op 6.6031 ms/op 1.10
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 7.9335 ms/op 7.1552 ms/op 1.11
phase0 processRegistryUpdates - 250000 normalcase 28.054 us/op 12.649 us/op 2.22
phase0 processRegistryUpdates - 250000 badcase_full_deposits 516.56 us/op 526.61 us/op 0.98
phase0 processRegistryUpdates - 250000 worstcase 0.5 256.58 ms/op 208.11 ms/op 1.23
phase0 getAttestationDeltas - 250000 normalcase 16.211 ms/op 14.801 ms/op 1.10
phase0 getAttestationDeltas - 250000 worstcase 15.954 ms/op 14.977 ms/op 1.07
phase0 processSlashings - 250000 worstcase 6.8575 ms/op 5.5276 ms/op 1.24
shuffle list - 16384 els 11.731 ms/op 10.654 ms/op 1.10
shuffle list - 250000 els 167.31 ms/op 157.15 ms/op 1.06
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 695.96 us/op 380.68 us/op 1.83
pass gossip attestations to forkchoice per slot 4.0943 ms/op 3.6218 ms/op 1.13
computeDeltas 3.9410 ms/op 4.3667 ms/op 0.90
computeProposerBoostScoreFromBalances 513.77 us/op 502.93 us/op 1.02
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.5309 ms/op 2.1082 ms/op 1.20
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 88.663 us/op 75.442 us/op 1.18
BLS verify - blst-native 2.2583 ms/op 1.8619 ms/op 1.21
BLS verifyMultipleSignatures 3 - blst-native 4.7799 ms/op 3.8120 ms/op 1.25
BLS verifyMultipleSignatures 8 - blst-native 10.427 ms/op 8.2065 ms/op 1.27
BLS verifyMultipleSignatures 32 - blst-native 37.180 ms/op 29.745 ms/op 1.25
BLS aggregatePubkeys 32 - blst-native 52.508 us/op 39.543 us/op 1.33
BLS aggregatePubkeys 128 - blst-native 190.56 us/op 153.47 us/op 1.24
getAttestationsForBlock 72.685 ms/op 59.363 ms/op 1.22
CheckpointStateCache - add get delete 13.530 us/op 10.230 us/op 1.32
validate gossip signedAggregateAndProof - struct 5.1762 ms/op 4.2683 ms/op 1.21
validate gossip attestation - struct 2.5509 ms/op 2.0243 ms/op 1.26
pickEth1Vote - no votes 2.6516 ms/op 2.1650 ms/op 1.22
pickEth1Vote - max votes 24.488 ms/op 17.806 ms/op 1.38
pickEth1Vote - Eth1Data hashTreeRoot value x2048 14.621 ms/op 10.762 ms/op 1.36
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 25.191 ms/op 19.753 ms/op 1.28
pickEth1Vote - Eth1Data fastSerialize value x2048 1.8735 ms/op 1.6132 ms/op 1.16
pickEth1Vote - Eth1Data fastSerialize tree x2048 17.389 ms/op 11.634 ms/op 1.49
bytes32 toHexString 1.2860 us/op 931.00 ns/op 1.38
bytes32 Buffer.toString(hex) 862.00 ns/op 653.00 ns/op 1.32
bytes32 Buffer.toString(hex) from Uint8Array 1.1400 us/op 846.00 ns/op 1.35
bytes32 Buffer.toString(hex) + 0x 889.00 ns/op 679.00 ns/op 1.31
Object access 1 prop 0.49100 ns/op 0.33400 ns/op 1.47
Map access 1 prop 0.36300 ns/op 0.29300 ns/op 1.24
Object get x1000 17.846 ns/op 17.390 ns/op 1.03
Map get x1000 1.1850 ns/op 1.0620 ns/op 1.12
Object set x1000 122.80 ns/op 101.68 ns/op 1.21
Map set x1000 86.345 ns/op 61.186 ns/op 1.41
Return object 10000 times 0.44500 ns/op 0.37840 ns/op 1.18
Throw Error 10000 times 7.5328 us/op 6.0294 us/op 1.25
enrSubnets - fastDeserialize 64 bits 3.4980 us/op 2.6360 us/op 1.33
enrSubnets - ssz BitVector 64 bits 925.00 ns/op 747.00 ns/op 1.24
enrSubnets - fastDeserialize 4 bits 416.00 ns/op 383.00 ns/op 1.09
enrSubnets - ssz BitVector 4 bits 896.00 ns/op 723.00 ns/op 1.24
prioritizePeers score -10:0 att 32-0.1 sync 2-0 122.83 us/op 86.423 us/op 1.42
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 161.81 us/op 124.12 us/op 1.30
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 271.51 us/op 196.76 us/op 1.38
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 590.77 us/op 417.15 us/op 1.42
prioritizePeers score 0:0 att 64-1 sync 4-1 585.90 us/op 461.16 us/op 1.27
RateTracker 1000000 limit, 1 obj count per request 196.69 ns/op 176.28 ns/op 1.12
RateTracker 1000000 limit, 2 obj count per request 146.03 ns/op 129.13 ns/op 1.13
RateTracker 1000000 limit, 4 obj count per request 129.41 ns/op 106.36 ns/op 1.22
RateTracker 1000000 limit, 8 obj count per request 111.87 ns/op 95.464 ns/op 1.17
RateTracker with prune 4.9360 us/op 3.8170 us/op 1.29
array of 16000 items push then shift 5.3352 us/op 3.0681 us/op 1.74
LinkedList of 16000 items push then shift 20.860 ns/op 17.905 ns/op 1.17
array of 16000 items push then pop 242.42 ns/op 210.38 ns/op 1.15
LinkedList of 16000 items push then pop 20.316 ns/op 17.414 ns/op 1.17
array of 24000 items push then shift 8.2210 us/op 4.5523 us/op 1.81
LinkedList of 24000 items push then shift 20.431 ns/op 21.289 ns/op 0.96
array of 24000 items push then pop 242.19 ns/op 185.98 ns/op 1.30
LinkedList of 24000 items push then pop 18.983 ns/op 18.935 ns/op 1.00

by benchmarkbot/action

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