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

feat: use snappy-wasm #6483

Open
wants to merge 12 commits into
base: unstable
Choose a base branch
from
Open

feat: use snappy-wasm #6483

wants to merge 12 commits into from

Conversation

wemeetagain
Copy link
Member

@wemeetagain wemeetagain commented Feb 26, 2024

Motivation

Benchmarks show snappy-wasm is faster at compressing and uncompressing than snappyjs.

Description

  • Use snappy-wasm for compressing / uncompressing gossip payloads
  • Add more snappy vs snappyjs vs snappy-wasm benchmarks

TODO

  • deploy this branch on our test fleet - deployed on feat3
  network / gossip / snappy
    compress
      ✔ 100 bytes - compress - snappyjs                                     335566.9 ops/s    2.980032 us/op        -        685 runs   2.54 s
      ✔ 100 bytes - compress - snappy                                       388610.3 ops/s    2.573272 us/op        -        870 runs   2.74 s
      ✔ 100 bytes - compress - snappy-wasm                                  583254.0 ops/s    1.714519 us/op        -        476 runs   1.32 s
      ✔ 100 bytes - compress - snappy-wasm - prealloc                        1586695 ops/s    630.2410 ns/op        -        481 runs  0.804 s
      ✔ 200 bytes - compress - snappyjs                                     298272.8 ops/s    3.352636 us/op        -        213 runs   1.22 s
      ✔ 200 bytes - compress - snappy                                       419528.0 ops/s    2.383631 us/op        -        926 runs   2.71 s
      ✔ 200 bytes - compress - snappy-wasm                                  472468.5 ops/s    2.116543 us/op        -        577 runs   1.72 s
      ✔ 200 bytes - compress - snappy-wasm - prealloc                        1430445 ops/s    699.0830 ns/op        -        868 runs   1.11 s
      ✔ 300 bytes - compress - snappyjs                                     265124.9 ops/s    3.771807 us/op        -        137 runs   1.02 s
      ✔ 300 bytes - compress - snappy                                       361683.9 ops/s    2.764845 us/op        -       1332 runs   4.18 s
      ✔ 300 bytes - compress - snappy-wasm                                  443688.4 ops/s    2.253834 us/op        -        859 runs   2.44 s
      ✔ 300 bytes - compress - snappy-wasm - prealloc                        1213825 ops/s    823.8420 ns/op        -        370 runs  0.807 s
      ✔ 400 bytes - compress - snappyjs                                     262168.5 ops/s    3.814341 us/op        -        358 runs   1.87 s
      ✔ 400 bytes - compress - snappy                                       382494.9 ops/s    2.614414 us/op        -       1562 runs   4.58 s
      ✔ 400 bytes - compress - snappy-wasm                                  406373.2 ops/s    2.460792 us/op        -        797 runs   2.46 s
      ✔ 400 bytes - compress - snappy-wasm - prealloc                        1111715 ops/s    899.5110 ns/op        -        450 runs  0.906 s
      ✔ 500 bytes - compress - snappyjs                                     229213.1 ops/s    4.362753 us/op        -        359 runs   2.07 s
      ✔ 500 bytes - compress - snappy                                       373695.8 ops/s    2.675973 us/op        -       2050 runs   5.99 s
      ✔ 500 bytes - compress - snappy-wasm                                  714917.4 ops/s    1.398763 us/op        -        960 runs   1.84 s
      ✔ 500 bytes - compress - snappy-wasm - prealloc                        1054619 ops/s    948.2100 ns/op        -        427 runs  0.907 s
      ✔ 1000 bytes - compress - snappyjs                                    148702.3 ops/s    6.724847 us/op        -        171 runs   1.65 s
      ✔ 1000 bytes - compress - snappy                                      423688.1 ops/s    2.360227 us/op        -        525 runs   1.74 s
      ✔ 1000 bytes - compress - snappy-wasm                                 524350.6 ops/s    1.907121 us/op        -        273 runs   1.03 s
      ✔ 1000 bytes - compress - snappy-wasm - prealloc                      685191.5 ops/s    1.459446 us/op        -        349 runs   1.01 s
      ✔ 10000 bytes - compress - snappyjs                                   21716.92 ops/s    46.04704 us/op        -         16 runs   1.24 s
      ✔ 10000 bytes - compress - snappy                                     98051.32 ops/s    10.19874 us/op        -        184 runs   2.39 s
      ✔ 10000 bytes - compress - snappy-wasm                                114681.8 ops/s    8.719783 us/op        -         49 runs  0.937 s
      ✔ 10000 bytes - compress - snappy-wasm - prealloc                     111203.6 ops/s    8.992518 us/op        -         49 runs  0.953 s
      ✔ 100000 bytes - compress - snappyjs                                  2947.313 ops/s    339.2921 us/op        -         12 runs   4.74 s
      ✔ 100000 bytes - compress - snappy                                    14963.78 ops/s    66.82801 us/op        -         70 runs   5.19 s
      ✔ 100000 bytes - compress - snappy-wasm                               19868.33 ops/s    50.33136 us/op        -         14 runs   1.21 s
      ✔ 100000 bytes - compress - snappy-wasm - prealloc                    24579.34 ops/s    40.68457 us/op        -         13 runs   1.06 s
    uncompress
      ✔ 100 bytes - uncompress - snappyjs                                   589201.6 ops/s    1.697212 us/op        -        242 runs  0.911 s
      ✔ 100 bytes - uncompress - snappy                                     537424.1 ops/s    1.860728 us/op        -        220 runs  0.910 s
      ✔ 100 bytes - uncompress - snappy-wasm                                634966.2 ops/s    1.574887 us/op        -        194 runs  0.808 s
      ✔ 100 bytes - uncompress - snappy-wasm - prealloc                      1846964 ops/s    541.4290 ns/op        -        559 runs  0.804 s
      ✔ 200 bytes - uncompress - snappyjs                                   395141.8 ops/s    2.530737 us/op        -        281 runs   1.22 s
      ✔ 200 bytes - uncompress - snappy                                     536862.6 ops/s    1.862674 us/op        -        274 runs   1.01 s
      ✔ 200 bytes - uncompress - snappy-wasm                                420251.6 ops/s    2.379527 us/op        -        129 runs  0.810 s
      ✔ 200 bytes - uncompress - snappy-wasm - prealloc                      1746167 ops/s    572.6830 ns/op        -        529 runs  0.804 s
      ✔ 300 bytes - uncompress - snappyjs                                   441676.2 ops/s    2.264102 us/op        -        898 runs   2.53 s
      ✔ 300 bytes - uncompress - snappy                                     551313.2 ops/s    1.813851 us/op        -        336 runs   1.11 s
      ✔ 300 bytes - uncompress - snappy-wasm                                494773.0 ops/s    2.021129 us/op        -        203 runs  0.912 s
      ✔ 300 bytes - uncompress - snappy-wasm - prealloc                      1528680 ops/s    654.1590 ns/op        -        465 runs  0.805 s
      ✔ 400 bytes - uncompress - snappyjs                                   383746.1 ops/s    2.605890 us/op        -        235 runs   1.11 s
      ✔ 400 bytes - uncompress - snappy                                     515986.6 ops/s    1.938035 us/op        -        158 runs  0.809 s
      ✔ 400 bytes - uncompress - snappy-wasm                                392947.8 ops/s    2.544867 us/op        -        322 runs   1.32 s
      ✔ 400 bytes - uncompress - snappy-wasm - prealloc                      1425978 ops/s    701.2730 ns/op        -        721 runs   1.01 s
      ✔ 500 bytes - uncompress - snappyjs                                   330727.5 ops/s    3.023637 us/op        -        173 runs   1.02 s
      ✔ 500 bytes - uncompress - snappy                                     513874.1 ops/s    1.946002 us/op        -        157 runs  0.806 s
      ✔ 500 bytes - uncompress - snappy-wasm                                389263.0 ops/s    2.568957 us/op        -        161 runs  0.914 s
      ✔ 500 bytes - uncompress - snappy-wasm - prealloc                      1330936 ops/s    751.3510 ns/op        -        672 runs   1.01 s
      ✔ 1000 bytes - uncompress - snappyjs                                  241393.9 ops/s    4.142606 us/op        -        126 runs   1.03 s
      ✔ 1000 bytes - uncompress - snappy                                    491119.6 ops/s    2.036164 us/op        -        201 runs  0.911 s
      ✔ 1000 bytes - uncompress - snappy-wasm                               361794.5 ops/s    2.764000 us/op        -        148 runs  0.910 s
      ✔ 1000 bytes - uncompress - snappy-wasm - prealloc                    959026.5 ops/s    1.042724 us/op        -        390 runs  0.909 s
      ✔ 10000 bytes - uncompress - snappyjs                                 40519.03 ops/s    24.67976 us/op        -         16 runs  0.913 s
      ✔ 10000 bytes - uncompress - snappy                                   202537.6 ops/s    4.937355 us/op        -        796 runs   4.43 s
      ✔ 10000 bytes - uncompress - snappy-wasm                              165017.6 ops/s    6.059960 us/op        -         52 runs  0.822 s
      ✔ 10000 bytes - uncompress - snappy-wasm - prealloc                   175061.5 ops/s    5.712277 us/op        -        130 runs   1.25 s
      ✔ 100000 bytes - uncompress - snappyjs                                4030.391 ops/s    248.1149 us/op        -         12 runs   3.71 s
      ✔ 100000 bytes - uncompress - snappy                                  35459.43 ops/s    28.20124 us/op        -         41 runs   1.67 s
      ✔ 100000 bytes - uncompress - snappy-wasm                             22449.16 ops/s    44.54509 us/op        -         13 runs   1.11 s
      ✔ 100000 bytes - uncompress - snappy-wasm - prealloc                  27169.50 ops/s    36.80598 us/op        -         13 runs  0.997 s

