buffer: harden validation of buffer allocation size by ZYSzys · Pull Request #26162 · nodejs/node (original) (raw)
I ran the Buffer creation benchmark. TL;DR is they look fine.
confidence improvement accuracy (*) (**) (***)
buffers/buffer-creation.js n=1024 len=10 type='buffer()' 0.10 % ±2.08% ±2.77% ±3.60% buffers/buffer-creation.js n=1024 len=10 type='fast-alloc-fill' 0.45 % ±2.30% ±3.06% ±3.99% buffers/buffer-creation.js n=1024 len=10 type='fast-alloc' -1.07 % ±2.35% ±3.13% ±4.07% buffers/buffer-creation.js n=1024 len=10 type='fast-allocUnsafe' ** -2.37 % ±1.63% ±2.17% ±2.82% buffers/buffer-creation.js n=1024 len=10 type='slow-allocUnsafe' -0.29 % ±1.96% ±2.60% ±3.39% buffers/buffer-creation.js n=1024 len=10 type='slow' 0.63 % ±1.88% ±2.51% ±3.26% buffers/buffer-creation.js n=1024 len=1024 type='buffer()' 0.75 % ±1.42% ±1.90% ±2.47% buffers/buffer-creation.js n=1024 len=1024 type='fast-alloc-fill' 0.35 % ±1.36% ±1.81% ±2.36% buffers/buffer-creation.js n=1024 len=1024 type='fast-alloc' -0.29 % ±1.24% ±1.65% ±2.15% buffers/buffer-creation.js n=1024 len=1024 type='fast-allocUnsafe' -0.13 % ±2.62% ±3.49% ±4.55% buffers/buffer-creation.js n=1024 len=1024 type='slow-allocUnsafe' -1.13 % ±1.47% ±1.96% ±2.55% buffers/buffer-creation.js n=1024 len=1024 type='slow' -0.52 % ±1.34% ±1.79% ±2.33% buffers/buffer-creation.js n=1024 len=2048 type='buffer()' -0.03 % ±0.68% ±0.91% ±1.19% buffers/buffer-creation.js n=1024 len=2048 type='fast-alloc-fill' 0.53 % ±0.78% ±1.03% ±1.35% buffers/buffer-creation.js n=1024 len=2048 type='fast-alloc' -0.06 % ±0.89% ±1.18% ±1.54% buffers/buffer-creation.js n=1024 len=2048 type='fast-allocUnsafe' -1.09 % ±2.20% ±2.93% ±3.82% buffers/buffer-creation.js n=1024 len=2048 type='slow-allocUnsafe' -1.30 % ±1.46% ±1.96% ±2.57% buffers/buffer-creation.js n=1024 len=2048 type='slow' -0.15 % ±1.68% ±2.24% ±2.91% buffers/buffer-creation.js n=1024 len=4096 type='buffer()' -0.08 % ±0.77% ±1.03% ±1.34% buffers/buffer-creation.js n=1024 len=4096 type='fast-alloc-fill' -0.07 % ±0.68% ±0.91% ±1.18% buffers/buffer-creation.js n=1024 len=4096 type='fast-alloc' -0.43 % ±0.64% ±0.85% ±1.11% buffers/buffer-creation.js n=1024 len=4096 type='fast-allocUnsafe' 0.12 % ±1.26% ±1.67% ±2.18% buffers/buffer-creation.js n=1024 len=4096 type='slow-allocUnsafe' -1.20 % ±2.13% ±2.84% ±3.73% buffers/buffer-creation.js n=1024 len=4096 type='slow' -0.12 % ±2.14% ±2.85% ±3.71% buffers/buffer-creation.js n=1024 len=8192 type='buffer()' 0.20 % ±0.61% ±0.82% ±1.07% buffers/buffer-creation.js n=1024 len=8192 type='fast-alloc-fill' 0.11 % ±0.40% ±0.53% ±0.69% buffers/buffer-creation.js n=1024 len=8192 type='fast-alloc' 0.09 % ±0.55% ±0.73% ±0.95% buffers/buffer-creation.js n=1024 len=8192 type='fast-allocUnsafe' 0.96 % ±1.33% ±1.78% ±2.31% buffers/buffer-creation.js n=1024 len=8192 type='slow-allocUnsafe' 1.25 % ±1.29% ±1.72% ±2.24% buffers/buffer-creation.js n=1024 len=8192 type='slow' 0.30 % ±1.52% ±2.02% ±2.63%
Be aware that when doing many comparisons the risk of a false-positive result increases. In this case there are 30 comparisons, you can thus expect the following amount of false-positive results: 1.50 false positives, when considering a 5% risk acceptance (*, **, ***), 0.30 false positives, when considering a 1% risk acceptance (**, ), 0.03 false positives, when considering a 0.1% risk acceptance ()
Re-ran the one that came up statistically significant to see if it was a false positive and seems like it was:
confidence improvement accuracy (*) (**) (***)
buffers/buffer-creation.js n=1024 len=10 type='fast-allocUnsafe' -1.80 % ±3.48% ±4.64% ±6.07%
Be aware that when doing many comparisons the risk of a false-positive result increases. In this case there are 1 comparisons, you can thus expect the following amount of false-positive results: 0.05 false positives, when considering a 5% risk acceptance (*, **, ***), 0.01 false positives, when considering a 1% risk acceptance (**, ), 0.00 false positives, when considering a 0.1% risk acceptance ()