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

ci: update debug node action and test workflow to use on several steps #6291

Closed
wants to merge 4 commits into from

Conversation

matthewkeil
Copy link
Member

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.

@matthewkeil matthewkeil requested a review from a team as a code owner January 13, 2024 06:55
@matthewkeil matthewkeil force-pushed the mkeil/update-debug-node-workflow branch from 56447e1 to 0e58cea Compare January 13, 2024 06:57
@matthewkeil matthewkeil marked this pull request as draft January 13, 2024 07:09
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 2b6ddd2 Previous: 098d35a 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

Copy link
Contributor

@jeluard jeluard left a comment

Choose a reason for hiding this comment

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

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.

if: steps.cache-build-restore.outputs.cache-hit == 'true'
run: yarn build
run: |
if [ "${{ env.NODE_DEBUG }}" == "true" ]; then
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this required for the build step too?

Copy link
Member Author

Choose a reason for hiding this comment

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

yes. there have been a number of segfaults during build

Copy link
Contributor

Choose a reason for hiding this comment

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

I guess I was more curious about the install step actually. Probably it makes sense to be consistent and do it everywhere.

yarn test:unit

- uses: './.github/actions/core-dump'
if: ${{ always() && env.NODE_DEBUG == 'true' && steps.unit_tests.conclusion == 'failure' }}
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm wondering if there could be a way to integrate the core-dump as part of the previous step script. It would help with readability.

Copy link
Member Author

Choose a reason for hiding this comment

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

Not a bad idea but it needs to run as the last step of a job so that it can catch failures from any preceding step. Ideally this action should be added at the end of any job, as the last step, that may potentially throw a native fault

@nflaig nflaig changed the title feat: update debug node action and test workflow to use on several steps ci: update debug node action and test workflow to use on several steps Jan 13, 2024
@matthewkeil
Copy link
Member Author

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.

@jeluard
Copy link
Contributor

jeluard commented Jan 15, 2024

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.

@matthewkeil
Copy link
Member Author

matthewkeil commented Jan 18, 2024

Got the debug recipe PR finished and waiting for final approval

nodejs/unofficial-builds#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

@matthewkeil
Copy link
Member Author

matthewkeil commented Jan 20, 2024

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

@matthewkeil
Copy link
Member Author

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: nodejs/unofficial-builds#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.

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