Closes #4170

@wemeetagain wemeetagain requested a review from a team as a code owner February 26, 2024 17:29
Copy link
Contributor

github-actions bot commented Feb 26, 2024

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: c75b90a Previous: 2f86f4a Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.6804 ms/op 1.7579 ms/op 0.96
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.128 us/op 37.888 us/op 1.03
BLS verify - blst 908.49 us/op 886.32 us/op 1.03
BLS verifyMultipleSignatures 3 - blst 1.3015 ms/op 1.3113 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 2.0829 ms/op 2.1182 ms/op 0.98
BLS verifyMultipleSignatures 32 - blst 4.4258 ms/op 4.6003 ms/op 0.96
BLS verifyMultipleSignatures 64 - blst 8.3036 ms/op 8.6068 ms/op 0.96
BLS verifyMultipleSignatures 128 - blst 16.005 ms/op 16.361 ms/op 0.98
BLS deserializing 10000 signatures 601.45 ms/op 617.78 ms/op 0.97
BLS deserializing 100000 signatures 6.1649 s/op 6.2260 s/op 0.99
BLS verifyMultipleSignatures - same message - 3 - blst 936.84 us/op 939.83 us/op 1.00
BLS verifyMultipleSignatures - same message - 8 - blst 1.1235 ms/op 1.0832 ms/op 1.04
BLS verifyMultipleSignatures - same message - 32 - blst 1.7168 ms/op 1.6986 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 2.5930 ms/op 2.5586 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.1327 ms/op 4.1807 ms/op 0.99
BLS aggregatePubkeys 32 - blst 17.561 us/op 17.853 us/op 0.98
BLS aggregatePubkeys 128 - blst 61.876 us/op 63.420 us/op 0.98
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 63.034 ms/op 47.014 ms/op 1.34
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 56.621 ms/op 40.851 ms/op 1.39
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 30.186 ms/op 28.296 ms/op 1.07
getSlashingsAndExits - default max 75.286 us/op 65.301 us/op 1.15
getSlashingsAndExits - 2k 244.32 us/op 269.30 us/op 0.91
proposeBlockBody type=full, size=empty 5.0415 ms/op 4.8839 ms/op 1.03
isKnown best case - 1 super set check 474.00 ns/op 464.00 ns/op 1.02
isKnown normal case - 2 super set checks 475.00 ns/op 442.00 ns/op 1.07
isKnown worse case - 16 super set checks 485.00 ns/op 449.00 ns/op 1.08
InMemoryCheckpointStateCache - add get delete 4.2740 us/op 4.3050 us/op 0.99
validate api signedAggregateAndProof - struct 1.9383 ms/op 1.4993 ms/op 1.29
validate gossip signedAggregateAndProof - struct 1.5917 ms/op 1.8021 ms/op 0.88
validate gossip attestation - vc 640000 988.50 us/op 970.15 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 32 123.07 us/op 114.88 us/op 1.07
batch validate gossip attestation - vc 640000 - chunk 64 109.03 us/op 103.71 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 128 99.715 us/op 97.615 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 256 102.13 us/op 96.314 us/op 1.06
pickEth1Vote - no votes 849.66 us/op 844.56 us/op 1.01
pickEth1Vote - max votes 6.0453 ms/op 7.3962 ms/op 0.82
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.961 ms/op 16.278 ms/op 0.86
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 23.687 ms/op 19.945 ms/op 1.19
pickEth1Vote - Eth1Data fastSerialize value x2048 373.47 us/op 335.67 us/op 1.11
pickEth1Vote - Eth1Data fastSerialize tree x2048 7.5610 ms/op 4.8320 ms/op 1.56
bytes32 toHexString 605.00 ns/op 576.00 ns/op 1.05
bytes32 Buffer.toString(hex) 446.00 ns/op 419.00 ns/op 1.06
bytes32 Buffer.toString(hex) from Uint8Array 543.00 ns/op 524.00 ns/op 1.04
bytes32 Buffer.toString(hex) + 0x 452.00 ns/op 410.00 ns/op 1.10
Object access 1 prop 0.34100 ns/op 0.31200 ns/op 1.09
Map access 1 prop 0.32000 ns/op 0.31500 ns/op 1.02
Object get x1000 5.2670 ns/op 5.0510 ns/op 1.04
Map get x1000 5.8680 ns/op 5.9300 ns/op 0.99
Object set x1000 27.090 ns/op 25.877 ns/op 1.05
Map set x1000 19.652 ns/op 18.413 ns/op 1.07
Return object 10000 times 0.30080 ns/op 0.29380 ns/op 1.02
Throw Error 10000 times 2.7459 us/op 2.6568 us/op 1.03
fastMsgIdFn sha256 / 200 bytes 2.1410 us/op 1.9210 us/op 1.11
fastMsgIdFn h32 xxhash / 200 bytes 448.00 ns/op 397.00 ns/op 1.13
fastMsgIdFn h64 xxhash / 200 bytes 460.00 ns/op 448.00 ns/op 1.03
fastMsgIdFn sha256 / 1000 bytes 6.1130 us/op 5.9260 us/op 1.03
fastMsgIdFn h32 xxhash / 1000 bytes 609.00 ns/op 510.00 ns/op 1.19
fastMsgIdFn h64 xxhash / 1000 bytes 538.00 ns/op 514.00 ns/op 1.05
fastMsgIdFn sha256 / 10000 bytes 51.279 us/op 49.882 us/op 1.03
fastMsgIdFn h32 xxhash / 10000 bytes 1.9790 us/op 1.8830 us/op 1.05
fastMsgIdFn h64 xxhash / 10000 bytes 1.3520 us/op 1.3210 us/op 1.02
100 bytes - compress - snappyjs 1.5168 us/op
100 bytes - compress - snappy 1.5171 us/op
100 bytes - compress - snappy-wasm 942.48 ns/op
100 bytes - compress - snappy-wasm - prealloc 344.80 ns/op
200 bytes - compress - snappyjs 2.1534 us/op
200 bytes - compress - snappy 1.6064 us/op
200 bytes - compress - snappy-wasm 1.2363 us/op
200 bytes - compress - snappy-wasm - prealloc 378.14 ns/op
300 bytes - compress - snappyjs 2.2495 us/op
300 bytes - compress - snappy 1.6692 us/op
300 bytes - compress - snappy-wasm 1.5961 us/op
300 bytes - compress - snappy-wasm - prealloc 496.61 ns/op
400 bytes - compress - snappyjs 2.4609 us/op
400 bytes - compress - snappy 1.5856 us/op
400 bytes - compress - snappy-wasm 1.5459 us/op
400 bytes - compress - snappy-wasm - prealloc 525.08 ns/op
500 bytes - compress - snappyjs 2.7257 us/op
500 bytes - compress - snappy 1.7191 us/op
500 bytes - compress - snappy-wasm 1.0788 us/op
500 bytes - compress - snappy-wasm - prealloc 555.39 ns/op
1000 bytes - compress - snappyjs 4.0005 us/op
1000 bytes - compress - snappy 3.9596 us/op
1000 bytes - compress - snappy-wasm 1.6844 us/op
1000 bytes - compress - snappy-wasm - prealloc 733.89 ns/op
10000 bytes - compress - snappyjs 24.279 us/op
10000 bytes - compress - snappy 40.682 us/op
10000 bytes - compress - snappy-wasm 5.5889 us/op
10000 bytes - compress - snappy-wasm - prealloc 5.1702 us/op
100000 bytes - compress - snappyjs 163.11 us/op
100000 bytes - compress - snappy 143.10 us/op
100000 bytes - compress - snappy-wasm 38.799 us/op
100000 bytes - compress - snappy-wasm - prealloc 34.044 us/op
100 bytes - uncompress - snappyjs 951.34 ns/op
100 bytes - uncompress - snappy 1.3961 us/op
100 bytes - uncompress - snappy-wasm 899.26 ns/op
100 bytes - uncompress - snappy-wasm - prealloc 259.54 ns/op
200 bytes - uncompress - snappyjs 1.5737 us/op
200 bytes - uncompress - snappy 1.4497 us/op
200 bytes - uncompress - snappy-wasm 1.1324 us/op
200 bytes - uncompress - snappy-wasm - prealloc 280.50 ns/op
300 bytes - uncompress - snappyjs 1.5230 us/op
300 bytes - uncompress - snappy 1.4521 us/op
300 bytes - uncompress - snappy-wasm 1.1229 us/op
300 bytes - uncompress - snappy-wasm - prealloc 340.31 ns/op
400 bytes - uncompress - snappyjs 1.6378 us/op
400 bytes - uncompress - snappy 1.5532 us/op
400 bytes - uncompress - snappy-wasm 1.7132 us/op
400 bytes - uncompress - snappy-wasm - prealloc 438.82 ns/op
500 bytes - uncompress - snappyjs 1.7596 us/op
500 bytes - uncompress - snappy 1.4613 us/op
500 bytes - uncompress - snappy-wasm 789.19 ns/op
500 bytes - uncompress - snappy-wasm - prealloc 410.18 ns/op
1000 bytes - uncompress - snappyjs 1.7395 us/op
1000 bytes - uncompress - snappy 4.3120 us/op
1000 bytes - uncompress - snappy-wasm 1.6817 us/op
1000 bytes - uncompress - snappy-wasm - prealloc 763.59 ns/op
10000 bytes - uncompress - snappyjs 12.915 us/op
10000 bytes - uncompress - snappy 39.548 us/op
10000 bytes - uncompress - snappy-wasm 4.7816 us/op
10000 bytes - uncompress - snappy-wasm - prealloc 3.5972 us/op
100000 bytes - uncompress - snappyjs 111.75 us/op
100000 bytes - uncompress - snappy 128.04 us/op
100000 bytes - uncompress - snappy-wasm 39.221 us/op
100000 bytes - uncompress - snappy-wasm - prealloc 34.249 us/op
send data - 1000 256B messages 12.720 ms/op 9.8458 ms/op 1.29
send data - 1000 512B messages 16.905 ms/op 12.989 ms/op 1.30
send data - 1000 1024B messages 25.270 ms/op 20.720 ms/op 1.22
send data - 1000 1200B messages 25.313 ms/op 24.054 ms/op 1.05
send data - 1000 2048B messages 30.447 ms/op 28.528 ms/op 1.07
send data - 1000 4096B messages 29.749 ms/op 25.835 ms/op 1.15
send data - 1000 16384B messages 69.683 ms/op 66.472 ms/op 1.05
send data - 1000 65536B messages 291.56 ms/op 271.96 ms/op 1.07
enrSubnets - fastDeserialize 64 bits 1.2370 us/op 1.1180 us/op 1.11
enrSubnets - ssz BitVector 64 bits 607.00 ns/op 515.00 ns/op 1.18
enrSubnets - fastDeserialize 4 bits 393.00 ns/op 333.00 ns/op 1.18
enrSubnets - ssz BitVector 4 bits 636.00 ns/op 517.00 ns/op 1.23
prioritizePeers score -10:0 att 32-0.1 sync 2-0 161.34 us/op 122.06 us/op 1.32
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 139.28 us/op 151.06 us/op 0.92
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 311.19 us/op 250.79 us/op 1.24
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 474.53 us/op 380.67 us/op 1.25
prioritizePeers score 0:0 att 64-1 sync 4-1 753.59 us/op 607.55 us/op 1.24
array of 16000 items push then shift 1.3770 us/op 1.2035 us/op 1.14
LinkedList of 16000 items push then shift 9.3000 ns/op 7.0260 ns/op 1.32
array of 16000 items push then pop 115.19 ns/op 82.032 ns/op 1.40
LinkedList of 16000 items push then pop 6.8780 ns/op 5.9430 ns/op 1.16
array of 24000 items push then shift 1.9588 us/op 1.7337 us/op 1.13
LinkedList of 24000 items push then shift 6.6470 ns/op 6.6120 ns/op 1.01
array of 24000 items push then pop 141.13 ns/op 109.92 ns/op 1.28
LinkedList of 24000 items push then pop 6.8170 ns/op 6.3090 ns/op 1.08
intersect bitArray bitLen 8 5.4990 ns/op 5.0700 ns/op 1.08
intersect array and set length 8 40.054 ns/op 37.034 ns/op 1.08
intersect bitArray bitLen 128 26.401 ns/op 24.942 ns/op 1.06
intersect array and set length 128 575.15 ns/op 541.45 ns/op 1.06
bitArray.getTrueBitIndexes() bitLen 128 2.1360 us/op 2.0620 us/op 1.04
bitArray.getTrueBitIndexes() bitLen 248 3.7250 us/op 3.2870 us/op 1.13
bitArray.getTrueBitIndexes() bitLen 512 9.0240 us/op 7.5280 us/op 1.20
Buffer.concat 32 items 1.1360 us/op 1.0070 us/op 1.13
Uint8Array.set 32 items 1.8180 us/op 1.4570 us/op 1.25
Buffer.copy 2.0910 us/op 1.5640 us/op 1.34
Uint8Array.set - with subarray 2.8060 us/op 2.0570 us/op 1.36
Uint8Array.set - without subarray 1.7450 us/op 1.3870 us/op 1.26
getUint32 - dataview 469.00 ns/op 386.00 ns/op 1.22
getUint32 - manual 489.00 ns/op 322.00 ns/op 1.52
Set add up to 64 items then delete first 1.8962 us/op 1.7813 us/op 1.06
OrderedSet add up to 64 items then delete first 3.2043 us/op 2.9803 us/op 1.08
Set add up to 64 items then delete last 2.6043 us/op 2.3386 us/op 1.11
OrderedSet add up to 64 items then delete last 3.7085 us/op 3.2975 us/op 1.12
Set add up to 64 items then delete middle 2.9401 us/op 2.3447 us/op 1.25
OrderedSet add up to 64 items then delete middle 6.3600 us/op 4.5415 us/op 1.40
Set add up to 128 items then delete first 5.6994 us/op 5.8009 us/op 0.98
OrderedSet add up to 128 items then delete first 9.4496 us/op 8.0205 us/op 1.18
Set add up to 128 items then delete last 4.6568 us/op 6.2700 us/op 0.74
OrderedSet add up to 128 items then delete last 8.6971 us/op 8.4792 us/op 1.03
Set add up to 128 items then delete middle 5.0163 us/op 6.3410 us/op 0.79
OrderedSet add up to 128 items then delete middle 11.862 us/op 14.212 us/op 0.83
Set add up to 256 items then delete first 7.9318 us/op 10.605 us/op 0.75
OrderedSet add up to 256 items then delete first 12.120 us/op 15.561 us/op 0.78
Set add up to 256 items then delete last 7.9958 us/op 10.259 us/op 0.78
OrderedSet add up to 256 items then delete last 12.605 us/op 15.327 us/op 0.82
Set add up to 256 items then delete middle 7.9810 us/op 10.248 us/op 0.78
OrderedSet add up to 256 items then delete middle 38.172 us/op 37.867 us/op 1.01
transfer serialized Status (84 B) 1.5250 us/op 1.5030 us/op 1.01
copy serialized Status (84 B) 1.2450 us/op 1.2740 us/op 0.98
transfer serialized SignedVoluntaryExit (112 B) 1.4120 us/op 1.4870 us/op 0.95
copy serialized SignedVoluntaryExit (112 B) 1.2620 us/op 1.3240 us/op 0.95
transfer serialized ProposerSlashing (416 B) 1.5680 us/op 2.3680 us/op 0.66
copy serialized ProposerSlashing (416 B) 1.4260 us/op 1.7380 us/op 0.82
transfer serialized Attestation (485 B) 2.1190 us/op 2.0470 us/op 1.04
copy serialized Attestation (485 B) 2.2030 us/op 1.7920 us/op 1.23
transfer serialized AttesterSlashing (33232 B) 2.7990 us/op 1.9760 us/op 1.42
copy serialized AttesterSlashing (33232 B) 10.422 us/op 3.9500 us/op 2.64
transfer serialized Small SignedBeaconBlock (128000 B) 2.9450 us/op 2.4580 us/op 1.20
copy serialized Small SignedBeaconBlock (128000 B) 26.858 us/op 14.174 us/op 1.89
transfer serialized Avg SignedBeaconBlock (200000 B) 3.5990 us/op 2.6070 us/op 1.38
copy serialized Avg SignedBeaconBlock (200000 B) 27.209 us/op 12.018 us/op 2.26
transfer serialized BlobsSidecar (524380 B) 3.7200 us/op 2.2710 us/op 1.64
copy serialized BlobsSidecar (524380 B) 80.574 us/op 70.644 us/op 1.14
transfer serialized Big SignedBeaconBlock (1000000 B) 4.0750 us/op 3.1330 us/op 1.30
copy serialized Big SignedBeaconBlock (1000000 B) 166.87 us/op 139.83 us/op 1.19
pass gossip attestations to forkchoice per slot 3.4356 ms/op 2.9294 ms/op 1.17
forkChoice updateHead vc 100000 bc 64 eq 0 398.00 us/op 554.14 us/op 0.72
forkChoice updateHead vc 600000 bc 64 eq 0 2.6393 ms/op 2.6289 ms/op 1.00
forkChoice updateHead vc 1000000 bc 64 eq 0 4.4704 ms/op 4.2337 ms/op 1.06
forkChoice updateHead vc 600000 bc 320 eq 0 2.4951 ms/op 2.4467 ms/op 1.02
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6543 ms/op 2.5626 ms/op 1.04
forkChoice updateHead vc 600000 bc 7200 eq 0 3.4420 ms/op 3.2393 ms/op 1.06
forkChoice updateHead vc 600000 bc 64 eq 1000 9.7260 ms/op 9.6192 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 10000 9.6429 ms/op 9.4913 ms/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 300000 12.714 ms/op 11.935 ms/op 1.07
computeDeltas 500000 validators 300 proto nodes 3.0825 ms/op 2.9821 ms/op 1.03
computeDeltas 500000 validators 1200 proto nodes 3.0736 ms/op 2.9559 ms/op 1.04
computeDeltas 500000 validators 7200 proto nodes 3.2351 ms/op 3.0263 ms/op 1.07
computeDeltas 750000 validators 300 proto nodes 5.1469 ms/op 4.4818 ms/op 1.15
computeDeltas 750000 validators 1200 proto nodes 4.8457 ms/op 4.3895 ms/op 1.10
computeDeltas 750000 validators 7200 proto nodes 4.9275 ms/op 4.3719 ms/op 1.13
computeDeltas 1400000 validators 300 proto nodes 9.2944 ms/op 8.2106 ms/op 1.13
computeDeltas 1400000 validators 1200 proto nodes 9.2874 ms/op 8.3239 ms/op 1.12
computeDeltas 1400000 validators 7200 proto nodes 8.9268 ms/op 8.2621 ms/op 1.08
computeDeltas 2100000 validators 300 proto nodes 13.287 ms/op 12.690 ms/op 1.05
computeDeltas 2100000 validators 1200 proto nodes 13.539 ms/op 12.616 ms/op 1.07
computeDeltas 2100000 validators 7200 proto nodes 12.737 ms/op 12.678 ms/op 1.00
altair processAttestation - 250000 vs - 7PWei normalcase 1.5295 ms/op 1.2919 ms/op 1.18
altair processAttestation - 250000 vs - 7PWei worstcase 2.6243 ms/op 1.9826 ms/op 1.32
altair processAttestation - setStatus - 1/6 committees join 74.780 us/op 62.068 us/op 1.20
altair processAttestation - setStatus - 1/3 committees join 142.00 us/op 129.00 us/op 1.10
altair processAttestation - setStatus - 1/2 committees join 221.03 us/op 204.10 us/op 1.08
altair processAttestation - setStatus - 2/3 committees join 284.58 us/op 271.07 us/op 1.05
altair processAttestation - setStatus - 4/5 committees join 391.41 us/op 388.61 us/op 1.01
altair processAttestation - setStatus - 100% committees join 487.39 us/op 469.17 us/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 4.5203 ms/op 2.9289 ms/op 1.54
altair processBlock - 250000 vs - 7PWei normalcase hashState 20.594 ms/op 29.416 ms/op 0.70
altair processBlock - 250000 vs - 7PWei worstcase 36.504 ms/op 35.138 ms/op 1.04
altair processBlock - 250000 vs - 7PWei worstcase hashState 61.110 ms/op 76.805 ms/op 0.80
phase0 processBlock - 250000 vs - 7PWei normalcase 2.0432 ms/op 2.1105 ms/op 0.97
phase0 processBlock - 250000 vs - 7PWei worstcase 27.026 ms/op 22.558 ms/op 1.20
altair processEth1Data - 250000 vs - 7PWei normalcase 262.12 us/op 231.54 us/op 1.13
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 5.8580 us/op 4.8210 us/op 1.22
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 23.646 us/op 16.765 us/op 1.41
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 7.0560 us/op 6.7200 us/op 1.05
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 6.1700 us/op 4.6390 us/op 1.33
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 73.671 us/op 78.641 us/op 0.94
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 472.10 us/op 758.47 us/op 0.62
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 729.47 us/op 1.0432 ms/op 0.70
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 625.67 us/op 1.1418 ms/op 0.55
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 1.9919 ms/op 1.9578 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.1944 ms/op 1.1071 ms/op 1.08
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 2.9830 ms/op 2.7912 ms/op 1.07
Tree 40 250000 create 204.71 ms/op 184.85 ms/op 1.11
Tree 40 250000 get(125000) 110.47 ns/op 114.73 ns/op 0.96
Tree 40 250000 set(125000) 524.02 ns/op 531.36 ns/op 0.99
Tree 40 250000 toArray() 9.7409 ms/op 9.3430 ms/op 1.04
Tree 40 250000 iterate all - toArray() + loop 9.4387 ms/op 9.4856 ms/op 1.00
Tree 40 250000 iterate all - get(i) 40.507 ms/op 37.798 ms/op 1.07
MutableVector 250000 create 7.4091 ms/op 9.0200 ms/op 0.82
MutableVector 250000 get(125000) 5.8630 ns/op 5.6460 ns/op 1.04
MutableVector 250000 set(125000) 157.98 ns/op 148.14 ns/op 1.07
MutableVector 250000 toArray() 3.1608 ms/op 2.5497 ms/op 1.24
MutableVector 250000 iterate all - toArray() + loop 3.1454 ms/op 2.6642 ms/op 1.18
MutableVector 250000 iterate all - get(i) 1.4579 ms/op 1.3372 ms/op 1.09
Array 250000 create 2.5503 ms/op 2.3677 ms/op 1.08
Array 250000 clone - spread 1.1814 ms/op 1.1397 ms/op 1.04
Array 250000 get(125000) 0.56500 ns/op 0.55300 ns/op 1.02
Array 250000 set(125000) 0.57800 ns/op 0.56900 ns/op 1.02
Array 250000 iterate all - loop 75.587 us/op 73.010 us/op 1.04
effectiveBalanceIncrements clone Uint8Array 300000 14.226 us/op 16.710 us/op 0.85
effectiveBalanceIncrements clone MutableVector 300000 311.00 ns/op 295.00 ns/op 1.05
effectiveBalanceIncrements rw all Uint8Array 300000 168.00 us/op 158.45 us/op 1.06
effectiveBalanceIncrements rw all MutableVector 300000 54.583 ms/op 49.038 ms/op 1.11
phase0 afterProcessEpoch - 250000 vs - 7PWei 73.317 ms/op 71.129 ms/op 1.03
Array.fill - length 1000000 2.3676 ms/op 2.3577 ms/op 1.00
Array push - length 1000000 15.978 ms/op 14.105 ms/op 1.13
Array.get 0.25521 ns/op 0.24727 ns/op 1.03
Uint8Array.get 0.33273 ns/op 0.32582 ns/op 1.02
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.638 ms/op 15.301 ms/op 1.09
altair processEpoch - mainnet_e81889 320.49 ms/op 302.24 ms/op 1.06
mainnet_e81889 - altair beforeProcessEpoch 16.065 ms/op 18.306 ms/op 0.88
mainnet_e81889 - altair processJustificationAndFinalization 13.365 us/op 5.5880 us/op 2.39
mainnet_e81889 - altair processInactivityUpdates 4.0568 ms/op 4.3021 ms/op 0.94
mainnet_e81889 - altair processRewardsAndPenalties 51.916 ms/op 52.339 ms/op 0.99
mainnet_e81889 - altair processRegistryUpdates 1.9760 us/op 1.8410 us/op 1.07
mainnet_e81889 - altair processSlashings 729.00 ns/op 754.00 ns/op 0.97
mainnet_e81889 - altair processEth1DataReset 689.00 ns/op 710.00 ns/op 0.97
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.3341 ms/op 899.82 us/op 1.48
mainnet_e81889 - altair processSlashingsReset 2.1700 us/op 1.3300 us/op 1.63
mainnet_e81889 - altair processRandaoMixesReset 2.5530 us/op 2.6440 us/op 0.97
mainnet_e81889 - altair processHistoricalRootsUpdate 683.00 ns/op 715.00 ns/op 0.96
mainnet_e81889 - altair processParticipationFlagUpdates 1.6080 us/op 1.3190 us/op 1.22
mainnet_e81889 - altair processSyncCommitteeUpdates 431.00 ns/op 655.00 ns/op 0.66
mainnet_e81889 - altair afterProcessEpoch 77.487 ms/op 75.148 ms/op 1.03
capella processEpoch - mainnet_e217614 1.2333 s/op 1.2922 s/op 0.95
mainnet_e217614 - capella beforeProcessEpoch 63.193 ms/op 63.279 ms/op 1.00
mainnet_e217614 - capella processJustificationAndFinalization 15.368 us/op 12.765 us/op 1.20
mainnet_e217614 - capella processInactivityUpdates 15.017 ms/op 15.391 ms/op 0.98
mainnet_e217614 - capella processRewardsAndPenalties 267.90 ms/op 254.34 ms/op 1.05
mainnet_e217614 - capella processRegistryUpdates 12.484 us/op 10.678 us/op 1.17
mainnet_e217614 - capella processSlashings 761.00 ns/op 783.00 ns/op 0.97
mainnet_e217614 - capella processEth1DataReset 660.00 ns/op 690.00 ns/op 0.96
mainnet_e217614 - capella processEffectiveBalanceUpdates 3.8505 ms/op 5.0039 ms/op 0.77
mainnet_e217614 - capella processSlashingsReset 2.9190 us/op 1.7580 us/op 1.66
mainnet_e217614 - capella processRandaoMixesReset 3.0840 us/op 3.2580 us/op 0.95
mainnet_e217614 - capella processHistoricalRootsUpdate 691.00 ns/op 659.00 ns/op 1.05
mainnet_e217614 - capella processParticipationFlagUpdates 1.4280 us/op 1.9110 us/op 0.75
mainnet_e217614 - capella afterProcessEpoch 235.20 ms/op 237.40 ms/op 0.99
phase0 processEpoch - mainnet_e58758 334.51 ms/op 398.30 ms/op 0.84
mainnet_e58758 - phase0 beforeProcessEpoch 62.599 ms/op 69.967 ms/op 0.89
mainnet_e58758 - phase0 processJustificationAndFinalization 10.921 us/op 13.729 us/op 0.80
mainnet_e58758 - phase0 processRewardsAndPenalties 34.645 ms/op 37.304 ms/op 0.93
mainnet_e58758 - phase0 processRegistryUpdates 6.4450 us/op 6.1100 us/op 1.05
mainnet_e58758 - phase0 processSlashings 703.00 ns/op 777.00 ns/op 0.90
mainnet_e58758 - phase0 processEth1DataReset 733.00 ns/op 738.00 ns/op 0.99
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1024 ms/op 1.1102 ms/op 0.99
mainnet_e58758 - phase0 processSlashingsReset 2.3610 us/op 2.5800 us/op 0.92
mainnet_e58758 - phase0 processRandaoMixesReset 2.8510 us/op 3.2110 us/op 0.89
mainnet_e58758 - phase0 processHistoricalRootsUpdate 678.00 ns/op 656.00 ns/op 1.03
mainnet_e58758 - phase0 processParticipationRecordUpdates 2.6810 us/op 2.6340 us/op 1.02
mainnet_e58758 - phase0 afterProcessEpoch 65.766 ms/op 67.247 ms/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.3433 ms/op 817.91 us/op 1.64
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.1144 ms/op 1.5243 ms/op 0.73
altair processInactivityUpdates - 250000 normalcase 16.920 ms/op 16.775 ms/op 1.01
altair processInactivityUpdates - 250000 worstcase 16.875 ms/op 15.769 ms/op 1.07
phase0 processRegistryUpdates - 250000 normalcase 4.8750 us/op 2.8360 us/op 1.72
phase0 processRegistryUpdates - 250000 badcase_full_deposits 292.45 us/op 287.70 us/op 1.02
phase0 processRegistryUpdates - 250000 worstcase 0.5 108.66 ms/op 99.373 ms/op 1.09
altair processRewardsAndPenalties - 250000 normalcase 44.931 ms/op 44.097 ms/op 1.02
altair processRewardsAndPenalties - 250000 worstcase 38.140 ms/op 39.546 ms/op 0.96
phase0 getAttestationDeltas - 250000 normalcase 5.7886 ms/op 6.5755 ms/op 0.88
phase0 getAttestationDeltas - 250000 worstcase 5.7759 ms/op 6.6090 ms/op 0.87
phase0 processSlashings - 250000 worstcase 85.330 us/op 82.132 us/op 1.04
altair processSyncCommitteeUpdates - 250000 105.37 ms/op 99.109 ms/op 1.06
BeaconState.hashTreeRoot - No change 477.00 ns/op 469.00 ns/op 1.02
BeaconState.hashTreeRoot - 1 full validator 141.06 us/op 145.67 us/op 0.97
BeaconState.hashTreeRoot - 32 full validator 1.4947 ms/op 1.5262 ms/op 0.98
BeaconState.hashTreeRoot - 512 full validator 11.571 ms/op 9.7780 ms/op 1.18
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 150.44 us/op 145.47 us/op 1.03
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.9099 ms/op 2.0139 ms/op 0.95
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 26.138 ms/op 24.587 ms/op 1.06
BeaconState.hashTreeRoot - 1 balances 102.72 us/op 113.67 us/op 0.90
BeaconState.hashTreeRoot - 32 balances 941.07 us/op 1.1345 ms/op 0.83
BeaconState.hashTreeRoot - 512 balances 7.6012 ms/op 9.7363 ms/op 0.78
BeaconState.hashTreeRoot - 250000 balances 185.87 ms/op 165.12 ms/op 1.13
aggregationBits - 2048 els - zipIndexesInBitList 19.995 us/op 18.978 us/op 1.05
byteArrayEquals 32 40.517 ns/op 47.736 ns/op 0.85
Buffer.compare 32 14.385 ns/op 15.491 ns/op 0.93
byteArrayEquals 1024 1.1836 us/op 1.2641 us/op 0.94
Buffer.compare 1024 22.392 ns/op 24.159 ns/op 0.93
byteArrayEquals 16384 18.819 us/op 20.140 us/op 0.93
Buffer.compare 16384 165.29 ns/op 179.33 ns/op 0.92
byteArrayEquals 123687377 145.48 ms/op 151.43 ms/op 0.96
Buffer.compare 123687377 3.6755 ms/op 3.7130 ms/op 0.99
byteArrayEquals 32 - diff last byte 46.149 ns/op 47.129 ns/op 0.98
Buffer.compare 32 - diff last byte 14.785 ns/op 16.152 ns/op 0.92
byteArrayEquals 1024 - diff last byte 1.1914 us/op 1.2556 us/op 0.95
Buffer.compare 1024 - diff last byte 22.595 ns/op 23.500 ns/op 0.96
byteArrayEquals 16384 - diff last byte 18.712 us/op 19.974 us/op 0.94
Buffer.compare 16384 - diff last byte 183.53 ns/op 182.06 ns/op 1.01
byteArrayEquals 123687377 - diff last byte 145.02 ms/op 142.41 ms/op 1.02
Buffer.compare 123687377 - diff last byte 5.3200 ms/op 5.3192 ms/op 1.00
byteArrayEquals 32 - random bytes 4.9700 ns/op 4.5250 ns/op 1.10
Buffer.compare 32 - random bytes 15.760 ns/op 14.421 ns/op 1.09
byteArrayEquals 1024 - random bytes 4.9020 ns/op 4.5430 ns/op 1.08
Buffer.compare 1024 - random bytes 16.336 ns/op 14.435 ns/op 1.13
byteArrayEquals 16384 - random bytes 4.8840 ns/op 4.5100 ns/op 1.08
Buffer.compare 16384 - random bytes 15.672 ns/op 14.292 ns/op 1.10
byteArrayEquals 123687377 - random bytes 7.9100 ns/op 7.0800 ns/op 1.12
Buffer.compare 123687377 - random bytes 18.780 ns/op 16.730 ns/op 1.12
regular array get 100000 times 31.119 us/op 28.496 us/op 1.09
wrappedArray get 100000 times 31.089 us/op 28.183 us/op 1.10
arrayWithProxy get 100000 times 10.553 ms/op 10.984 ms/op 0.96
ssz.Root.equals 43.717 ns/op 45.289 ns/op 0.97
byteArrayEquals 39.235 ns/op 39.245 ns/op 1.00
Buffer.compare 9.0840 ns/op 9.3340 ns/op 0.97
shuffle list - 16384 els 5.2184 ms/op 5.4097 ms/op 0.96
shuffle list - 250000 els 76.575 ms/op 79.808 ms/op 0.96
processSlot - 1 slots 11.208 us/op 11.912 us/op 0.94
processSlot - 32 slots 2.6412 ms/op 2.6266 ms/op 1.01
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 38.245 ms/op 41.565 ms/op 0.92
getCommitteeAssignments - req 1 vs - 250000 vc 1.6966 ms/op 1.7976 ms/op 0.94
getCommitteeAssignments - req 100 vs - 250000 vc 3.3398 ms/op 3.5268 ms/op 0.95
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6612 ms/op 3.7745 ms/op 0.97
findModifiedValidators - 10000 modified validators 229.21 ms/op 227.24 ms/op 1.01
findModifiedValidators - 1000 modified validators 140.35 ms/op 136.51 ms/op 1.03
findModifiedValidators - 100 modified validators 159.02 ms/op 135.48 ms/op 1.17
findModifiedValidators - 10 modified validators 152.88 ms/op 131.99 ms/op 1.16
findModifiedValidators - 1 modified validators 134.10 ms/op 139.01 ms/op 0.96
findModifiedValidators - no difference 159.76 ms/op 133.90 ms/op 1.19
compare ViewDUs 3.2720 s/op 3.0538 s/op 1.07
compare each validator Uint8Array 1.5563 s/op 1.5507 s/op 1.00
compare ViewDU to Uint8Array 845.70 ms/op 702.43 ms/op 1.20
migrate state 1000000 validators, 24 modified, 0 new 615.95 ms/op 539.88 ms/op 1.14
migrate state 1000000 validators, 1700 modified, 1000 new 769.23 ms/op 805.62 ms/op 0.95
migrate state 1000000 validators, 3400 modified, 2000 new 985.47 ms/op 1.0494 s/op 0.94
migrate state 1500000 validators, 24 modified, 0 new 512.82 ms/op 544.69 ms/op 0.94
migrate state 1500000 validators, 1700 modified, 1000 new 670.25 ms/op 732.89 ms/op 0.91
migrate state 1500000 validators, 3400 modified, 2000 new 837.89 ms/op 1.0839 s/op 0.77
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.9300 ns/op 5.8700 ns/op 1.01
state getBlockRootAtSlot - 250000 vs - 7PWei 527.30 ns/op 737.36 ns/op 0.72
computeProposers - vc 250000 5.9164 ms/op 6.9821 ms/op 0.85
computeEpochShuffling - vc 250000 82.049 ms/op 79.160 ms/op 1.04
getNextSyncCommittee - vc 250000 94.708 ms/op 89.062 ms/op 1.06
computeSigningRoot for AttestationData 21.024 us/op 25.314 us/op 0.83
hash AttestationData serialized data then Buffer.toString(base64) 1.1926 us/op 1.1348 us/op 1.05
toHexString serialized data 789.64 ns/op 775.47 ns/op 1.02
Buffer.toString(base64) 142.69 ns/op 132.44 ns/op 1.08

