Skip to content

Commit

Permalink
Fix iteration order in onBlobsSidecarsByRange (#4876)
Browse files Browse the repository at this point in the history
  • Loading branch information
dapplion committed Dec 7, 2022
1 parent 17c4d85 commit 4115f67
Showing 1 changed file with 3 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ export async function* onBlobsSidecarsByRange(
const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot);

// Iterate head chain with ascending block numbers
for (const block of headChain) {
for (let i = headChain.length - 1; i >= 0; i--) {
const block = headChain[i];

// Must include only blocks in the range requested
if (block.slot >= startSlot && block.slot < endSlot) {
// Note: Here the forkChoice head may change due to a re-org, so the headChain reflects the cannonical chain
Expand Down

1 comment on commit 4115f67

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Performance Alert ⚠️

Possible performance regression was detected for some benchmarks.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold.

Benchmark suite Current: 4115f67 Previous: 17c4d85 Ratio
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 27.610 us/op 9.0460 us/op 3.05
Full benchmark results
Benchmark suite Current: 4115f67 Previous: 17c4d85 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.3522 ms/op 1.7865 ms/op 1.32
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 88.916 us/op 62.338 us/op 1.43
BLS verify - blst-native 2.7517 ms/op 2.1733 ms/op 1.27
BLS verifyMultipleSignatures 3 - blst-native 5.5217 ms/op 4.4870 ms/op 1.23
BLS verifyMultipleSignatures 8 - blst-native 12.040 ms/op 9.7010 ms/op 1.24
BLS verifyMultipleSignatures 32 - blst-native 40.842 ms/op 35.257 ms/op 1.16
BLS aggregatePubkeys 32 - blst-native 55.862 us/op 46.708 us/op 1.20
BLS aggregatePubkeys 128 - blst-native 238.52 us/op 182.04 us/op 1.31
getAttestationsForBlock 119.79 ms/op 82.827 ms/op 1.45
isKnown best case - 1 super set check 508.00 ns/op 504.00 ns/op 1.01
isKnown normal case - 2 super set checks 493.00 ns/op 487.00 ns/op 1.01
isKnown worse case - 16 super set checks 475.00 ns/op 489.00 ns/op 0.97
CheckpointStateCache - add get delete 10.883 us/op 8.9760 us/op 1.21
validate gossip signedAggregateAndProof - struct 6.0945 ms/op 5.0240 ms/op 1.21
validate gossip attestation - struct 2.8254 ms/op 2.3764 ms/op 1.19
pickEth1Vote - no votes 2.6825 ms/op 2.1464 ms/op 1.25
pickEth1Vote - max votes 22.183 ms/op 17.590 ms/op 1.26
pickEth1Vote - Eth1Data hashTreeRoot value x2048 14.179 ms/op 12.176 ms/op 1.16
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 24.148 ms/op 19.560 ms/op 1.23
pickEth1Vote - Eth1Data fastSerialize value x2048 1.8585 ms/op 1.4423 ms/op 1.29
pickEth1Vote - Eth1Data fastSerialize tree x2048 15.190 ms/op 12.000 ms/op 1.27
bytes32 toHexString 1.2230 us/op 922.00 ns/op 1.33
bytes32 Buffer.toString(hex) 799.00 ns/op 730.00 ns/op 1.09
bytes32 Buffer.toString(hex) from Uint8Array 1.0640 us/op 1.0130 us/op 1.05
bytes32 Buffer.toString(hex) + 0x 778.00 ns/op 757.00 ns/op 1.03
Object access 1 prop 0.42700 ns/op 0.33900 ns/op 1.26
Map access 1 prop 0.32900 ns/op 0.33700 ns/op 0.98
Object get x1000 15.740 ns/op 11.216 ns/op 1.40
Map get x1000 0.91500 ns/op 0.92500 ns/op 0.99
Object set x1000 120.88 ns/op 70.867 ns/op 1.71
Map set x1000 79.547 ns/op 46.950 ns/op 1.69
Return object 10000 times 0.41480 ns/op 0.43840 ns/op 0.95
Throw Error 10000 times 7.1478 us/op 6.0904 us/op 1.17
fastMsgIdFn sha256 / 200 bytes 5.2810 us/op 4.9000 us/op 1.08
fastMsgIdFn h32 xxhash / 200 bytes 616.00 ns/op 536.00 ns/op 1.15
fastMsgIdFn h64 xxhash / 200 bytes 890.00 ns/op 799.00 ns/op 1.11
fastMsgIdFn sha256 / 1000 bytes 16.590 us/op 15.495 us/op 1.07
fastMsgIdFn h32 xxhash / 1000 bytes 804.00 ns/op 718.00 ns/op 1.12
fastMsgIdFn h64 xxhash / 1000 bytes 975.00 ns/op 851.00 ns/op 1.15
fastMsgIdFn sha256 / 10000 bytes 153.73 us/op 133.80 us/op 1.15
fastMsgIdFn h32 xxhash / 10000 bytes 2.8630 us/op 2.5280 us/op 1.13
fastMsgIdFn h64 xxhash / 10000 bytes 2.0510 us/op 1.8940 us/op 1.08
enrSubnets - fastDeserialize 64 bits 2.9950 us/op 2.6510 us/op 1.13
enrSubnets - ssz BitVector 64 bits 806.00 ns/op 803.00 ns/op 1.00
enrSubnets - fastDeserialize 4 bits 475.00 ns/op 374.00 ns/op 1.27
enrSubnets - ssz BitVector 4 bits 886.00 ns/op 824.00 ns/op 1.08
prioritizePeers score -10:0 att 32-0.1 sync 2-0 109.49 us/op 83.491 us/op 1.31
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 152.52 us/op 137.80 us/op 1.11
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 287.05 us/op 206.32 us/op 1.39
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 580.28 us/op 346.49 us/op 1.67
prioritizePeers score 0:0 att 64-1 sync 4-1 615.01 us/op 453.47 us/op 1.36
RateTracker 1000000 limit, 1 obj count per request 206.50 ns/op 189.94 ns/op 1.09
RateTracker 1000000 limit, 2 obj count per request 156.96 ns/op 138.33 ns/op 1.13
RateTracker 1000000 limit, 4 obj count per request 131.21 ns/op 111.29 ns/op 1.18
RateTracker 1000000 limit, 8 obj count per request 111.18 ns/op 98.946 ns/op 1.12
RateTracker with prune 5.3770 us/op 3.9130 us/op 1.37
array of 16000 items push then shift 5.0871 us/op 51.607 us/op 0.10
LinkedList of 16000 items push then shift 19.017 ns/op 12.621 ns/op 1.51
array of 16000 items push then pop 248.49 ns/op 208.73 ns/op 1.19
LinkedList of 16000 items push then pop 18.341 ns/op 12.294 ns/op 1.49
array of 24000 items push then shift 7.5670 us/op 77.376 us/op 0.10
LinkedList of 24000 items push then shift 19.743 ns/op 12.775 ns/op 1.55
array of 24000 items push then pop 249.49 ns/op 200.99 ns/op 1.24
LinkedList of 24000 items push then pop 17.892 ns/op 12.215 ns/op 1.46
intersect bitArray bitLen 8 12.097 ns/op 10.674 ns/op 1.13
intersect array and set length 8 199.97 ns/op 135.13 ns/op 1.48
intersect bitArray bitLen 128 69.326 ns/op 57.981 ns/op 1.20
intersect array and set length 128 2.5573 us/op 1.8278 us/op 1.40
Buffer.concat 32 items 2.6230 ns/op 1.7620 ns/op 1.49
pass gossip attestations to forkchoice per slot 4.5404 ms/op 3.6193 ms/op 1.25
computeDeltas 5.5700 ms/op 4.5552 ms/op 1.22
computeProposerBoostScoreFromBalances 856.30 us/op 803.76 us/op 1.07
altair processAttestation - 250000 vs - 7PWei normalcase 5.2350 ms/op 3.5124 ms/op 1.49
altair processAttestation - 250000 vs - 7PWei worstcase 9.2972 ms/op 5.6822 ms/op 1.64
altair processAttestation - setStatus - 1/6 committees join 235.31 us/op 181.00 us/op 1.30
altair processAttestation - setStatus - 1/3 committees join 450.41 us/op 352.80 us/op 1.28
altair processAttestation - setStatus - 1/2 committees join 656.47 us/op 507.60 us/op 1.29
altair processAttestation - setStatus - 2/3 committees join 910.97 us/op 661.37 us/op 1.38
altair processAttestation - setStatus - 4/5 committees join 1.1653 ms/op 922.42 us/op 1.26
altair processAttestation - setStatus - 100% committees join 1.4386 ms/op 1.1120 ms/op 1.29
altair processBlock - 250000 vs - 7PWei normalcase 30.195 ms/op 26.851 ms/op 1.12
altair processBlock - 250000 vs - 7PWei normalcase hashState 41.124 ms/op 33.677 ms/op 1.22
altair processBlock - 250000 vs - 7PWei worstcase 103.73 ms/op 91.382 ms/op 1.14
altair processBlock - 250000 vs - 7PWei worstcase hashState 121.24 ms/op 100.46 ms/op 1.21
phase0 processBlock - 250000 vs - 7PWei normalcase 4.0784 ms/op 3.2916 ms/op 1.24
phase0 processBlock - 250000 vs - 7PWei worstcase 61.153 ms/op 51.348 ms/op 1.19
altair processEth1Data - 250000 vs - 7PWei normalcase 1.0219 ms/op 737.71 us/op 1.39
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 23.186 us/op 7.9190 us/op 2.93
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 48.326 us/op 23.682 us/op 2.04
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 27.610 us/op 9.0460 us/op 3.05
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 22.435 us/op 7.9400 us/op 2.83
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 152.19 us/op 98.526 us/op 1.54
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 1.2901 ms/op 934.67 us/op 1.38
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 141069 17.251 ms/op 11.752 ms/op 1.47
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 250000 27.341 ms/op 21.271 ms/op 1.29
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 250000 88.937 ms/op 73.812 ms/op 1.20
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 250000 55.331 ms/op 37.824 ms/op 1.46
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 250000 144.32 ms/op 120.96 ms/op 1.19
Tree 40 250000 create 1.0225 s/op 698.94 ms/op 1.46
Tree 40 250000 get(125000) 334.77 ns/op 256.62 ns/op 1.30
Tree 40 250000 set(125000) 3.0285 us/op 2.1495 us/op 1.41
Tree 40 250000 toArray() 33.783 ms/op 27.243 ms/op 1.24
Tree 40 250000 iterate all - toArray() + loop 35.296 ms/op 27.614 ms/op 1.28
Tree 40 250000 iterate all - get(i) 126.14 ms/op 112.66 ms/op 1.12
MutableVector 250000 create 16.614 ms/op 13.431 ms/op 1.24
MutableVector 250000 get(125000) 13.525 ns/op 10.681 ns/op 1.27
MutableVector 250000 set(125000) 845.46 ns/op 591.24 ns/op 1.43
MutableVector 250000 toArray() 7.3368 ms/op 6.1881 ms/op 1.19
MutableVector 250000 iterate all - toArray() + loop 7.6059 ms/op 6.5149 ms/op 1.17
MutableVector 250000 iterate all - get(i) 3.4709 ms/op 2.8697 ms/op 1.21
Array 250000 create 7.1322 ms/op 5.4269 ms/op 1.31
Array 250000 clone - spread 4.1867 ms/op 2.2871 ms/op 1.83
Array 250000 get(125000) 1.7440 ns/op 1.1380 ns/op 1.53
Array 250000 set(125000) 1.7780 ns/op 1.1230 ns/op 1.58
Array 250000 iterate all - loop 137.41 us/op 152.68 us/op 0.90
effectiveBalanceIncrements clone Uint8Array 300000 113.17 us/op 392.18 us/op 0.29
effectiveBalanceIncrements clone MutableVector 300000 1.2770 us/op 679.00 ns/op 1.88
effectiveBalanceIncrements rw all Uint8Array 300000 286.55 us/op 247.61 us/op 1.16
effectiveBalanceIncrements rw all MutableVector 300000 276.22 ms/op 144.78 ms/op 1.91
phase0 afterProcessEpoch - 250000 vs - 7PWei 206.47 ms/op 199.21 ms/op 1.04
phase0 beforeProcessEpoch - 250000 vs - 7PWei 76.951 ms/op 58.069 ms/op 1.33
altair processEpoch - mainnet_e81889 660.23 ms/op 570.97 ms/op 1.16
mainnet_e81889 - altair beforeProcessEpoch 156.18 ms/op 80.236 ms/op 1.95
mainnet_e81889 - altair processJustificationAndFinalization 72.865 us/op 19.451 us/op 3.75
mainnet_e81889 - altair processInactivityUpdates 11.698 ms/op 9.0018 ms/op 1.30
mainnet_e81889 - altair processRewardsAndPenalties 105.60 ms/op 131.42 ms/op 0.80
mainnet_e81889 - altair processRegistryUpdates 18.375 us/op 2.7970 us/op 6.57
mainnet_e81889 - altair processSlashings 4.6040 us/op 542.00 ns/op 8.49
mainnet_e81889 - altair processEth1DataReset 4.7720 us/op 612.00 ns/op 7.80
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.4133 ms/op 2.1020 ms/op 1.15
mainnet_e81889 - altair processSlashingsReset 23.082 us/op 4.1160 us/op 5.61
mainnet_e81889 - altair processRandaoMixesReset 27.887 us/op 4.5650 us/op 6.11
mainnet_e81889 - altair processHistoricalRootsUpdate 4.1220 us/op 720.00 ns/op 5.72
mainnet_e81889 - altair processParticipationFlagUpdates 18.535 us/op 2.3890 us/op 7.76
mainnet_e81889 - altair processSyncCommitteeUpdates 3.5830 us/op 646.00 ns/op 5.55
mainnet_e81889 - altair afterProcessEpoch 211.89 ms/op 198.60 ms/op 1.07
phase0 processEpoch - mainnet_e58758 626.25 ms/op 488.50 ms/op 1.28
mainnet_e58758 - phase0 beforeProcessEpoch 285.78 ms/op 178.51 ms/op 1.60
mainnet_e58758 - phase0 processJustificationAndFinalization 68.988 us/op 18.278 us/op 3.77
mainnet_e58758 - phase0 processRewardsAndPenalties 157.13 ms/op 101.02 ms/op 1.56
mainnet_e58758 - phase0 processRegistryUpdates 36.968 us/op 8.2860 us/op 4.46
mainnet_e58758 - phase0 processSlashings 3.7740 us/op 652.00 ns/op 5.79
mainnet_e58758 - phase0 processEth1DataReset 3.8180 us/op 722.00 ns/op 5.29
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.4555 ms/op 1.6514 ms/op 1.49
mainnet_e58758 - phase0 processSlashingsReset 20.997 us/op 4.3890 us/op 4.78
mainnet_e58758 - phase0 processRandaoMixesReset 28.811 us/op 4.3940 us/op 6.56
mainnet_e58758 - phase0 processHistoricalRootsUpdate 4.5820 us/op 766.00 ns/op 5.98
mainnet_e58758 - phase0 processParticipationRecordUpdates 27.352 us/op 3.8380 us/op 7.13
mainnet_e58758 - phase0 afterProcessEpoch 174.31 ms/op 163.63 ms/op 1.07
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.3961 ms/op 1.9713 ms/op 1.22
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.8524 ms/op 2.1841 ms/op 1.31
altair processInactivityUpdates - 250000 normalcase 52.093 ms/op 40.038 ms/op 1.30
altair processInactivityUpdates - 250000 worstcase 67.390 ms/op 33.422 ms/op 2.02
phase0 processRegistryUpdates - 250000 normalcase 33.216 us/op 6.9980 us/op 4.75
phase0 processRegistryUpdates - 250000 badcase_full_deposits 510.75 us/op 379.80 us/op 1.34
phase0 processRegistryUpdates - 250000 worstcase 0.5 245.52 ms/op 174.92 ms/op 1.40
altair processRewardsAndPenalties - 250000 normalcase 151.09 ms/op 74.788 ms/op 2.02
altair processRewardsAndPenalties - 250000 worstcase 98.810 ms/op 107.40 ms/op 0.92
phase0 getAttestationDeltas - 250000 normalcase 15.104 ms/op 11.620 ms/op 1.30
phase0 getAttestationDeltas - 250000 worstcase 15.673 ms/op 11.588 ms/op 1.35
phase0 processSlashings - 250000 worstcase 7.2596 ms/op 5.6777 ms/op 1.28
altair processSyncCommitteeUpdates - 250000 342.69 ms/op 287.19 ms/op 1.19
BeaconState.hashTreeRoot - No change 740.00 ns/op 510.00 ns/op 1.45
BeaconState.hashTreeRoot - 1 full validator 81.661 us/op 72.446 us/op 1.13
BeaconState.hashTreeRoot - 32 full validator 840.81 us/op 727.37 us/op 1.16
BeaconState.hashTreeRoot - 512 full validator 7.7104 ms/op 6.8987 ms/op 1.12
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 129.14 us/op 92.380 us/op 1.40
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.5287 ms/op 1.2971 ms/op 1.18
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.943 ms/op 17.143 ms/op 1.10
BeaconState.hashTreeRoot - 1 balances 77.637 us/op 69.073 us/op 1.12
BeaconState.hashTreeRoot - 32 balances 784.71 us/op 734.47 us/op 1.07
BeaconState.hashTreeRoot - 512 balances 6.9252 ms/op 6.1410 ms/op 1.13
BeaconState.hashTreeRoot - 250000 balances 116.06 ms/op 100.78 ms/op 1.15
aggregationBits - 2048 els - zipIndexesInBitList 37.999 us/op 25.164 us/op 1.51
regular array get 100000 times 54.712 us/op 60.600 us/op 0.90
wrappedArray get 100000 times 56.565 us/op 61.639 us/op 0.92
arrayWithProxy get 100000 times 33.007 ms/op 28.411 ms/op 1.16
ssz.Root.equals 562.00 ns/op 493.00 ns/op 1.14
byteArrayEquals 575.00 ns/op 474.00 ns/op 1.21
shuffle list - 16384 els 12.242 ms/op 11.545 ms/op 1.06
shuffle list - 250000 els 173.84 ms/op 169.20 ms/op 1.03
processSlot - 1 slots 19.449 us/op 12.820 us/op 1.52
processSlot - 32 slots 2.5994 ms/op 2.0043 ms/op 1.30
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 578.32 us/op 391.18 us/op 1.48
getCommitteeAssignments - req 1 vs - 250000 vc 5.5800 ms/op 5.3342 ms/op 1.05
getCommitteeAssignments - req 100 vs - 250000 vc 7.8092 ms/op 7.8169 ms/op 1.00
getCommitteeAssignments - req 1000 vs - 250000 vc 8.7725 ms/op 8.4051 ms/op 1.04
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 9.4900 ns/op 8.5900 ns/op 1.10
state getBlockRootAtSlot - 250000 vs - 7PWei 1.3194 us/op 1.0173 us/op 1.30
computeProposers - vc 250000 21.538 ms/op 17.368 ms/op 1.24
computeEpochShuffling - vc 250000 189.10 ms/op 171.46 ms/op 1.10
getNextSyncCommittee - vc 250000 353.99 ms/op 288.26 ms/op 1.23

Please sign in to comment.