-
-
Notifications
You must be signed in to change notification settings - Fork 424
feat: use snappy-wasm (#6483) #8647
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
Conversation
**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**
- [x] 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
---------
Co-authored-by: Nico Flaig <[email protected]>
|
| Benchmark suite | Current: cc4c3b1 | Previous: 868300d | Ratio |
|---|---|---|---|
| 200 bytes - uncompress - snappy | 19.402 us/op | 1.8058 us/op | 10.74 |
Full benchmark results
| Benchmark suite | Current: cc4c3b1 | Previous: 868300d | Ratio |
|---|---|---|---|
| getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 847.67 us/op | 974.07 us/op | 0.87 |
| getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 34.475 us/op | 40.804 us/op | 0.84 |
| BLS verify - blst | 837.25 us/op | 896.79 us/op | 0.93 |
| BLS verifyMultipleSignatures 3 - blst | 1.7265 ms/op | 1.2306 ms/op | 1.40 |
| BLS verifyMultipleSignatures 8 - blst | 2.0606 ms/op | 2.0514 ms/op | 1.00 |
| BLS verifyMultipleSignatures 32 - blst | 4.3712 ms/op | 4.9825 ms/op | 0.88 |
| BLS verifyMultipleSignatures 64 - blst | 8.2302 ms/op | 10.410 ms/op | 0.79 |
| BLS verifyMultipleSignatures 128 - blst | 15.905 ms/op | 18.627 ms/op | 0.85 |
| BLS deserializing 10000 signatures | 626.87 ms/op | 719.78 ms/op | 0.87 |
| BLS deserializing 100000 signatures | 6.3081 s/op | 7.5437 s/op | 0.84 |
| BLS verifyMultipleSignatures - same message - 3 - blst | 1.1025 ms/op | 990.26 us/op | 1.11 |
| BLS verifyMultipleSignatures - same message - 8 - blst | 1.0377 ms/op | 1.1810 ms/op | 0.88 |
| BLS verifyMultipleSignatures - same message - 32 - blst | 1.6933 ms/op | 1.9749 ms/op | 0.86 |
| BLS verifyMultipleSignatures - same message - 64 - blst | 2.3579 ms/op | 3.1756 ms/op | 0.74 |
| BLS verifyMultipleSignatures - same message - 128 - blst | 3.9529 ms/op | 4.8839 ms/op | 0.81 |
| BLS aggregatePubkeys 32 - blst | 17.715 us/op | 20.832 us/op | 0.85 |
| BLS aggregatePubkeys 128 - blst | 62.267 us/op | 75.934 us/op | 0.82 |
| notSeenSlots=1 numMissedVotes=1 numBadVotes=10 | 39.487 ms/op | 52.024 ms/op | 0.76 |
| notSeenSlots=1 numMissedVotes=0 numBadVotes=4 | 36.583 ms/op | 41.879 ms/op | 0.87 |
| notSeenSlots=2 numMissedVotes=1 numBadVotes=10 | 27.915 ms/op | 33.907 ms/op | 0.82 |
| getSlashingsAndExits - default max | 56.011 us/op | 73.744 us/op | 0.76 |
| getSlashingsAndExits - 2k | 361.06 us/op | 387.32 us/op | 0.93 |
| isKnown best case - 1 super set check | 406.00 ns/op | 208.00 ns/op | 1.95 |
| isKnown normal case - 2 super set checks | 392.00 ns/op | 199.00 ns/op | 1.97 |
| isKnown worse case - 16 super set checks | 409.00 ns/op | 205.00 ns/op | 2.00 |
| InMemoryCheckpointStateCache - add get delete | 2.4810 us/op | 2.5290 us/op | 0.98 |
| validate api signedAggregateAndProof - struct | 2.0343 ms/op | 1.8961 ms/op | 1.07 |
| validate gossip signedAggregateAndProof - struct | 2.0167 ms/op | 1.8538 ms/op | 1.09 |
| batch validate gossip attestation - vc 640000 - chunk 32 | 106.02 us/op | 176.84 us/op | 0.60 |
| batch validate gossip attestation - vc 640000 - chunk 64 | 91.233 us/op | 141.96 us/op | 0.64 |
| batch validate gossip attestation - vc 640000 - chunk 128 | 86.778 us/op | 114.10 us/op | 0.76 |
| batch validate gossip attestation - vc 640000 - chunk 256 | 85.130 us/op | 112.19 us/op | 0.76 |
| pickEth1Vote - no votes | 764.94 us/op | 1.0903 ms/op | 0.70 |
| pickEth1Vote - max votes | 6.6384 ms/op | 7.5165 ms/op | 0.88 |
| pickEth1Vote - Eth1Data hashTreeRoot value x2048 | 9.2496 ms/op | 14.901 ms/op | 0.62 |
| pickEth1Vote - Eth1Data hashTreeRoot tree x2048 | 13.492 ms/op | 20.856 ms/op | 0.65 |
| pickEth1Vote - Eth1Data fastSerialize value x2048 | 333.86 us/op | 443.40 us/op | 0.75 |
| pickEth1Vote - Eth1Data fastSerialize tree x2048 | 2.8892 ms/op | 4.1569 ms/op | 0.70 |
| bytes32 toHexString | 515.00 ns/op | 392.00 ns/op | 1.31 |
| bytes32 Buffer.toString(hex) | 414.00 ns/op | 301.00 ns/op | 1.38 |
| bytes32 Buffer.toString(hex) from Uint8Array | 501.00 ns/op | 423.00 ns/op | 1.18 |
| bytes32 Buffer.toString(hex) + 0x | 413.00 ns/op | 245.00 ns/op | 1.69 |
| Object access 1 prop | 0.29900 ns/op | 0.12400 ns/op | 2.41 |
| Map access 1 prop | 0.34900 ns/op | 0.12600 ns/op | 2.77 |
| Object get x1000 | 4.9690 ns/op | 5.7450 ns/op | 0.86 |
| Map get x1000 | 0.53900 ns/op | 0.38200 ns/op | 1.41 |
| Object set x1000 | 20.673 ns/op | 31.164 ns/op | 0.66 |
| Map set x1000 | 17.129 ns/op | 23.029 ns/op | 0.74 |
| Return object 10000 times | 0.23230 ns/op | 0.30380 ns/op | 0.76 |
| Throw Error 10000 times | 3.2161 us/op | 4.3522 us/op | 0.74 |
| toHex | 94.887 ns/op | 151.54 ns/op | 0.63 |
| Buffer.from | 96.051 ns/op | 134.67 ns/op | 0.71 |
| shared Buffer | 69.962 ns/op | 83.862 ns/op | 0.83 |
| fastMsgIdFn sha256 / 200 bytes | 1.7760 us/op | 2.0230 us/op | 0.88 |
| fastMsgIdFn h32 xxhash / 200 bytes | 390.00 ns/op | 199.00 ns/op | 1.96 |
| fastMsgIdFn h64 xxhash / 200 bytes | 443.00 ns/op | 268.00 ns/op | 1.65 |
| fastMsgIdFn sha256 / 1000 bytes | 5.2140 us/op | 6.4370 us/op | 0.81 |
| fastMsgIdFn h32 xxhash / 1000 bytes | 490.00 ns/op | 302.00 ns/op | 1.62 |
| fastMsgIdFn h64 xxhash / 1000 bytes | 489.00 ns/op | 328.00 ns/op | 1.49 |
| fastMsgIdFn sha256 / 10000 bytes | 42.803 us/op | 59.614 us/op | 0.72 |
| fastMsgIdFn h32 xxhash / 10000 bytes | 1.5290 us/op | 1.5070 us/op | 1.01 |
| fastMsgIdFn h64 xxhash / 10000 bytes | 1.0870 us/op | 982.00 ns/op | 1.11 |
| 100 bytes - compress - snappyjs | 1.1977 us/op | 1.5222 us/op | 0.79 |
| 100 bytes - compress - snappy | 999.05 ns/op | 1.3071 us/op | 0.76 |
| 100 bytes - compress - snappy-wasm | 530.85 ns/op | ||
| 100 bytes - compress - snappy-wasm - prealloc | 1.3033 us/op | ||
| 200 bytes - compress - snappyjs | 1.4386 us/op | 1.6695 us/op | 0.86 |
| 200 bytes - compress - snappy | 1.1221 us/op | 1.6909 us/op | 0.66 |
| 200 bytes - compress - snappy-wasm | 787.04 ns/op | ||
| 200 bytes - compress - snappy-wasm - prealloc | 937.76 ns/op | ||
| 300 bytes - compress - snappyjs | 2.0760 us/op | 2.9379 us/op | 0.71 |
| 300 bytes - compress - snappy | 1.3011 us/op | 1.9799 us/op | 0.66 |
| 300 bytes - compress - snappy-wasm | 688.19 ns/op | ||
| 300 bytes - compress - snappy-wasm - prealloc | 1.0709 us/op | ||
| 400 bytes - compress - snappyjs | 2.1172 us/op | 2.3396 us/op | 0.90 |
| 400 bytes - compress - snappy | 1.3729 us/op | 2.1813 us/op | 0.63 |
| 400 bytes - compress - snappy-wasm | 865.46 ns/op | ||
| 400 bytes - compress - snappy-wasm - prealloc | 1.1802 us/op | ||
| 500 bytes - compress - snappyjs | 3.3676 us/op | 3.0889 us/op | 1.09 |
| 500 bytes - compress - snappy | 1.2931 us/op | 2.3588 us/op | 0.55 |
| 500 bytes - compress - snappy-wasm | 922.88 ns/op | ||
| 500 bytes - compress - snappy-wasm - prealloc | 1.4742 us/op | ||
| 1000 bytes - compress - snappyjs | 4.9516 us/op | 4.5526 us/op | 1.09 |
| 1000 bytes - compress - snappy | 1.5342 us/op | 3.0277 us/op | 0.51 |
| 1000 bytes - compress - snappy-wasm | 2.0585 us/op | ||
| 1000 bytes - compress - snappy-wasm - prealloc | 1.9606 us/op | ||
| 10000 bytes - compress - snappyjs | 30.554 us/op | 29.231 us/op | 1.05 |
| 10000 bytes - compress - snappy | 44.758 us/op | 16.910 us/op | 2.65 |
| 10000 bytes - compress - snappy-wasm | 30.817 us/op | ||
| 10000 bytes - compress - snappy-wasm - prealloc | 19.969 us/op | ||
| 100 bytes - uncompress - snappyjs | 626.98 ns/op | 801.89 ns/op | 0.78 |
| 100 bytes - uncompress - snappy | 1.3811 us/op | 1.5166 us/op | 0.91 |
| 100 bytes - uncompress - snappy-wasm | 599.46 ns/op | ||
| 100 bytes - uncompress - snappy-wasm - prealloc | 677.11 ns/op | ||
| 200 bytes - uncompress - snappyjs | 823.87 ns/op | 1.3935 us/op | 0.59 |
| 200 bytes - uncompress - snappy | 19.402 us/op | 1.8058 us/op | 10.74 |
| 200 bytes - uncompress - snappy-wasm | 1.0504 us/op | ||
| 200 bytes - uncompress - snappy-wasm - prealloc | 1.3670 us/op | ||
| 300 bytes - uncompress - snappyjs | 958.75 ns/op | 1.2181 us/op | 0.79 |
| 300 bytes - uncompress - snappy | 1.1205 us/op | 1.5073 us/op | 0.74 |
| 300 bytes - uncompress - snappy-wasm | 674.75 ns/op | ||
| 300 bytes - uncompress - snappy-wasm - prealloc | 1.6138 us/op | ||
| 400 bytes - uncompress - snappyjs | 2.1215 us/op | 1.6135 us/op | 1.31 |
| 400 bytes - uncompress - snappy | 1.2220 us/op | 1.5895 us/op | 0.77 |
| 400 bytes - uncompress - snappy-wasm | 847.54 ns/op | ||
| 400 bytes - uncompress - snappy-wasm - prealloc | 1.6984 us/op | ||
| 500 bytes - uncompress - snappyjs | 1.8351 us/op | 1.8898 us/op | 0.97 |
| 500 bytes - uncompress - snappy | 1.9352 us/op | 2.1996 us/op | 0.88 |
| 500 bytes - uncompress - snappy-wasm | 1.4546 us/op | ||
| 500 bytes - uncompress - snappy-wasm - prealloc | 1.2205 us/op | ||
| 1000 bytes - uncompress - snappyjs | 1.8948 us/op | 2.4049 us/op | 0.79 |
| 1000 bytes - uncompress - snappy | 1.3643 us/op | 1.8319 us/op | 0.74 |
| 1000 bytes - uncompress - snappy-wasm | 1.2622 us/op | ||
| 1000 bytes - uncompress - snappy-wasm - prealloc | 1.1298 us/op | ||
| 10000 bytes - uncompress - snappyjs | 23.376 us/op | 24.660 us/op | 0.95 |
| 10000 bytes - uncompress - snappy | 26.497 us/op | 24.359 us/op | 1.09 |
| 10000 bytes - uncompress - snappy-wasm | 13.264 us/op | ||
| 10000 bytes - uncompress - snappy-wasm - prealloc | 17.032 us/op | ||
| send data - 1000 256B messages | 11.257 ms/op | 23.406 ms/op | 0.48 |
| send data - 1000 512B messages | 13.639 ms/op | 24.129 ms/op | 0.57 |
| send data - 1000 1024B messages | 19.089 ms/op | 29.586 ms/op | 0.65 |
| send data - 1000 1200B messages | 16.514 ms/op | 36.139 ms/op | 0.46 |
| send data - 1000 2048B messages | 22.729 ms/op | 33.882 ms/op | 0.67 |
| send data - 1000 4096B messages | 24.555 ms/op | 41.431 ms/op | 0.59 |
| send data - 1000 16384B messages | 100.59 ms/op | 161.10 ms/op | 0.62 |
| send data - 1000 65536B messages | 198.50 ms/op | 663.87 ms/op | 0.30 |
| enrSubnets - fastDeserialize 64 bits | 1.0450 us/op | 960.00 ns/op | 1.09 |
| enrSubnets - ssz BitVector 64 bits | 505.00 ns/op | 364.00 ns/op | 1.39 |
| enrSubnets - fastDeserialize 4 bits | 322.00 ns/op | 142.00 ns/op | 2.27 |
| enrSubnets - ssz BitVector 4 bits | 521.00 ns/op | 367.00 ns/op | 1.42 |
| prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 213.20 us/op | 262.09 us/op | 0.81 |
| prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 268.20 us/op | 303.57 us/op | 0.88 |
| prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 336.93 us/op | 420.48 us/op | 0.80 |
| prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 701.26 us/op | 900.93 us/op | 0.78 |
| prioritizePeers score 0:0 att 64-1 sync 4-1 | 721.55 us/op | 894.17 us/op | 0.81 |
| array of 16000 items push then shift | 1.2901 us/op | 1.7795 us/op | 0.72 |
| LinkedList of 16000 items push then shift | 7.2060 ns/op | 8.1070 ns/op | 0.89 |
| array of 16000 items push then pop | 66.025 ns/op | 84.752 ns/op | 0.78 |
| LinkedList of 16000 items push then pop | 6.3100 ns/op | 7.8070 ns/op | 0.81 |
| array of 24000 items push then shift | 1.9085 us/op | 2.5672 us/op | 0.74 |
| LinkedList of 24000 items push then shift | 6.9310 ns/op | 8.6200 ns/op | 0.80 |
| array of 24000 items push then pop | 92.365 ns/op | 115.58 ns/op | 0.80 |
| LinkedList of 24000 items push then pop | 6.2950 ns/op | 7.8020 ns/op | 0.81 |
| intersect bitArray bitLen 8 | 4.9330 ns/op | 6.1720 ns/op | 0.80 |
| intersect array and set length 8 | 30.962 ns/op | 38.820 ns/op | 0.80 |
| intersect bitArray bitLen 128 | 26.073 ns/op | 30.329 ns/op | 0.86 |
| intersect array and set length 128 | 512.56 ns/op | 618.77 ns/op | 0.83 |
| bitArray.getTrueBitIndexes() bitLen 128 | 1.1870 us/op | 1.2580 us/op | 0.94 |
| bitArray.getTrueBitIndexes() bitLen 248 | 1.9430 us/op | 2.0640 us/op | 0.94 |
| bitArray.getTrueBitIndexes() bitLen 512 | 3.7560 us/op | 4.1470 us/op | 0.91 |
| Full columns - reconstruct all 6 blobs | 351.02 us/op | 392.04 us/op | 0.90 |
| Full columns - reconstruct half of the blobs out of 6 | 148.03 us/op | 158.43 us/op | 0.93 |
| Full columns - reconstruct single blob out of 6 | 40.633 us/op | 50.643 us/op | 0.80 |
| Half columns - reconstruct all 6 blobs | 231.88 ms/op | 300.98 ms/op | 0.77 |
| Half columns - reconstruct half of the blobs out of 6 | 118.57 ms/op | 167.97 ms/op | 0.71 |
| Half columns - reconstruct single blob out of 6 | 44.030 ms/op | 55.349 ms/op | 0.80 |
| Full columns - reconstruct all 10 blobs | 300.38 us/op | 419.81 us/op | 0.72 |
| Full columns - reconstruct half of the blobs out of 10 | 152.71 us/op | 194.04 us/op | 0.79 |
| Full columns - reconstruct single blob out of 10 | 40.591 us/op | 53.704 us/op | 0.76 |
| Half columns - reconstruct all 10 blobs | 388.26 ms/op | 506.52 ms/op | 0.77 |
| Half columns - reconstruct half of the blobs out of 10 | 197.66 ms/op | 274.00 ms/op | 0.72 |
| Half columns - reconstruct single blob out of 10 | 44.301 ms/op | 54.769 ms/op | 0.81 |
| Full columns - reconstruct all 20 blobs | 1.1126 ms/op | 1.4152 ms/op | 0.79 |
| Full columns - reconstruct half of the blobs out of 20 | 358.88 us/op | 527.24 us/op | 0.68 |
| Full columns - reconstruct single blob out of 20 | 29.695 us/op | 33.405 us/op | 0.89 |
| Half columns - reconstruct all 20 blobs | 774.79 ms/op | 971.51 ms/op | 0.80 |
| Half columns - reconstruct half of the blobs out of 20 | 385.30 ms/op | 512.16 ms/op | 0.75 |
| Half columns - reconstruct single blob out of 20 | 43.886 ms/op | 61.888 ms/op | 0.71 |
| Set add up to 64 items then delete first | 1.7049 us/op | 3.2494 us/op | 0.52 |
| OrderedSet add up to 64 items then delete first | 2.6036 us/op | 4.2914 us/op | 0.61 |
| Set add up to 64 items then delete last | 1.7444 us/op | 3.0497 us/op | 0.57 |
| OrderedSet add up to 64 items then delete last | 2.5960 us/op | 4.3118 us/op | 0.60 |
| Set add up to 64 items then delete middle | 1.7359 us/op | 3.0645 us/op | 0.57 |
| OrderedSet add up to 64 items then delete middle | 3.9891 us/op | 6.1575 us/op | 0.65 |
| Set add up to 128 items then delete first | 3.4465 us/op | 6.1276 us/op | 0.56 |
| OrderedSet add up to 128 items then delete first | 5.3447 us/op | 8.0762 us/op | 0.66 |
| Set add up to 128 items then delete last | 3.3347 us/op | 5.3681 us/op | 0.62 |
| OrderedSet add up to 128 items then delete last | 5.0397 us/op | 8.5711 us/op | 0.59 |
| Set add up to 128 items then delete middle | 3.3203 us/op | 6.4321 us/op | 0.52 |
| OrderedSet add up to 128 items then delete middle | 10.851 us/op | 16.912 us/op | 0.64 |
| Set add up to 256 items then delete first | 6.8891 us/op | 12.634 us/op | 0.55 |
| OrderedSet add up to 256 items then delete first | 10.918 us/op | 16.798 us/op | 0.65 |
| Set add up to 256 items then delete last | 6.7475 us/op | 13.512 us/op | 0.50 |
| OrderedSet add up to 256 items then delete last | 10.348 us/op | 19.982 us/op | 0.52 |
| Set add up to 256 items then delete middle | 6.6979 us/op | 12.480 us/op | 0.54 |
| OrderedSet add up to 256 items then delete middle | 33.530 us/op | 50.877 us/op | 0.66 |
| pass gossip attestations to forkchoice per slot | 2.0541 ms/op | 3.0687 ms/op | 0.67 |
| forkChoice updateHead vc 100000 bc 64 eq 0 | 372.89 us/op | 565.46 us/op | 0.66 |
| forkChoice updateHead vc 600000 bc 64 eq 0 | 2.2285 ms/op | 2.9686 ms/op | 0.75 |
| forkChoice updateHead vc 1000000 bc 64 eq 0 | 3.6487 ms/op | 5.2358 ms/op | 0.70 |
| forkChoice updateHead vc 600000 bc 320 eq 0 | 2.1966 ms/op | 3.2169 ms/op | 0.68 |
| forkChoice updateHead vc 600000 bc 1200 eq 0 | 2.3818 ms/op | 3.3019 ms/op | 0.72 |
| forkChoice updateHead vc 600000 bc 7200 eq 0 | 2.9314 ms/op | 4.4906 ms/op | 0.65 |
| forkChoice updateHead vc 600000 bc 64 eq 1000 | 2.9329 ms/op | 3.7414 ms/op | 0.78 |
| forkChoice updateHead vc 600000 bc 64 eq 10000 | 2.7872 ms/op | 3.8391 ms/op | 0.73 |
| forkChoice updateHead vc 600000 bc 64 eq 300000 | 6.8822 ms/op | 10.375 ms/op | 0.66 |
| computeDeltas 1400000 validators 0% inactive | 9.7404 ms/op | 15.644 ms/op | 0.62 |
| computeDeltas 1400000 validators 10% inactive | 8.9810 ms/op | 15.077 ms/op | 0.60 |
| computeDeltas 1400000 validators 20% inactive | 8.0621 ms/op | 13.367 ms/op | 0.60 |
| computeDeltas 1400000 validators 50% inactive | 6.0078 ms/op | 10.514 ms/op | 0.57 |
| computeDeltas 2100000 validators 0% inactive | 14.559 ms/op | 23.128 ms/op | 0.63 |
| computeDeltas 2100000 validators 10% inactive | 13.479 ms/op | 22.432 ms/op | 0.60 |
| computeDeltas 2100000 validators 20% inactive | 12.100 ms/op | 19.812 ms/op | 0.61 |
| computeDeltas 2100000 validators 50% inactive | 9.0158 ms/op | 15.963 ms/op | 0.56 |
| altair processAttestation - 250000 vs - 7PWei normalcase | 1.6421 ms/op | 2.7661 ms/op | 0.59 |
| altair processAttestation - 250000 vs - 7PWei worstcase | 2.4426 ms/op | 3.7183 ms/op | 0.66 |
| altair processAttestation - setStatus - 1/6 committees join | 85.189 us/op | 128.56 us/op | 0.66 |
| altair processAttestation - setStatus - 1/3 committees join | 184.18 us/op | 251.30 us/op | 0.73 |
| altair processAttestation - setStatus - 1/2 committees join | 289.54 us/op | 349.64 us/op | 0.83 |
| altair processAttestation - setStatus - 2/3 committees join | 343.24 us/op | 449.57 us/op | 0.76 |
| altair processAttestation - setStatus - 4/5 committees join | 515.08 us/op | 619.46 us/op | 0.83 |
| altair processAttestation - setStatus - 100% committees join | 598.22 us/op | 736.90 us/op | 0.81 |
| altair processBlock - 250000 vs - 7PWei normalcase | 2.8520 ms/op | 5.1418 ms/op | 0.55 |
| altair processBlock - 250000 vs - 7PWei normalcase hashState | 14.806 ms/op | 28.248 ms/op | 0.52 |
| altair processBlock - 250000 vs - 7PWei worstcase | 23.798 ms/op | 28.960 ms/op | 0.82 |
| altair processBlock - 250000 vs - 7PWei worstcase hashState | 49.092 ms/op | 66.063 ms/op | 0.74 |
| phase0 processBlock - 250000 vs - 7PWei normalcase | 1.5328 ms/op | 1.7601 ms/op | 0.87 |
| phase0 processBlock - 250000 vs - 7PWei worstcase | 19.456 ms/op | 25.750 ms/op | 0.76 |
| altair processEth1Data - 250000 vs - 7PWei normalcase | 291.80 us/op | 414.07 us/op | 0.70 |
| getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 | 3.4720 us/op | 12.284 us/op | 0.28 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 | 34.809 us/op | 62.391 us/op | 0.56 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 | 9.6950 us/op | 20.392 us/op | 0.48 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 | 7.0330 us/op | 11.833 us/op | 0.59 |
| getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 | 92.599 us/op | 245.13 us/op | 0.38 |
| getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 | 1.4701 ms/op | 2.1417 ms/op | 0.69 |
| getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 1.8864 ms/op | 3.2349 ms/op | 0.58 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 1.9085 ms/op | 2.7196 ms/op | 0.70 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 3.9053 ms/op | 6.1572 ms/op | 0.63 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 1.9726 ms/op | 2.8645 ms/op | 0.69 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 3.9556 ms/op | 6.2035 ms/op | 0.64 |
| Tree 40 250000 create | 325.34 ms/op | 407.60 ms/op | 0.80 |
| Tree 40 250000 get(125000) | 97.768 ns/op | 131.18 ns/op | 0.75 |
| Tree 40 250000 set(125000) | 1.0681 us/op | 1.3287 us/op | 0.80 |
| Tree 40 250000 toArray() | 9.4703 ms/op | 19.267 ms/op | 0.49 |
| Tree 40 250000 iterate all - toArray() + loop | 9.5986 ms/op | 20.027 ms/op | 0.48 |
| Tree 40 250000 iterate all - get(i) | 34.667 ms/op | 49.797 ms/op | 0.70 |
| Array 250000 create | 2.0436 ms/op | 2.7338 ms/op | 0.75 |
| Array 250000 clone - spread | 631.80 us/op | 917.19 us/op | 0.69 |
| Array 250000 get(125000) | 0.50500 ns/op | 0.36500 ns/op | 1.38 |
| Array 250000 set(125000) | 0.51600 ns/op | 0.36800 ns/op | 1.40 |
| Array 250000 iterate all - loop | 55.911 us/op | 63.585 us/op | 0.88 |
| phase0 afterProcessEpoch - 250000 vs - 7PWei | 38.871 ms/op | 43.951 ms/op | 0.88 |
| Array.fill - length 1000000 | 2.0334 ms/op | 3.3421 ms/op | 0.61 |
| Array push - length 1000000 | 7.7720 ms/op | 13.843 ms/op | 0.56 |
| Array.get | 0.20265 ns/op | 0.23491 ns/op | 0.86 |
| Uint8Array.get | 0.20248 ns/op | 0.24768 ns/op | 0.82 |
| phase0 beforeProcessEpoch - 250000 vs - 7PWei | 11.115 ms/op | 21.080 ms/op | 0.53 |
| altair processEpoch - mainnet_e81889 | 209.78 ms/op | 295.45 ms/op | 0.71 |
| mainnet_e81889 - altair beforeProcessEpoch | 12.737 ms/op | 24.144 ms/op | 0.53 |
| mainnet_e81889 - altair processJustificationAndFinalization | 4.7450 us/op | 5.9870 us/op | 0.79 |
| mainnet_e81889 - altair processInactivityUpdates | 3.2682 ms/op | 4.1913 ms/op | 0.78 |
| mainnet_e81889 - altair processRewardsAndPenalties | 15.658 ms/op | 20.894 ms/op | 0.75 |
| mainnet_e81889 - altair processRegistryUpdates | 821.00 ns/op | 703.00 ns/op | 1.17 |
| mainnet_e81889 - altair processSlashings | 388.00 ns/op | 188.00 ns/op | 2.06 |
| mainnet_e81889 - altair processEth1DataReset | 379.00 ns/op | 181.00 ns/op | 2.09 |
| mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.2486 ms/op | 7.2064 ms/op | 0.17 |
| mainnet_e81889 - altair processSlashingsReset | 957.00 ns/op | 874.00 ns/op | 1.09 |
| mainnet_e81889 - altair processRandaoMixesReset | 1.1900 us/op | 1.1440 us/op | 1.04 |
| mainnet_e81889 - altair processHistoricalRootsUpdate | 369.00 ns/op | 189.00 ns/op | 1.95 |
| mainnet_e81889 - altair processParticipationFlagUpdates | 697.00 ns/op | 641.00 ns/op | 1.09 |
| mainnet_e81889 - altair processSyncCommitteeUpdates | 335.00 ns/op | 153.00 ns/op | 2.19 |
| mainnet_e81889 - altair afterProcessEpoch | 40.807 ms/op | 47.667 ms/op | 0.86 |
| capella processEpoch - mainnet_e217614 | 764.31 ms/op | 850.21 ms/op | 0.90 |
| mainnet_e217614 - capella beforeProcessEpoch | 58.673 ms/op | 95.289 ms/op | 0.62 |
| mainnet_e217614 - capella processJustificationAndFinalization | 5.1690 us/op | 5.8580 us/op | 0.88 |
| mainnet_e217614 - capella processInactivityUpdates | 10.720 ms/op | 22.729 ms/op | 0.47 |
| mainnet_e217614 - capella processRewardsAndPenalties | 98.188 ms/op | 118.55 ms/op | 0.83 |
| mainnet_e217614 - capella processRegistryUpdates | 4.9970 us/op | 8.2340 us/op | 0.61 |
| mainnet_e217614 - capella processSlashings | 381.00 ns/op | 171.00 ns/op | 2.23 |
| mainnet_e217614 - capella processEth1DataReset | 362.00 ns/op | 174.00 ns/op | 2.08 |
| mainnet_e217614 - capella processEffectiveBalanceUpdates | 6.9358 ms/op | 16.721 ms/op | 0.41 |
| mainnet_e217614 - capella processSlashingsReset | 951.00 ns/op | 843.00 ns/op | 1.13 |
| mainnet_e217614 - capella processRandaoMixesReset | 1.1830 us/op | 1.1950 us/op | 0.99 |
| mainnet_e217614 - capella processHistoricalRootsUpdate | 367.00 ns/op | 176.00 ns/op | 2.09 |
| mainnet_e217614 - capella processParticipationFlagUpdates | 692.00 ns/op | 536.00 ns/op | 1.29 |
| mainnet_e217614 - capella afterProcessEpoch | 111.55 ms/op | 119.99 ms/op | 0.93 |
| phase0 processEpoch - mainnet_e58758 | 194.89 ms/op | 254.53 ms/op | 0.77 |
| mainnet_e58758 - phase0 beforeProcessEpoch | 36.825 ms/op | 59.868 ms/op | 0.62 |
| mainnet_e58758 - phase0 processJustificationAndFinalization | 4.8160 us/op | 5.7140 us/op | 0.84 |
| mainnet_e58758 - phase0 processRewardsAndPenalties | 17.407 ms/op | 19.684 ms/op | 0.88 |
| mainnet_e58758 - phase0 processRegistryUpdates | 2.6670 us/op | 3.1610 us/op | 0.84 |
| mainnet_e58758 - phase0 processSlashings | 409.00 ns/op | 212.00 ns/op | 1.93 |
| mainnet_e58758 - phase0 processEth1DataReset | 372.00 ns/op | 167.00 ns/op | 2.23 |
| mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 968.14 us/op | 1.0085 ms/op | 0.96 |
| mainnet_e58758 - phase0 processSlashingsReset | 1.2580 us/op | 935.00 ns/op | 1.35 |
| mainnet_e58758 - phase0 processRandaoMixesReset | 1.2280 us/op | 1.0940 us/op | 1.12 |
| mainnet_e58758 - phase0 processHistoricalRootsUpdate | 372.00 ns/op | 185.00 ns/op | 2.01 |
| mainnet_e58758 - phase0 processParticipationRecordUpdates | 1.2730 us/op | 850.00 ns/op | 1.50 |
| mainnet_e58758 - phase0 afterProcessEpoch | 33.979 ms/op | 37.110 ms/op | 0.92 |
| phase0 processEffectiveBalanceUpdates - 250000 normalcase | 911.55 us/op | 1.7434 ms/op | 0.52 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.2501 ms/op | 2.1424 ms/op | 0.58 |
| altair processInactivityUpdates - 250000 normalcase | 9.9057 ms/op | 15.723 ms/op | 0.63 |
| altair processInactivityUpdates - 250000 worstcase | 10.277 ms/op | 16.077 ms/op | 0.64 |
| phase0 processRegistryUpdates - 250000 normalcase | 4.4700 us/op | 7.3490 us/op | 0.61 |
| phase0 processRegistryUpdates - 250000 badcase_full_deposits | 291.89 us/op | 323.01 us/op | 0.90 |
| phase0 processRegistryUpdates - 250000 worstcase 0.5 | 67.060 ms/op | 93.059 ms/op | 0.72 |
| altair processRewardsAndPenalties - 250000 normalcase | 12.498 ms/op | 17.419 ms/op | 0.72 |
| altair processRewardsAndPenalties - 250000 worstcase | 16.245 ms/op | 17.195 ms/op | 0.94 |
| phase0 getAttestationDeltas - 250000 normalcase | 5.4389 ms/op | 7.2499 ms/op | 0.75 |
| phase0 getAttestationDeltas - 250000 worstcase | 5.4863 ms/op | 7.2913 ms/op | 0.75 |
| phase0 processSlashings - 250000 worstcase | 91.140 us/op | 111.78 us/op | 0.82 |
| altair processSyncCommitteeUpdates - 250000 | 10.012 ms/op | 12.567 ms/op | 0.80 |
| BeaconState.hashTreeRoot - No change | 403.00 ns/op | 248.00 ns/op | 1.63 |
| BeaconState.hashTreeRoot - 1 full validator | 57.453 us/op | 95.719 us/op | 0.60 |
| BeaconState.hashTreeRoot - 32 full validator | 632.30 us/op | 1.1086 ms/op | 0.57 |
| BeaconState.hashTreeRoot - 512 full validator | 6.5016 ms/op | 9.5847 ms/op | 0.68 |
| BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 83.466 us/op | 128.42 us/op | 0.65 |
| BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.0173 ms/op | 1.8834 ms/op | 0.54 |
| BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 13.615 ms/op | 22.232 ms/op | 0.61 |
| BeaconState.hashTreeRoot - 1 balances | 56.093 us/op | 98.458 us/op | 0.57 |
| BeaconState.hashTreeRoot - 32 balances | 755.03 us/op | 947.46 us/op | 0.80 |
| BeaconState.hashTreeRoot - 512 balances | 6.1806 ms/op | 7.2094 ms/op | 0.86 |
| BeaconState.hashTreeRoot - 250000 balances | 128.24 ms/op | 154.81 ms/op | 0.83 |
| aggregationBits - 2048 els - zipIndexesInBitList | 19.335 us/op | 25.218 us/op | 0.77 |
| regular array get 100000 times | 22.397 us/op | 27.868 us/op | 0.80 |
| wrappedArray get 100000 times | 22.389 us/op | 27.895 us/op | 0.80 |
| arrayWithProxy get 100000 times | 11.561 ms/op | 16.648 ms/op | 0.69 |
| ssz.Root.equals | 21.476 ns/op | 27.734 ns/op | 0.77 |
| byteArrayEquals | 20.945 ns/op | 26.712 ns/op | 0.78 |
| Buffer.compare | 10.051 ns/op | 11.322 ns/op | 0.89 |
| processSlot - 1 slots | 11.553 us/op | 13.215 us/op | 0.87 |
| processSlot - 32 slots | 2.2809 ms/op | 2.8100 ms/op | 0.81 |
| getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 2.5654 ms/op | 4.3326 ms/op | 0.59 |
| getCommitteeAssignments - req 1 vs - 250000 vc | 1.5762 ms/op | 1.9251 ms/op | 0.82 |
| getCommitteeAssignments - req 100 vs - 250000 vc | 3.2217 ms/op | 3.7767 ms/op | 0.85 |
| getCommitteeAssignments - req 1000 vs - 250000 vc | 3.4626 ms/op | 4.0307 ms/op | 0.86 |
| findModifiedValidators - 10000 modified validators | 573.85 ms/op | 633.30 ms/op | 0.91 |
| findModifiedValidators - 1000 modified validators | 270.10 ms/op | 465.17 ms/op | 0.58 |
| findModifiedValidators - 100 modified validators | 303.70 ms/op | 282.04 ms/op | 1.08 |
| findModifiedValidators - 10 modified validators | 191.24 ms/op | 256.62 ms/op | 0.75 |
| findModifiedValidators - 1 modified validators | 145.72 ms/op | 231.94 ms/op | 0.63 |
| findModifiedValidators - no difference | 128.17 ms/op | 207.87 ms/op | 0.62 |
| migrate state 1500000 validators, 3400 modified, 2000 new | 1.0913 s/op | 1.1532 s/op | 0.95 |
| RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 5.8300 ns/op | 4.2600 ns/op | 1.37 |
| state getBlockRootAtSlot - 250000 vs - 7PWei | 584.33 ns/op | 535.65 ns/op | 1.09 |
| computeProposerIndex 100000 validators | 1.3337 ms/op | 1.5973 ms/op | 0.83 |
| getNextSyncCommitteeIndices 1000 validators | 99.101 ms/op | 121.64 ms/op | 0.81 |
| getNextSyncCommitteeIndices 10000 validators | 99.332 ms/op | 121.65 ms/op | 0.82 |
| getNextSyncCommitteeIndices 100000 validators | 99.200 ms/op | 124.47 ms/op | 0.80 |
| computeProposers - vc 250000 | 582.05 us/op | 657.39 us/op | 0.89 |
| computeEpochShuffling - vc 250000 | 37.666 ms/op | 46.962 ms/op | 0.80 |
| getNextSyncCommittee - vc 250000 | 9.5410 ms/op | 10.896 ms/op | 0.88 |
| nodejs block root to RootHex using toHex | 119.18 ns/op | 158.21 ns/op | 0.75 |
| nodejs block root to RootHex using toRootHex | 79.564 ns/op | 98.660 ns/op | 0.81 |
| nodejs fromHex(blob) | 189.16 us/op | 226.43 us/op | 0.84 |
| nodejs fromHexInto(blob) | 590.72 us/op | 769.54 us/op | 0.77 |
| nodejs block root to RootHex using the deprecated toHexString | 361.51 ns/op | 598.23 ns/op | 0.60 |
| browser block root to RootHex using toHex | 240.38 ns/op | 404.88 ns/op | 0.59 |
| browser block root to RootHex using toRootHex | 130.67 ns/op | 162.71 ns/op | 0.80 |
| browser fromHex(blob) | 1.1015 ms/op | 1.5696 ms/op | 0.70 |
| browser fromHexInto(blob) | 682.71 us/op | 731.74 us/op | 0.93 |
| browser block root to RootHex using the deprecated toHexString | 486.42 ns/op | 601.83 ns/op | 0.81 |
by benchmarkbot/action
| const uncompressedData = uncompress(data, this.maxSizePerMessage); | ||
| // check uncompressed data length before we actually decompress | ||
| const uncompressedDataLength = snappyWasm.decompress_len(data); | ||
| if (uncompressedDataLength > this.maxSizePerMessage) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we could improve this check to be per topic
as far as I know this 10MB cap should only apply to beacon_block
others may either have fixed size, for example beacon_attestation or have different max size
|
I'm not sure we should compare job time + job wait time here, service deployment is always 2x compared to docker deployment for update:
this is really the concern we had last time when we had to revert in v1.27 https://discord.com/channels/593655374469660673/1337188931489239072/1337613545382346793 this is because of MarkSweepCompact spiked on the main thread
|
**Motivation** - high `MarkSweepCompact` gc on #8647 - the reason is the use of `Buffer.allocUnsafe()` as found in #8670 (comment) - an alternative to #8670 **Description** - use `@chainsafe/snappy-wasm` for all topics but with `Buffer.alloc()` - this is deployed to `feat2` --------- Co-authored-by: Tuyen Nguyen <[email protected]>
twoeths
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should be good to go, tested this branch for a while see #8671 (comment)
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## unstable #8647 +/- ##
=========================================
Coverage 52.02% 52.03%
=========================================
Files 848 848
Lines 65812 65809 -3
Branches 4809 4809
=========================================
Hits 34241 34241
+ Misses 31502 31499 -3
Partials 69 69 🚀 New features to boost your workflow:
|
|
🎉 This PR is included in v1.38.0 🎉 |
**Motivation** - improve memory by transferirng gossipsub message data from network thread to the main thread - In snappy decompression in #8647 we had to do `Buffer.alloc()` instead of `Buffer.allocUnsafe()`. We don't have to feel bad about that because `Buffer.allocUnsafe()` does not work with this PR, and we don't waste any memory. **Description** - use `transferList` param when posting messages from network thread to the main thread part of #8629 **Testing** I've tested this on `feat2` for 3 days, the previous branch was #8671 so it's basically the current stable, does not see significant improvement but some good data for different nodes - no change on 1k or `novc` - on hoodi `sas` node we have better memory there on main thread with same mesh peers, same memory on network thread <img width="851" height="511" alt="Screenshot 2025-12-12 at 11 05 27" src="https://github.com/user-attachments/assets/8d7b2c2f-8213-4f89-87e0-437d016bc24a" /> - on mainnnet `sas` node, we have better memory on network thread, a little bit worse on the main thread <img width="854" height="504" alt="Screenshot 2025-12-12 at 11 08 42" src="https://github.com/user-attachments/assets/7e638149-2dbe-4c7e-849c-ef78f6ff4d6f" /> - but for this mainnet node, the most interesting metric is `forward msg avg peers`, we're faster than majority of them <img width="1378" height="379" alt="Screenshot 2025-12-12 at 11 11 00" src="https://github.com/user-attachments/assets/3ba5eeaa-5a11-4cad-adfa-1e0f68a81f16" /> --------- Co-authored-by: Tuyen Nguyen <[email protected]>















Motivation
snappy-wasmis faster at compressing and uncompressing thansnappyjs.Description
snappy-wasmfor compressing / uncompressing gossip payloadssnappyvssnappyjsvssnappy-wasmbenchmarksTODO
Closes #4170