by benchmarkbot/action

Copy link

codecov bot commented Feb 27, 2024

Codecov Report

Attention: Patch coverage is 25.00000% with 9 lines in your changes missing coverage. Please review.

Project coverage is 49.23%. Comparing base (5b0608a) to head (33ca8e7).
Report is 8 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #6483      +/-   ##
============================================
+ Coverage     49.10%   49.23%   +0.12%     
============================================
  Files           577      578       +1     
  Lines         37327    37434     +107     
  Branches       2136     2171      +35     
============================================
+ Hits          18331    18429      +98     
- Misses        18957    18965       +8     
- Partials         39       40       +1     

Copy link
Member

@matthewkeil matthewkeil left a comment

Choose a reason for hiding this comment

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

The code LGTM! 🚀

Just the tiny question on the perf output but not something I feel strongly about. Truth be told we wont be looking at them much once this is merged. Neurosis is strong with this one... 😆 ... sigh....

Grafana is not wanting to load. Will click the approve once I can post some metrics here

@matthewkeil
Copy link
Member

Metrics for "till recieved" beacon block which should correlate to reduction in snappy decompression. Seeing slightly better speed on mainnet but similar results on the large validating nodes

lg1k servers

stable

Screenshot 2024-03-04 at 12 02 49 PM

unstable

