lodestar
lodestar copied to clipboard
ci: update debug node action and test workflow to use on several steps
Motivation
We are getting a lot of seg faults in various steps.
- Updated
.github/actions/setup-debug-node
to overwrite node with a debug version of node. - Updated main workflow to add
NODE_DEBUG
flag that controls usage of regular or debug version throughout workflow. - Updated several jobs/steps to accommodate NODE_DEBUG functionality
Testing This workflow needs to be tested to verify that the added scripts and functionality works as expected. Will go through a round of reviews and then may need to update if there are bugs.
Performance Report
✔️ no performance regression detected
Full benchmark results
Benchmark suite | Current: 2b6ddd209828b6c6155d94563ab08866526fe607 | Previous: 098d35aa0f5afc351a131b8a1e88485907985226 | Ratio |
---|---|---|---|
getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 452.94 us/op | 888.87 us/op | 0.51 |
getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 79.809 us/op | 81.806 us/op | 0.98 |
BLS verify - blst-native | 1.3113 ms/op | 1.2765 ms/op | 1.03 |
BLS verifyMultipleSignatures 3 - blst-native | 2.7485 ms/op | 2.6851 ms/op | 1.02 |
BLS verifyMultipleSignatures 8 - blst-native | 6.0405 ms/op | 5.8816 ms/op | 1.03 |
BLS verifyMultipleSignatures 32 - blst-native | 22.057 ms/op | 21.530 ms/op | 1.02 |
BLS verifyMultipleSignatures 64 - blst-native | 43.456 ms/op | 42.411 ms/op | 1.02 |
BLS verifyMultipleSignatures 128 - blst-native | 85.854 ms/op | 84.174 ms/op | 1.02 |
BLS deserializing 10000 signatures | 942.17 ms/op | 897.12 ms/op | 1.05 |
BLS deserializing 100000 signatures | 9.4333 s/op | 9.0524 s/op | 1.04 |
BLS verifyMultipleSignatures - same message - 3 - blst-native | 1.3478 ms/op | 1.2609 ms/op | 1.07 |
BLS verifyMultipleSignatures - same message - 8 - blst-native | 1.5258 ms/op | 1.5241 ms/op | 1.00 |
BLS verifyMultipleSignatures - same message - 32 - blst-native | 2.3449 ms/op | 2.1958 ms/op | 1.07 |
BLS verifyMultipleSignatures - same message - 64 - blst-native | 3.4406 ms/op | 4.2555 ms/op | 0.81 |
BLS verifyMultipleSignatures - same message - 128 - blst-native | 5.6454 ms/op | 7.3021 ms/op | 0.77 |
BLS aggregatePubkeys 32 - blst-native | 25.927 us/op | 26.835 us/op | 0.97 |
BLS aggregatePubkeys 128 - blst-native | 100.89 us/op | 96.919 us/op | 1.04 |
getAttestationsForBlock | 45.811 ms/op | 43.893 ms/op | 1.04 |
getSlashingsAndExits - default max | 131.97 us/op | 167.21 us/op | 0.79 |
getSlashingsAndExits - 2k | 375.23 us/op | 362.90 us/op | 1.03 |
proposeBlockBody type=full, size=empty | 6.0436 ms/op | 4.9525 ms/op | 1.22 |
isKnown best case - 1 super set check | 383.00 ns/op | 322.00 ns/op | 1.19 |
isKnown normal case - 2 super set checks | 344.00 ns/op | 292.00 ns/op | 1.18 |
isKnown worse case - 16 super set checks | 336.00 ns/op | 280.00 ns/op | 1.20 |
CheckpointStateCache - add get delete | 6.5770 us/op | 5.5280 us/op | 1.19 |
validate api signedAggregateAndProof - struct | 2.9190 ms/op | 2.7344 ms/op | 1.07 |
validate gossip signedAggregateAndProof - struct | 2.9422 ms/op | 2.7392 ms/op | 1.07 |
validate gossip attestation - vc 640000 | 1.3442 ms/op | 1.3155 ms/op | 1.02 |
batch validate gossip attestation - vc 640000 - chunk 32 | 157.22 us/op | 156.51 us/op | 1.00 |
batch validate gossip attestation - vc 640000 - chunk 64 | 139.01 us/op | 136.96 us/op | 1.01 |
batch validate gossip attestation - vc 640000 - chunk 128 | 127.76 us/op | 126.47 us/op | 1.01 |
batch validate gossip attestation - vc 640000 - chunk 256 | 129.19 us/op | 129.92 us/op | 0.99 |
pickEth1Vote - no votes | 1.1531 ms/op | 1.1328 ms/op | 1.02 |
pickEth1Vote - max votes | 7.6883 ms/op | 10.212 ms/op | 0.75 |
pickEth1Vote - Eth1Data hashTreeRoot value x2048 | 15.584 ms/op | 21.411 ms/op | 0.73 |
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 | 21.046 ms/op | 27.950 ms/op | 0.75 |
pickEth1Vote - Eth1Data fastSerialize value x2048 | 655.26 us/op | 574.72 us/op | 1.14 |
pickEth1Vote - Eth1Data fastSerialize tree x2048 | 4.9744 ms/op | 6.7798 ms/op | 0.73 |
bytes32 toHexString | 512.00 ns/op | 492.00 ns/op | 1.04 |
bytes32 Buffer.toString(hex) | 293.00 ns/op | 281.00 ns/op | 1.04 |
bytes32 Buffer.toString(hex) from Uint8Array | 424.00 ns/op | 417.00 ns/op | 1.02 |
bytes32 Buffer.toString(hex) + 0x | 292.00 ns/op | 279.00 ns/op | 1.05 |
Object access 1 prop | 0.15400 ns/op | 0.15500 ns/op | 0.99 |
Map access 1 prop | 0.15000 ns/op | 0.13100 ns/op | 1.15 |
Object get x1000 | 7.4820 ns/op | 7.6080 ns/op | 0.98 |
Map get x1000 | 0.76700 ns/op | 0.71600 ns/op | 1.07 |
Object set x1000 | 49.817 ns/op | 48.308 ns/op | 1.03 |
Map set x1000 | 38.898 ns/op | 36.982 ns/op | 1.05 |
Return object 10000 times | 0.24830 ns/op | 0.22620 ns/op | 1.10 |
Throw Error 10000 times | 4.0747 us/op | 3.6822 us/op | 1.11 |
fastMsgIdFn sha256 / 200 bytes | 3.3640 us/op | 3.1060 us/op | 1.08 |
fastMsgIdFn h32 xxhash / 200 bytes | 279.00 ns/op | 265.00 ns/op | 1.05 |
fastMsgIdFn h64 xxhash / 200 bytes | 341.00 ns/op | 323.00 ns/op | 1.06 |
fastMsgIdFn sha256 / 1000 bytes | 11.322 us/op | 10.945 us/op | 1.03 |
fastMsgIdFn h32 xxhash / 1000 bytes | 403.00 ns/op | 395.00 ns/op | 1.02 |
fastMsgIdFn h64 xxhash / 1000 bytes | 417.00 ns/op | 392.00 ns/op | 1.06 |
fastMsgIdFn sha256 / 10000 bytes | 102.68 us/op | 99.916 us/op | 1.03 |
fastMsgIdFn h32 xxhash / 10000 bytes | 1.9160 us/op | 1.8590 us/op | 1.03 |
fastMsgIdFn h64 xxhash / 10000 bytes | 1.3350 us/op | 1.2660 us/op | 1.05 |
send data - 1000 256B messages | 18.498 ms/op | 18.371 ms/op | 1.01 |
send data - 1000 512B messages | 25.679 ms/op | 27.519 ms/op | 0.93 |
send data - 1000 1024B messages | 40.376 ms/op | 39.244 ms/op | 1.03 |
send data - 1000 1200B messages | 37.123 ms/op | 35.531 ms/op | 1.04 |
send data - 1000 2048B messages | 43.852 ms/op | 42.203 ms/op | 1.04 |
send data - 1000 4096B messages | 41.356 ms/op | 38.492 ms/op | 1.07 |
send data - 1000 16384B messages | 114.10 ms/op | 115.46 ms/op | 0.99 |
send data - 1000 65536B messages | 400.39 ms/op | 491.72 ms/op | 0.81 |
enrSubnets - fastDeserialize 64 bits | 1.2750 us/op | 1.2300 us/op | 1.04 |
enrSubnets - ssz BitVector 64 bits | 417.00 ns/op | 412.00 ns/op | 1.01 |
enrSubnets - fastDeserialize 4 bits | 169.00 ns/op | 164.00 ns/op | 1.03 |
enrSubnets - ssz BitVector 4 bits | 418.00 ns/op | 411.00 ns/op | 1.02 |
prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 101.16 us/op | 99.463 us/op | 1.02 |
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 124.85 us/op | 124.24 us/op | 1.00 |
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 158.28 us/op | 159.19 us/op | 0.99 |
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 286.31 us/op | 282.49 us/op | 1.01 |
prioritizePeers score 0:0 att 64-1 sync 4-1 | 337.95 us/op | 332.88 us/op | 1.02 |
array of 16000 items push then shift | 1.6346 us/op | 1.5714 us/op | 1.04 |
LinkedList of 16000 items push then shift | 9.0750 ns/op | 8.8190 ns/op | 1.03 |
array of 16000 items push then pop | 73.864 ns/op | 70.913 ns/op | 1.04 |
LinkedList of 16000 items push then pop | 8.8260 ns/op | 8.6040 ns/op | 1.03 |
array of 24000 items push then shift | 2.4209 us/op | 2.3384 us/op | 1.04 |
LinkedList of 24000 items push then shift | 8.9750 ns/op | 8.7580 ns/op | 1.02 |
array of 24000 items push then pop | 96.680 ns/op | 97.806 ns/op | 0.99 |
LinkedList of 24000 items push then pop | 8.6900 ns/op | 8.5670 ns/op | 1.01 |
intersect bitArray bitLen 8 | 6.4280 ns/op | 6.2680 ns/op | 1.03 |
intersect array and set length 8 | 63.329 ns/op | 60.829 ns/op | 1.04 |
intersect bitArray bitLen 128 | 33.893 ns/op | 33.197 ns/op | 1.02 |
intersect array and set length 128 | 863.75 ns/op | 838.91 ns/op | 1.03 |
bitArray.getTrueBitIndexes() bitLen 128 | 1.3740 us/op | 1.3520 us/op | 1.02 |
bitArray.getTrueBitIndexes() bitLen 248 | 2.4240 us/op | 2.4010 us/op | 1.01 |
bitArray.getTrueBitIndexes() bitLen 512 | 4.7240 us/op | 4.5520 us/op | 1.04 |
Buffer.concat 32 items | 923.00 ns/op | 963.00 ns/op | 0.96 |
Uint8Array.set 32 items | 1.5520 us/op | 2.0480 us/op | 0.76 |
Set add up to 64 items then delete first | 4.3871 us/op | 4.1959 us/op | 1.05 |
OrderedSet add up to 64 items then delete first | 5.5259 us/op | 5.3522 us/op | 1.03 |
Set add up to 64 items then delete last | 4.6666 us/op | 4.5169 us/op | 1.03 |
OrderedSet add up to 64 items then delete last | 5.8099 us/op | 5.7226 us/op | 1.02 |
Set add up to 64 items then delete middle | 4.6328 us/op | 4.4896 us/op | 1.03 |
OrderedSet add up to 64 items then delete middle | 7.0753 us/op | 6.8868 us/op | 1.03 |
Set add up to 128 items then delete first | 9.3725 us/op | 9.1514 us/op | 1.02 |
OrderedSet add up to 128 items then delete first | 12.434 us/op | 12.073 us/op | 1.03 |
Set add up to 128 items then delete last | 9.2446 us/op | 9.0686 us/op | 1.02 |
OrderedSet add up to 128 items then delete last | 11.634 us/op | 11.341 us/op | 1.03 |
Set add up to 128 items then delete middle | 9.2096 us/op | 8.9844 us/op | 1.03 |
OrderedSet add up to 128 items then delete middle | 17.041 us/op | 16.622 us/op | 1.03 |
Set add up to 256 items then delete first | 18.925 us/op | 18.215 us/op | 1.04 |
OrderedSet add up to 256 items then delete first | 25.485 us/op | 24.649 us/op | 1.03 |
Set add up to 256 items then delete last | 18.683 us/op | 17.833 us/op | 1.05 |
OrderedSet add up to 256 items then delete last | 23.612 us/op | 22.833 us/op | 1.03 |
Set add up to 256 items then delete middle | 18.349 us/op | 17.903 us/op | 1.02 |
OrderedSet add up to 256 items then delete middle | 45.423 us/op | 44.007 us/op | 1.03 |
transfer serialized Status (84 B) | 1.7690 us/op | 1.7650 us/op | 1.00 |
copy serialized Status (84 B) | 1.4510 us/op | 1.4630 us/op | 0.99 |
transfer serialized SignedVoluntaryExit (112 B) | 1.8760 us/op | 1.9200 us/op | 0.98 |
copy serialized SignedVoluntaryExit (112 B) | 1.4940 us/op | 1.5010 us/op | 1.00 |
transfer serialized ProposerSlashing (416 B) | 2.0330 us/op | 2.3260 us/op | 0.87 |
copy serialized ProposerSlashing (416 B) | 1.7250 us/op | 2.1790 us/op | 0.79 |
transfer serialized Attestation (485 B) | 1.9920 us/op | 2.4240 us/op | 0.82 |
copy serialized Attestation (485 B) | 1.7250 us/op | 2.1480 us/op | 0.80 |
transfer serialized AttesterSlashing (33232 B) | 2.2220 us/op | 2.7670 us/op | 0.80 |
copy serialized AttesterSlashing (33232 B) | 5.0030 us/op | 5.6870 us/op | 0.88 |
transfer serialized Small SignedBeaconBlock (128000 B) | 2.5970 us/op | 3.1460 us/op | 0.83 |
copy serialized Small SignedBeaconBlock (128000 B) | 16.393 us/op | 13.742 us/op | 1.19 |
transfer serialized Avg SignedBeaconBlock (200000 B) | 3.3640 us/op | 3.1660 us/op | 1.06 |
copy serialized Avg SignedBeaconBlock (200000 B) | 19.890 us/op | 61.172 us/op | 0.33 |
transfer serialized BlobsSidecar (524380 B) | 3.3280 us/op | 3.4140 us/op | 0.97 |
copy serialized BlobsSidecar (524380 B) | 88.317 us/op | 143.30 us/op | 0.62 |
transfer serialized Big SignedBeaconBlock (1000000 B) | 3.6870 us/op | 3.3340 us/op | 1.11 |
copy serialized Big SignedBeaconBlock (1000000 B) | 211.97 us/op | 289.61 us/op | 0.73 |
pass gossip attestations to forkchoice per slot | 4.2336 ms/op | 4.0072 ms/op | 1.06 |
forkChoice updateHead vc 100000 bc 64 eq 0 | 729.58 us/op | 672.26 us/op | 1.09 |
forkChoice updateHead vc 600000 bc 64 eq 0 | 4.3104 ms/op | 4.1098 ms/op | 1.05 |
forkChoice updateHead vc 1000000 bc 64 eq 0 | 7.6012 ms/op | 6.9299 ms/op | 1.10 |
forkChoice updateHead vc 600000 bc 320 eq 0 | 4.4278 ms/op | 4.0727 ms/op | 1.09 |
forkChoice updateHead vc 600000 bc 1200 eq 0 | 4.5118 ms/op | 4.3032 ms/op | 1.05 |
forkChoice updateHead vc 600000 bc 7200 eq 0 | 5.3968 ms/op | 5.1962 ms/op | 1.04 |
forkChoice updateHead vc 600000 bc 64 eq 1000 | 11.455 ms/op | 11.016 ms/op | 1.04 |
forkChoice updateHead vc 600000 bc 64 eq 10000 | 11.676 ms/op | 11.799 ms/op | 0.99 |
forkChoice updateHead vc 600000 bc 64 eq 300000 | 15.737 ms/op | 15.713 ms/op | 1.00 |
computeDeltas 500000 validators 300 proto nodes | 6.5657 ms/op | 6.4179 ms/op | 1.02 |
computeDeltas 500000 validators 1200 proto nodes | 6.6713 ms/op | 6.3016 ms/op | 1.06 |
computeDeltas 500000 validators 7200 proto nodes | 6.2917 ms/op | 6.1984 ms/op | 1.02 |
computeDeltas 750000 validators 300 proto nodes | 10.140 ms/op | 9.5143 ms/op | 1.07 |
computeDeltas 750000 validators 1200 proto nodes | 10.117 ms/op | 9.4484 ms/op | 1.07 |
computeDeltas 750000 validators 7200 proto nodes | 9.7386 ms/op | 9.6244 ms/op | 1.01 |
computeDeltas 1400000 validators 300 proto nodes | 19.021 ms/op | 17.789 ms/op | 1.07 |
computeDeltas 1400000 validators 1200 proto nodes | 18.855 ms/op | 18.136 ms/op | 1.04 |
computeDeltas 1400000 validators 7200 proto nodes | 19.128 ms/op | 17.790 ms/op | 1.08 |
computeDeltas 2100000 validators 300 proto nodes | 27.512 ms/op | 27.878 ms/op | 0.99 |
computeDeltas 2100000 validators 1200 proto nodes | 28.044 ms/op | 27.713 ms/op | 1.01 |
computeDeltas 2100000 validators 7200 proto nodes | 28.511 ms/op | 27.761 ms/op | 1.03 |
computeProposerBoostScoreFromBalances 500000 validators | 3.6848 ms/op | 3.6677 ms/op | 1.00 |
computeProposerBoostScoreFromBalances 750000 validators | 3.6816 ms/op | 3.6746 ms/op | 1.00 |
computeProposerBoostScoreFromBalances 1400000 validators | 3.7339 ms/op | 3.6649 ms/op | 1.02 |
computeProposerBoostScoreFromBalances 2100000 validators | 3.7102 ms/op | 3.6749 ms/op | 1.01 |
altair processAttestation - 250000 vs - 7PWei normalcase | 2.2033 ms/op | 2.0848 ms/op | 1.06 |
altair processAttestation - 250000 vs - 7PWei worstcase | 3.3224 ms/op | 3.1230 ms/op | 1.06 |
altair processAttestation - setStatus - 1/6 committees join | 179.97 us/op | 140.95 us/op | 1.28 |
altair processAttestation - setStatus - 1/3 committees join | 347.12 us/op | 269.85 us/op | 1.29 |
altair processAttestation - setStatus - 1/2 committees join | 467.34 us/op | 371.26 us/op | 1.26 |
altair processAttestation - setStatus - 2/3 committees join | 590.10 us/op | 469.22 us/op | 1.26 |
altair processAttestation - setStatus - 4/5 committees join | 791.23 us/op | 664.21 us/op | 1.19 |
altair processAttestation - setStatus - 100% committees join | 925.42 us/op | 761.53 us/op | 1.22 |
altair processBlock - 250000 vs - 7PWei normalcase | 10.077 ms/op | 9.6696 ms/op | 1.04 |
altair processBlock - 250000 vs - 7PWei normalcase hashState | 38.853 ms/op | 37.358 ms/op | 1.04 |
altair processBlock - 250000 vs - 7PWei worstcase | 39.818 ms/op | 37.292 ms/op | 1.07 |
altair processBlock - 250000 vs - 7PWei worstcase hashState | 97.760 ms/op | 94.421 ms/op | 1.04 |
phase0 processBlock - 250000 vs - 7PWei normalcase | 6.1397 ms/op | 2.4498 ms/op | 2.51 |
phase0 processBlock - 250000 vs - 7PWei worstcase | 30.044 ms/op | 30.047 ms/op | 1.00 |
altair processEth1Data - 250000 vs - 7PWei normalcase | 509.37 us/op | 575.48 us/op | 0.89 |
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 | 10.033 us/op | 10.503 us/op | 0.96 |
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 | 56.799 us/op | 49.470 us/op | 1.15 |
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 | 18.177 us/op | 18.102 us/op | 1.00 |
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 | 11.829 us/op | 7.0010 us/op | 1.69 |
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 | 162.17 us/op | 122.08 us/op | 1.33 |
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 | 1.0215 ms/op | 1.4374 ms/op | 0.71 |
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 1.4467 ms/op | 1.5396 ms/op | 0.94 |
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 1.6911 ms/op | 1.4982 ms/op | 1.13 |
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 3.1216 ms/op | 3.5953 ms/op | 0.87 |
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 2.1819 ms/op | 2.2686 ms/op | 0.96 |
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 4.5466 ms/op | 5.0290 ms/op | 0.90 |
Tree 40 250000 create | 359.93 ms/op | 353.78 ms/op | 1.02 |
Tree 40 250000 get(125000) | 191.18 ns/op | 192.00 ns/op | 1.00 |
Tree 40 250000 set(125000) | 980.32 ns/op | 977.41 ns/op | 1.00 |
Tree 40 250000 toArray() | 18.389 ms/op | 18.254 ms/op | 1.01 |
Tree 40 250000 iterate all - toArray() + loop | 18.566 ms/op | 18.390 ms/op | 1.01 |
Tree 40 250000 iterate all - get(i) | 63.937 ms/op | 64.565 ms/op | 0.99 |
MutableVector 250000 create | 12.876 ms/op | 12.470 ms/op | 1.03 |
MutableVector 250000 get(125000) | 6.4280 ns/op | 6.5210 ns/op | 0.99 |
MutableVector 250000 set(125000) | 265.53 ns/op | 254.73 ns/op | 1.04 |
MutableVector 250000 toArray() | 2.7762 ms/op | 3.1632 ms/op | 0.88 |
MutableVector 250000 iterate all - toArray() + loop | 3.3672 ms/op | 3.2663 ms/op | 1.03 |
MutableVector 250000 iterate all - get(i) | 1.4938 ms/op | 1.5162 ms/op | 0.99 |
Array 250000 create | 3.1160 ms/op | 2.8420 ms/op | 1.10 |
Array 250000 clone - spread | 1.1757 ms/op | 1.2547 ms/op | 0.94 |
Array 250000 get(125000) | 1.0080 ns/op | 1.0420 ns/op | 0.97 |
Array 250000 set(125000) | 4.0530 ns/op | 4.0770 ns/op | 0.99 |
Array 250000 iterate all - loop | 161.45 us/op | 163.83 us/op | 0.99 |
effectiveBalanceIncrements clone Uint8Array 300000 | 25.409 us/op | 28.476 us/op | 0.89 |
effectiveBalanceIncrements clone MutableVector 300000 | 349.00 ns/op | 361.00 ns/op | 0.97 |
effectiveBalanceIncrements rw all Uint8Array 300000 | 193.71 us/op | 199.33 us/op | 0.97 |
effectiveBalanceIncrements rw all MutableVector 300000 | 80.352 ms/op | 80.980 ms/op | 0.99 |
phase0 afterProcessEpoch - 250000 vs - 7PWei | 108.95 ms/op | 113.06 ms/op | 0.96 |
phase0 beforeProcessEpoch - 250000 vs - 7PWei | 51.838 ms/op | 52.523 ms/op | 0.99 |
altair processEpoch - mainnet_e81889 | 503.01 ms/op | 500.78 ms/op | 1.00 |
mainnet_e81889 - altair beforeProcessEpoch | 80.460 ms/op | 78.569 ms/op | 1.02 |
mainnet_e81889 - altair processJustificationAndFinalization | 15.296 us/op | 14.959 us/op | 1.02 |
mainnet_e81889 - altair processInactivityUpdates | 5.8425 ms/op | 5.7191 ms/op | 1.02 |
mainnet_e81889 - altair processRewardsAndPenalties | 65.400 ms/op | 60.703 ms/op | 1.08 |
mainnet_e81889 - altair processRegistryUpdates | 2.6090 us/op | 2.4840 us/op | 1.05 |
mainnet_e81889 - altair processSlashings | 455.00 ns/op | 446.00 ns/op | 1.02 |
mainnet_e81889 - altair processEth1DataReset | 498.00 ns/op | 484.00 ns/op | 1.03 |
mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.4416 ms/op | 1.4180 ms/op | 1.02 |
mainnet_e81889 - altair processSlashingsReset | 3.6190 us/op | 4.0430 us/op | 0.90 |
mainnet_e81889 - altair processRandaoMixesReset | 5.3260 us/op | 4.2190 us/op | 1.26 |
mainnet_e81889 - altair processHistoricalRootsUpdate | 923.00 ns/op | 708.00 ns/op | 1.30 |
mainnet_e81889 - altair processParticipationFlagUpdates | 1.7220 us/op | 1.8430 us/op | 0.93 |
mainnet_e81889 - altair processSyncCommitteeUpdates | 474.00 ns/op | 683.00 ns/op | 0.69 |
mainnet_e81889 - altair afterProcessEpoch | 116.86 ms/op | 116.77 ms/op | 1.00 |
capella processEpoch - mainnet_e217614 | 2.1211 s/op | 2.0613 s/op | 1.03 |
mainnet_e217614 - capella beforeProcessEpoch | 487.96 ms/op | 482.87 ms/op | 1.01 |
mainnet_e217614 - capella processJustificationAndFinalization | 13.429 us/op | 19.876 us/op | 0.68 |
mainnet_e217614 - capella processInactivityUpdates | 17.153 ms/op | 21.052 ms/op | 0.81 |
mainnet_e217614 - capella processRewardsAndPenalties | 410.33 ms/op | 402.56 ms/op | 1.02 |
mainnet_e217614 - capella processRegistryUpdates | 16.188 us/op | 16.894 us/op | 0.96 |
mainnet_e217614 - capella processSlashings | 492.00 ns/op | 540.00 ns/op | 0.91 |
mainnet_e217614 - capella processEth1DataReset | 369.00 ns/op | 401.00 ns/op | 0.92 |
mainnet_e217614 - capella processEffectiveBalanceUpdates | 4.4473 ms/op | 4.9395 ms/op | 0.90 |
mainnet_e217614 - capella processSlashingsReset | 3.0030 us/op | 3.2420 us/op | 0.93 |
mainnet_e217614 - capella processRandaoMixesReset | 4.2960 us/op | 4.6230 us/op | 0.93 |
mainnet_e217614 - capella processHistoricalRootsUpdate | 599.00 ns/op | 510.00 ns/op | 1.17 |
mainnet_e217614 - capella processParticipationFlagUpdates | 1.6200 us/op | 1.6520 us/op | 0.98 |
mainnet_e217614 - capella afterProcessEpoch | 322.77 ms/op | 315.64 ms/op | 1.02 |
phase0 processEpoch - mainnet_e58758 | 485.31 ms/op | 436.42 ms/op | 1.11 |
mainnet_e58758 - phase0 beforeProcessEpoch | 142.82 ms/op | 113.07 ms/op | 1.26 |
mainnet_e58758 - phase0 processJustificationAndFinalization | 14.761 us/op | 14.567 us/op | 1.01 |
mainnet_e58758 - phase0 processRewardsAndPenalties | 54.663 ms/op | 54.928 ms/op | 1.00 |
mainnet_e58758 - phase0 processRegistryUpdates | 9.9620 us/op | 8.9170 us/op | 1.12 |
mainnet_e58758 - phase0 processSlashings | 501.00 ns/op | 415.00 ns/op | 1.21 |
mainnet_e58758 - phase0 processEth1DataReset | 363.00 ns/op | 385.00 ns/op | 0.94 |
mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 1.1708 ms/op | 1.1442 ms/op | 1.02 |
mainnet_e58758 - phase0 processSlashingsReset | 3.0200 us/op | 2.7360 us/op | 1.10 |
mainnet_e58758 - phase0 processRandaoMixesReset | 3.9590 us/op | 4.1590 us/op | 0.95 |
mainnet_e58758 - phase0 processHistoricalRootsUpdate | 450.00 ns/op | 391.00 ns/op | 1.15 |
mainnet_e58758 - phase0 processParticipationRecordUpdates | 4.0890 us/op | 4.9290 us/op | 0.83 |
mainnet_e58758 - phase0 afterProcessEpoch | 95.576 ms/op | 94.664 ms/op | 1.01 |
phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.4028 ms/op | 1.3292 ms/op | 1.06 |
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.5155 ms/op | 1.9439 ms/op | 0.78 |
altair processInactivityUpdates - 250000 normalcase | 30.286 ms/op | 30.144 ms/op | 1.00 |
altair processInactivityUpdates - 250000 worstcase | 22.913 ms/op | 30.633 ms/op | 0.75 |
phase0 processRegistryUpdates - 250000 normalcase | 9.8320 us/op | 9.5720 us/op | 1.03 |
phase0 processRegistryUpdates - 250000 badcase_full_deposits | 334.50 us/op | 311.40 us/op | 1.07 |
phase0 processRegistryUpdates - 250000 worstcase 0.5 | 133.60 ms/op | 157.72 ms/op | 0.85 |
altair processRewardsAndPenalties - 250000 normalcase | 57.414 ms/op | 63.425 ms/op | 0.91 |
altair processRewardsAndPenalties - 250000 worstcase | 58.399 ms/op | 56.387 ms/op | 1.04 |
phase0 getAttestationDeltas - 250000 normalcase | 8.6889 ms/op | 9.1089 ms/op | 0.95 |
phase0 getAttestationDeltas - 250000 worstcase | 8.7732 ms/op | 8.9035 ms/op | 0.99 |
phase0 processSlashings - 250000 worstcase | 83.967 us/op | 85.653 us/op | 0.98 |
altair processSyncCommitteeUpdates - 250000 | 152.51 ms/op | 149.30 ms/op | 1.02 |
BeaconState.hashTreeRoot - No change | 243.00 ns/op | 255.00 ns/op | 0.95 |
BeaconState.hashTreeRoot - 1 full validator | 166.78 us/op | 147.97 us/op | 1.13 |
BeaconState.hashTreeRoot - 32 full validator | 1.7510 ms/op | 1.5379 ms/op | 1.14 |
BeaconState.hashTreeRoot - 512 full validator | 17.992 ms/op | 16.716 ms/op | 1.08 |
BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 192.36 us/op | 208.62 us/op | 0.92 |
BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 2.5279 ms/op | 2.2623 ms/op | 1.12 |
BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 26.426 ms/op | 29.707 ms/op | 0.89 |
BeaconState.hashTreeRoot - 1 balances | 118.57 us/op | 156.13 us/op | 0.76 |
BeaconState.hashTreeRoot - 32 balances | 1.3079 ms/op | 1.3426 ms/op | 0.97 |
BeaconState.hashTreeRoot - 512 balances | 11.520 ms/op | 11.820 ms/op | 0.97 |
BeaconState.hashTreeRoot - 250000 balances | 225.58 ms/op | 225.34 ms/op | 1.00 |
aggregationBits - 2048 els - zipIndexesInBitList | 17.188 us/op | 16.067 us/op | 1.07 |
byteArrayEquals 32 | 73.573 ns/op | 70.736 ns/op | 1.04 |
Buffer.compare 32 | 56.612 ns/op | 53.038 ns/op | 1.07 |
byteArrayEquals 1024 | 2.0043 us/op | 1.9314 us/op | 1.04 |
Buffer.compare 1024 | 73.065 ns/op | 68.500 ns/op | 1.07 |
byteArrayEquals 16384 | 31.925 us/op | 30.764 us/op | 1.04 |
Buffer.compare 16384 | 260.89 ns/op | 259.49 ns/op | 1.01 |
byteArrayEquals 123687377 | 243.77 ms/op | 232.04 ms/op | 1.05 |
Buffer.compare 123687377 | 6.2296 ms/op | 6.2015 ms/op | 1.00 |
byteArrayEquals 32 - diff last byte | 71.630 ns/op | 71.372 ns/op | 1.00 |
Buffer.compare 32 - diff last byte | 57.548 ns/op | 55.467 ns/op | 1.04 |
byteArrayEquals 1024 - diff last byte | 2.0505 us/op | 2.0202 us/op | 1.01 |
Buffer.compare 1024 - diff last byte | 76.316 ns/op | 71.718 ns/op | 1.06 |
byteArrayEquals 16384 - diff last byte | 32.731 us/op | 32.211 us/op | 1.02 |
Buffer.compare 16384 - diff last byte | 270.71 ns/op | 273.41 ns/op | 0.99 |
byteArrayEquals 123687377 - diff last byte | 246.42 ms/op | 239.13 ms/op | 1.03 |
Buffer.compare 123687377 - diff last byte | 6.1892 ms/op | 6.0965 ms/op | 1.02 |
byteArrayEquals 32 - random bytes | 5.3300 ns/op | 5.1520 ns/op | 1.03 |
Buffer.compare 32 - random bytes | 60.325 ns/op | 59.021 ns/op | 1.02 |
byteArrayEquals 1024 - random bytes | 5.2300 ns/op | 5.0610 ns/op | 1.03 |
Buffer.compare 1024 - random bytes | 60.115 ns/op | 58.590 ns/op | 1.03 |
byteArrayEquals 16384 - random bytes | 5.2490 ns/op | 5.3160 ns/op | 0.99 |
Buffer.compare 16384 - random bytes | 60.170 ns/op | 58.236 ns/op | 1.03 |
byteArrayEquals 123687377 - random bytes | 8.6600 ns/op | 8.3200 ns/op | 1.04 |
Buffer.compare 123687377 - random bytes | 63.360 ns/op | 61.650 ns/op | 1.03 |
regular array get 100000 times | 44.513 us/op | 43.111 us/op | 1.03 |
wrappedArray get 100000 times | 44.452 us/op | 43.048 us/op | 1.03 |
arrayWithProxy get 100000 times | 15.212 ms/op | 14.020 ms/op | 1.09 |
ssz.Root.equals | 53.988 ns/op | 52.358 ns/op | 1.03 |
byteArrayEquals | 53.196 ns/op | 51.512 ns/op | 1.03 |
Buffer.compare | 11.520 ns/op | 10.542 ns/op | 1.09 |
shuffle list - 16384 els | 6.7733 ms/op | 6.9002 ms/op | 0.98 |
shuffle list - 250000 els | 99.290 ms/op | 99.823 ms/op | 0.99 |
processSlot - 1 slots | 17.795 us/op | 16.517 us/op | 1.08 |
processSlot - 32 slots | 3.5822 ms/op | 3.5401 ms/op | 1.01 |
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 60.309 ms/op | 60.992 ms/op | 0.99 |
getCommitteeAssignments - req 1 vs - 250000 vc | 2.5240 ms/op | 2.4611 ms/op | 1.03 |
getCommitteeAssignments - req 100 vs - 250000 vc | 3.7316 ms/op | 3.6420 ms/op | 1.02 |
getCommitteeAssignments - req 1000 vs - 250000 vc | 4.0526 ms/op | 3.9976 ms/op | 1.01 |
findModifiedValidators - 10000 modified validators | 526.56 ms/op | 559.22 ms/op | 0.94 |
findModifiedValidators - 1000 modified validators | 424.44 ms/op | 425.51 ms/op | 1.00 |
findModifiedValidators - 100 modified validators | 419.88 ms/op | 397.22 ms/op | 1.06 |
findModifiedValidators - 10 modified validators | 415.38 ms/op | 372.77 ms/op | 1.11 |
findModifiedValidators - 1 modified validators | 426.43 ms/op | 394.92 ms/op | 1.08 |
findModifiedValidators - no difference | 423.16 ms/op | 403.22 ms/op | 1.05 |
compare ViewDUs | 4.4138 s/op | 4.3589 s/op | 1.01 |
compare each validator Uint8Array | 1.4620 s/op | 1.9616 s/op | 0.75 |
compare ViewDU to Uint8Array | 1.1264 s/op | 1.1229 s/op | 1.00 |
migrate state 1000000 validators, 24 modified, 0 new | 802.92 ms/op | 807.40 ms/op | 0.99 |
migrate state 1000000 validators, 1700 modified, 1000 new | 1.0750 s/op | 1.1144 s/op | 0.96 |
migrate state 1000000 validators, 3400 modified, 2000 new | 1.2932 s/op | 1.3544 s/op | 0.95 |
migrate state 1500000 validators, 24 modified, 0 new | 823.69 ms/op | 818.38 ms/op | 1.01 |
migrate state 1500000 validators, 1700 modified, 1000 new | 1.0920 s/op | 1.1023 s/op | 0.99 |
migrate state 1500000 validators, 3400 modified, 2000 new | 1.3204 s/op | 1.3207 s/op | 1.00 |
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 4.1100 ns/op | 4.0900 ns/op | 1.00 |
state getBlockRootAtSlot - 250000 vs - 7PWei | 862.78 ns/op | 706.77 ns/op | 1.22 |
computeProposers - vc 250000 | 9.4333 ms/op | 9.2365 ms/op | 1.02 |
computeEpochShuffling - vc 250000 | 102.41 ms/op | 101.63 ms/op | 1.01 |
getNextSyncCommittee - vc 250000 | 156.81 ms/op | 154.61 ms/op | 1.01 |
computeSigningRoot for AttestationData | 25.721 us/op | 27.064 us/op | 0.95 |
hash AttestationData serialized data then Buffer.toString(base64) | 2.2651 us/op | 2.2756 us/op | 1.00 |
toHexString serialized data | 1.0287 us/op | 1.0751 us/op | 0.96 |
Buffer.toString(base64) | 213.97 ns/op | 217.78 ns/op | 0.98 |
by benchmarkbot/action
Nice job! In general it looks a bit complex and brittle. I'm wondering if it's not worth biting the bullet and implementing a compte GitHub action that would be more robust and could be reused.
I moved this to draft because I am working on a few things to make it better. My big picture goal is to modify the setup node action to check for a debug version of the binary and us that instead of the base node.
When I was debugging the download of node was brittle and its built manually by another workflow in this repo. I am building a Chainsafe/node_debug fork that tracks the main repo and builds versions of node as they are released. The repo will serve to host the node binary for download by workflows in a predictable location that has no bandwidth limits.
Then the updated setup-node action will allow passing a debug_version flag that will select the correct binary. I dont want to have to build and host all platforms, only linux, which give me pause to PR the action to the main repo though. This will get rid of the manual overwrite of the node binary and will also make sure we will be using the same node versions as the setup-node action.
As for the ulimit command I am not against putting that behind a custom action but that feels like a lot of work to get away from a single bash conditional. I am open to it but think its kinda overkill considering the workflows do not get updated too often. Mostly its the versions of node that change regularly, which is why I am putting a bit of effort into building the releases in the node_debug fork so we are testing across several versions.
Thanks for the detailed answer! Makes sense!
but that feels like a lot of work to get away from a single bash conditional
Totally. We can always revisit later if need be.
Got the debug recipe PR finished and waiting for final approval
https://github.com/nodejs/unofficial-builds/pull/107
Need to rewrite the setup-node work I built to use Chainsafe/node_debug fork as it will end up getting deprecated now that the official one will be up soon
~~The unofficial-build PR was not approved by the build team so will revert to using our fork and setup-node updates. Will get the setup-node branch touched up and published next week and implemented in Lodestar ASAP.~~
The unofficial-build PR was just given the go ahead... Fake out!!! Got closed accidentally by CI. Its been reopened and is awaiting approval and merge. Will ask what the process for building retroactive version is
The first unofficial-build PR was merged!!! 🎉
Sadly though there is a bug/issue with the system that prevents historical builds from being queued. I have started a PR here: https://github.com/nodejs/unofficial-builds/pull/116 to fix that and got initial feedback but it needs a bit more work to get over the hump. Will try and finish it this week and get some debug versions published.