Screenshot 2024-03-04 at 12 03 14 PM

feat3

Screenshot 2024-03-04 at 12 03 55 PM

mainnet servers

stable

Server unstable. Invalid metrics

unstable

Screenshot 2024-03-04 at 12 06 59 PM

feat3

Screenshot 2024-03-04 at 12 06 38 PM

import {itBench} from "@dapplion/benchmark";

describe("network / gossip / snappy", () => {
const msgLens = [100, 200, 300, 400, 500, 1000, 10000, 100000];
Copy link
Contributor

Choose a reason for hiding this comment

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

I used to see blocks with 2MB, need to add 2MB, 5MB and 10MB (max size of gossip message) message length

@twoeths
Copy link
Contributor

twoeths commented Mar 4, 2024

the optimization is in us per message so it's not easy to find an improvement on "received block time" metric. As long as we don't see memory issues I think it's good to go

@matthewkeil
Copy link
Member

looks like the metrics may not be panning out for this branch. It doesnt seem like there is a notable performance gain and the memory consumption is way up. Also seems a bit less stable with RSS bouncing around a lot on longer timeframes.

unstable-mainnet (4 days)

Screenshot 2024-03-05 at 4 26 02 PM

feat3-mainnet (4 days)

Screenshot 2024-03-05 at 4 26 08 PM

unstable-lg1k (24hr)

Screenshot 2024-03-05 at 4 27 39 PM

feat3-lg1k (24hr)

Screenshot 2024-03-05 at 4 27 47 PM

@philknows
Copy link
Member

Just noting based on standup today that we will need to deploy via Docker for testing this one.

@wemeetagain
Copy link
Member Author

wemeetagain commented Jul 24, 2024

A new contender has emerged (two years ago) snappy-wasm

Refreshed this branch and the benchmark results, check the description

Also redeployed to feat3

@wemeetagain
Copy link
Member Author

Uploading a few juicy looking data points

Screenshot from 2024-07-31 11-12-59
Screenshot from 2024-07-31 11-14-16
Screenshot from 2024-07-31 11-14-50
Screenshot from 2024-07-31 11-16-39
Screenshot from 2024-07-31 11-19-26

@wemeetagain wemeetagain changed the title feat: use snappy for larger gossip payloads feat: use snappy-wasm Aug 4, 2024
@philknows philknows added this to the v1.22.0 milestone Sep 3, 2024
@philknows philknows modified the milestones: v1.22.0, v1.23.0 Sep 11, 2024
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.

Consider using snappy along with snappyjs
4 participants