This repository has been archived by the owner. It is now read-only.

V8 5.9 & Node.js 8.0 #146

Closed
rvagg opened this Issue Jun 21, 2017 · 63 comments

Comments

Projects
None yet
@rvagg
Member

rvagg commented Jun 21, 2017

  1. We have perf regressions with 5.9 that seem fairly serious, at least when looked at in our microbenchmark suite, at least from the one run that was done early on
  2. 6.0 doesn't appear to have any difference from those benchmarks (so I'm hearing, have no confirmed any of this myself), this suggests to me that we're not going to get much upstream help in reigning in perf problems; so see next point:
  3. Our "CrankshaftScript" is going to need heavy-handed refactoring to make it "TurboFanScript", it's unlikely to be a clean process given how much untangling will need to be done—I'd expect us to hit a bunch of edge cases we don't have tests for, just because that's the nature of perf optimised crazy-code, and this will be ongoing too as the process of learning how to pander to TurboFan is going to be a long one (I think?)
  4. We are heading toward an LTS and the window is smaller than normal but we must stabilise early and not be scrambling to apply lipstick if we discover that it's looking like a pig

We have a really good record with our two LTS lines so far, I'm really concerned we're just rolling forward into a mini disaster for 8.0 LTS without weighing up the concerns.

@vsemozhetbyt and @targos so far appear to be the only ones who have investigated this, posted in nodejs/node#11851 which used a 5.9 candidate. Copied here for easier digestion:

arrays
                                                improvement confidence      p.value
 arrays\\var-int.js n=25 type="Array"                2.12 %        *** 1.911996e-11
 arrays\\var-int.js n=25 type="Buffer"              -1.39 %        *** 2.953185e-13
 arrays\\var-int.js n=25 type="Float32Array"         1.36 %        *** 4.482114e-21
 arrays\\var-int.js n=25 type="Float64Array"        -1.29 %        *** 3.712094e-13
 arrays\\var-int.js n=25 type="Int16Array"          -1.71 %        *** 3.185373e-15
 arrays\\var-int.js n=25 type="Int32Array"          -0.84 %        *** 3.184537e-04
 arrays\\var-int.js n=25 type="Int8Array"           -1.43 %        *** 2.081429e-16
 arrays\\var-int.js n=25 type="Uint16Array"         -1.61 %        *** 1.591048e-17
 arrays\\var-int.js n=25 type="Uint32Array"         -0.51 %          * 4.560219e-02
 arrays\\var-int.js n=25 type="Uint8Array"          -1.42 %        *** 3.315598e-35
 arrays\\zero-float.js n=25 type="Array"            -0.29 %          * 2.067735e-02
 arrays\\zero-float.js n=25 type="Buffer"            0.81 %        *** 1.432181e-14
 arrays\\zero-float.js n=25 type="Float32Array"     10.16 %        *** 1.887618e-43
 arrays\\zero-float.js n=25 type="Float64Array"      0.37 %         ** 1.180476e-03
 arrays\\zero-float.js n=25 type="Int16Array"       -1.19 %        *** 7.951452e-28
 arrays\\zero-float.js n=25 type="Int32Array"       -6.52 %        *** 1.214743e-42
 arrays\\zero-float.js n=25 type="Int8Array"       -17.88 %        *** 7.204014e-81
 arrays\\zero-float.js n=25 type="Uint16Array"      -1.16 %        *** 2.603611e-21
 arrays\\zero-float.js n=25 type="Uint32Array"      -6.40 %        *** 5.803861e-43
 arrays\\zero-float.js n=25 type="Uint8Array"      -17.86 %        *** 7.705079e-84
 arrays\\zero-int.js n=25 type="Array"              -0.43 %          * 3.411995e-02
 arrays\\zero-int.js n=25 type="Buffer"              0.93 %        *** 3.097691e-12
 arrays\\zero-int.js n=25 type="Float32Array"       10.41 %        *** 3.242834e-58
 arrays\\zero-int.js n=25 type="Float64Array"        0.61 %         ** 6.996484e-03
 arrays\\zero-int.js n=25 type="Int16Array"         -1.18 %        *** 7.198962e-17
 arrays\\zero-int.js n=25 type="Int32Array"         -6.24 %        *** 2.192567e-42
 arrays\\zero-int.js n=25 type="Int8Array"         -17.80 %        *** 4.249127e-61
 arrays\\zero-int.js n=25 type="Uint16Array"        -1.04 %        *** 1.051799e-17
 arrays\\zero-int.js n=25 type="Uint32Array"        -6.41 %        *** 7.414706e-53
 arrays\\zero-int.js n=25 type="Uint8Array"        -17.98 %        *** 6.231374e-72
arrays ("fixed" version by @targos)
                                               improvement confidence      p.value
 arrays/var-int.js n=25 type="Array"               -1.05 %            8.210770e-01
 arrays/var-int.js n=25 type="Buffer"              -1.54 %            7.566834e-02
 arrays/var-int.js n=25 type="Float32Array"         4.37 %            2.336688e-01
 arrays/var-int.js n=25 type="Float64Array"         4.08 %            3.362891e-01
 arrays/var-int.js n=25 type="Int16Array"          -0.05 %            9.828921e-01
 arrays/var-int.js n=25 type="Int32Array"          -0.33 %            9.339843e-01
 arrays/var-int.js n=25 type="Int8Array"           -1.18 %            2.395664e-01
 arrays/var-int.js n=25 type="Uint16Array"         -0.40 %            8.660353e-01
 arrays/var-int.js n=25 type="Uint32Array"         -0.03 %            9.929733e-01
 arrays/var-int.js n=25 type="Uint8Array"          -1.43 %            1.526402e-01
 arrays/zero-float.js n=25 type="Array"            -1.17 %            8.379417e-01
 arrays/zero-float.js n=25 type="Buffer"            9.29 %        *** 5.629907e-07
 arrays/zero-float.js n=25 type="Float32Array"     18.19 %        *** 9.789400e-05
 arrays/zero-float.js n=25 type="Float64Array"     -0.48 %            9.050489e-01
 arrays/zero-float.js n=25 type="Int16Array"        9.51 %         ** 2.217754e-03
 arrays/zero-float.js n=25 type="Int32Array"       17.43 %         ** 1.694204e-03
 arrays/zero-float.js n=25 type="Int8Array"        10.55 %        *** 4.225859e-08
 arrays/zero-float.js n=25 type="Uint16Array"      15.36 %        *** 5.441519e-06
 arrays/zero-float.js n=25 type="Uint32Array"      12.27 %         ** 5.170996e-03
 arrays/zero-float.js n=25 type="Uint8Array"       10.37 %        *** 4.785524e-09
 arrays/zero-int.js n=25 type="Array"              -0.25 %            9.488216e-01
 arrays/zero-int.js n=25 type="Buffer"              9.42 %        *** 3.878194e-09
 arrays/zero-int.js n=25 type="Float32Array"       18.75 %        *** 6.911246e-05
 arrays/zero-int.js n=25 type="Float64Array"       -0.60 %            8.775090e-01
 arrays/zero-int.js n=25 type="Int16Array"         11.43 %        *** 4.247462e-07
 arrays/zero-int.js n=25 type="Int32Array"         10.80 %        *** 1.130166e-05
 arrays/zero-int.js n=25 type="Int8Array"           9.77 %        *** 1.961177e-09
 arrays/zero-int.js n=25 type="Uint16Array"         8.71 %        *** 3.570013e-04
 arrays/zero-int.js n=25 type="Uint32Array"        11.22 %          * 1.067604e-02
 arrays/zero-int.js n=25 type="Uint8Array"         11.26 %        *** 1.952135e-13
assert
                                                                                                   improvement confidence      p.value
 assert\\deepequal-buffer.js method="nonstrict" len=100 n=1000                                          6.08 %        *** 2.240694e-16
 assert\\deepequal-buffer.js method="strict" len=100 n=1000                                             6.36 %        *** 1.715121e-08
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="array"         11.16 %        *** 3.089537e-20
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="boolean"       11.65 %        *** 6.319150e-35
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="new-array"     11.43 %        *** 1.019362e-28
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="null"          11.81 %        *** 6.516888e-28
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="number"        10.07 %        *** 3.636875e-23
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="object"        11.48 %        *** 2.818413e-35
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="string"        11.38 %        *** 8.847026e-29
 assert\\deepequal-prims-and-objs-big-array.js method="nonstrict" len=100000 n=25 prim="undefined"     11.83 %        *** 2.848567e-29
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="array"            11.18 %        *** 1.020906e-28
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="boolean"          10.51 %        *** 5.346165e-17
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="new-array"        11.35 %        *** 6.250137e-27
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="null"             10.45 %        *** 2.073088e-24
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="number"           10.37 %        *** 1.018234e-15
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="object"           10.44 %        *** 3.487968e-24
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="string"           11.79 %        *** 1.710809e-38
 assert\\deepequal-prims-and-objs-big-array.js method="strict" len=100000 n=25 prim="undefined"        10.91 %        *** 3.133955e-27
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="array"                39.25 %        *** 2.220953e-63
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="boolean"              39.48 %        *** 3.117618e-82
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="new-array"            40.43 %        *** 1.118514e-73
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="null"                 39.43 %        *** 6.743661e-77
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="number"               36.70 %        *** 8.813610e-64
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="object"               40.04 %        *** 2.289447e-64
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="string"               39.03 %        *** 1.345610e-76
 assert\\deepequal-prims-and-objs-big-loop.js method="nonstrict" n=1000000 prim="undefined"            39.12 %        *** 2.970695e-76
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="array"                   36.64 %        *** 3.348739e-60
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="boolean"                 33.43 %        *** 1.410337e-65
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="new-array"               35.21 %        *** 6.250969e-64
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="null"                    33.86 %        *** 1.815821e-64
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="number"                  32.49 %        *** 2.435150e-57
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="object"                  36.99 %        *** 3.538131e-46
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="string"                  33.83 %        *** 2.264266e-56
 assert\\deepequal-prims-and-objs-big-loop.js method="strict" n=1000000 prim="undefined"               34.27 %        *** 2.675520e-61
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Float32Array"              -11.66 %        *** 7.849993e-27
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Float64Array"              -11.36 %        *** 3.903625e-29
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Int16Array"                  8.10 %        *** 1.298645e-16
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Int32Array"                  6.88 %        *** 4.351738e-15
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Int8Array"                  10.21 %        *** 3.566406e-21
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Uint16Array"                 6.94 %        *** 6.770045e-14
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Uint32Array"                 7.38 %        *** 1.083080e-12
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Uint8Array"                  7.85 %        *** 5.187461e-18
 assert\\deepequal-typedarrays.js len=1000000 method="nonstrict" n=1 type="Uint8ClampedArray"           8.13 %        *** 7.616631e-16
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Float32Array"                 -11.03 %        *** 6.610454e-66
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Float64Array"                 -11.06 %        *** 2.551550e-46
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Int16Array"                     0.60 %            5.300335e-01
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Int32Array"                     0.09 %            8.860152e-01
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Int8Array"                      5.09 %        *** 2.161384e-04
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Uint16Array"                    3.97 %         ** 2.187538e-03
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Uint32Array"                    0.90 %            4.287213e-01
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Uint8Array"                     1.67 %            9.340617e-02
 assert\\deepequal-typedarrays.js len=1000000 method="strict" n=1 type="Uint8ClampedArray"              3.99 %        *** 9.655741e-04
buffers
                                                                                                                                                  improvement confidence      p.value
 buffers\\buffer-base64-decode.js n=32                                                                                                               -0.03 %            6.813796e-01
 buffers\\buffer-base64-encode.js n=32 len=67108864                                                                                                   0.10 %            7.395115e-02
 buffers\\buffer-bytelength.js n=5000000 len=1 encoding="base64"                                                                                     16.14 %        *** 5.629742e-46
 buffers\\buffer-bytelength.js n=5000000 len=1 encoding="utf8"                                                                                      -36.00 %        *** 2.712131e-60
 buffers\\buffer-bytelength.js n=5000000 len=16 encoding="base64"                                                                                    17.67 %        *** 8.234877e-53
 buffers\\buffer-bytelength.js n=5000000 len=16 encoding="utf8"                                                                                      -9.00 %        *** 6.554314e-47
 buffers\\buffer-bytelength.js n=5000000 len=2 encoding="base64"                                                                                     14.62 %        *** 1.496880e-30
 buffers\\buffer-bytelength.js n=5000000 len=2 encoding="utf8"                                                                                      -27.22 %        *** 4.940651e-70
 buffers\\buffer-bytelength.js n=5000000 len=256 encoding="base64"                                                                                   15.63 %        *** 5.408900e-35
 buffers\\buffer-bytelength.js n=5000000 len=256 encoding="utf8"                                                                                     -1.68 %        *** 1.306409e-05
 buffers\\buffer-bytelength.js n=5000000 len=4 encoding="base64"                                                                                     17.38 %        *** 8.353420e-48
 buffers\\buffer-bytelength.js n=5000000 len=4 encoding="utf8"                                                                                      -23.14 %        *** 2.336540e-62
 buffers\\buffer-bytelength.js n=5000000 len=64 encoding="base64"                                                                                    17.70 %        *** 9.030145e-49
 buffers\\buffer-bytelength.js n=5000000 len=64 encoding="utf8"                                                                                      -3.25 %        *** 2.280305e-12
 buffers\\buffer-compare-instance-method.js millions=1 args=1 size=1024                                                                             -11.50 %        *** 2.000140e-17
 buffers\\buffer-compare-instance-method.js millions=1 args=1 size=16                                                                               -12.12 %        *** 2.153111e-25
 buffers\\buffer-compare-instance-method.js millions=1 args=1 size=16386                                                                              2.15 %            3.759710e-01
 buffers\\buffer-compare-instance-method.js millions=1 args=1 size=4096                                                                             -11.47 %        *** 1.230915e-05
 buffers\\buffer-compare-instance-method.js millions=1 args=1 size=512                                                                              -10.09 %        *** 3.727958e-19
 buffers\\buffer-compare-instance-method.js millions=1 args=2 size=1024                                                                             -19.04 %        *** 7.673003e-27
 buffers\\buffer-compare-instance-method.js millions=1 args=2 size=16                                                                               -21.40 %        *** 3.935922e-62
 buffers\\buffer-compare-instance-method.js millions=1 args=2 size=16386                                                                             -2.74 %            1.174619e-01
 buffers\\buffer-compare-instance-method.js millions=1 args=2 size=4096                                                                             -15.96 %        *** 7.638449e-11
 buffers\\buffer-compare-instance-method.js millions=1 args=2 size=512                                                                              -19.64 %        *** 5.566149e-30
 buffers\\buffer-compare-instance-method.js millions=1 args=3 size=1024                                                                             -16.32 %        *** 9.753637e-24
 buffers\\buffer-compare-instance-method.js millions=1 args=3 size=16                                                                               -19.00 %        *** 2.905866e-60
 buffers\\buffer-compare-instance-method.js millions=1 args=3 size=16386                                                                             -3.50 %        *** 3.463127e-04
 buffers\\buffer-compare-instance-method.js millions=1 args=3 size=4096                                                                             -15.93 %        *** 6.136367e-12
 buffers\\buffer-compare-instance-method.js millions=1 args=3 size=512                                                                              -17.67 %        *** 2.211209e-33
 buffers\\buffer-compare-instance-method.js millions=1 args=4 size=1024                                                                             -17.24 %        *** 3.824330e-29
 buffers\\buffer-compare-instance-method.js millions=1 args=4 size=16                                                                               -19.58 %        *** 1.338838e-38
 buffers\\buffer-compare-instance-method.js millions=1 args=4 size=16386                                                                             -3.50 %        *** 2.668278e-06
 buffers\\buffer-compare-instance-method.js millions=1 args=4 size=4096                                                                             -15.32 %        *** 4.822259e-11
 buffers\\buffer-compare-instance-method.js millions=1 args=4 size=512                                                                              -16.30 %        *** 3.251165e-25
 buffers\\buffer-compare-instance-method.js millions=1 args=5 size=1024                                                                              -0.20 %            8.718793e-01
 buffers\\buffer-compare-instance-method.js millions=1 args=5 size=16                                                                                -0.35 %            3.508750e-01
 buffers\\buffer-compare-instance-method.js millions=1 args=5 size=16386                                                                              3.04 %         ** 1.167276e-03
 buffers\\buffer-compare-instance-method.js millions=1 args=5 size=4096                                                                              -4.48 %          * 3.204543e-02
 buffers\\buffer-compare-instance-method.js millions=1 args=5 size=512                                                                                1.06 %            8.748816e-02
 buffers\\buffer-compare-offset.js millions=1 size=1024 method="offset"                                                                              -3.03 %        *** 1.757880e-11
 buffers\\buffer-compare-offset.js millions=1 size=1024 method="slice"                                                                                7.19 %        *** 9.960328e-16
 buffers\\buffer-compare-offset.js millions=1 size=16 method="offset"                                                                                -3.49 %        *** 1.237199e-11
 buffers\\buffer-compare-offset.js millions=1 size=16 method="slice"                                                                                  7.24 %        *** 1.006812e-19
 buffers\\buffer-compare-offset.js millions=1 size=16386 method="offset"                                                                             -3.00 %        *** 5.300663e-09
 buffers\\buffer-compare-offset.js millions=1 size=16386 method="slice"                                                                               7.22 %        *** 6.424469e-16
 buffers\\buffer-compare-offset.js millions=1 size=4096 method="offset"                                                                              -3.75 %        *** 2.294207e-14
 buffers\\buffer-compare-offset.js millions=1 size=4096 method="slice"                                                                                7.18 %        *** 3.934175e-20
 buffers\\buffer-compare-offset.js millions=1 size=512 method="offset"                                                                               -3.34 %        *** 2.742405e-11
 buffers\\buffer-compare-offset.js millions=1 size=512 method="slice"                                                                                 7.59 %        *** 8.893416e-20
 buffers\\buffer-compare.js millions=1 size=1024                                                                                                    -21.69 %        *** 2.710130e-27
 buffers\\buffer-compare.js millions=1 size=16                                                                                                      -27.15 %        *** 4.754943e-54
 buffers\\buffer-compare.js millions=1 size=16386                                                                                                    -5.12 %         ** 1.333052e-03
 buffers\\buffer-compare.js millions=1 size=4096                                                                                                    -16.47 %        *** 2.029561e-11
 buffers\\buffer-compare.js millions=1 size=512                                                                                                     -23.08 %        *** 9.287436e-34
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=1 pieces=1                                                                             -4.73 %        *** 7.982186e-07
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=1 pieces=16                                                                           -26.40 %        *** 4.427981e-42
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=1 pieces=4                                                                            -19.26 %        *** 1.195433e-37
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=16 pieces=1                                                                            -9.86 %        *** 9.593113e-24
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=16 pieces=16                                                                          -24.97 %        *** 3.166334e-28
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=16 pieces=4                                                                           -21.01 %        *** 2.224996e-52
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=256 pieces=1                                                                           -6.38 %        *** 4.025680e-17
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=256 pieces=16                                                                         -12.39 %        *** 1.076091e-51
 buffers\\buffer-concat.js n=1024 withTotalLength=0 pieceSize=256 pieces=4                                                                          -13.81 %        *** 2.545945e-52
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=1 pieces=1                                                                             -3.94 %        *** 4.046170e-11
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=1 pieces=16                                                                           -29.76 %        *** 1.779827e-50
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=1 pieces=4                                                                            -19.35 %        *** 1.488346e-44
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=16 pieces=1                                                                           -12.40 %        *** 2.748948e-26
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=16 pieces=16                                                                          -30.48 %        *** 5.782960e-53
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=16 pieces=4                                                                           -22.38 %        *** 2.518032e-47
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=256 pieces=1                                                                           -7.67 %        *** 1.012370e-17
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=256 pieces=16                                                                         -13.33 %        *** 6.172313e-47
 buffers\\buffer-concat.js n=1024 withTotalLength=1 pieceSize=256 pieces=4                                                                          -12.97 %        *** 1.221396e-50
 buffers\\buffer-creation.js n=1024 len=10 type="buffer()"                                                                                           -5.87 %        *** 9.479277e-09
 buffers\\buffer-creation.js n=1024 len=10 type="fast-alloc-fill"                                                                                    17.73 %        *** 7.279321e-26
 buffers\\buffer-creation.js n=1024 len=10 type="fast-alloc"                                                                                         -7.55 %        *** 2.297406e-13
 buffers\\buffer-creation.js n=1024 len=10 type="fast-allocUnsafe"                                                                                  -10.28 %        *** 7.217664e-17
 buffers\\buffer-creation.js n=1024 len=10 type="slow-allocUnsafe"                                                                                   14.11 %        *** 3.181184e-20
 buffers\\buffer-creation.js n=1024 len=10 type="slow"                                                                                               13.62 %        *** 1.207137e-22
 buffers\\buffer-creation.js n=1024 len=1024 type="buffer()"                                                                                         -3.41 %         ** 1.440904e-03
 buffers\\buffer-creation.js n=1024 len=1024 type="fast-alloc-fill"                                                                                   9.64 %        *** 1.272331e-12
 buffers\\buffer-creation.js n=1024 len=1024 type="fast-alloc"                                                                                        2.22 %          * 3.739922e-02
 buffers\\buffer-creation.js n=1024 len=1024 type="fast-allocUnsafe"                                                                                 -1.65 %            8.510120e-02
 buffers\\buffer-creation.js n=1024 len=1024 type="slow-allocUnsafe"                                                                                 10.84 %        *** 2.302591e-14
 buffers\\buffer-creation.js n=1024 len=1024 type="slow"                                                                                             11.07 %        *** 5.350467e-17
 buffers\\buffer-creation.js n=1024 len=2048 type="buffer()"                                                                                         -1.89 %            7.896093e-02
 buffers\\buffer-creation.js n=1024 len=2048 type="fast-alloc-fill"                                                                                   5.82 %        *** 1.278769e-06
 buffers\\buffer-creation.js n=1024 len=2048 type="fast-alloc"                                                                                        0.56 %            6.263182e-01
 buffers\\buffer-creation.js n=1024 len=2048 type="fast-allocUnsafe"                                                                                 -0.13 %            8.992751e-01
 buffers\\buffer-creation.js n=1024 len=2048 type="slow-allocUnsafe"                                                                                  7.31 %        *** 4.140525e-09
 buffers\\buffer-creation.js n=1024 len=2048 type="slow"                                                                                              7.26 %        *** 1.368239e-08
 buffers\\buffer-creation.js n=1024 len=4096 type="buffer()"                                                                                          6.40 %        *** 1.419849e-07
 buffers\\buffer-creation.js n=1024 len=4096 type="fast-alloc-fill"                                                                                   3.58 %         ** 4.131086e-03
 buffers\\buffer-creation.js n=1024 len=4096 type="fast-alloc"                                                                                        0.23 %            8.587182e-01
 buffers\\buffer-creation.js n=1024 len=4096 type="fast-allocUnsafe"                                                                                  5.57 %        *** 1.204951e-04
 buffers\\buffer-creation.js n=1024 len=4096 type="slow-allocUnsafe"                                                                                  4.85 %        *** 3.717312e-05
 buffers\\buffer-creation.js n=1024 len=4096 type="slow"                                                                                              5.49 %        *** 2.288046e-06
 buffers\\buffer-creation.js n=1024 len=8192 type="buffer()"                                                                                          7.39 %        *** 1.701336e-07
 buffers\\buffer-creation.js n=1024 len=8192 type="fast-alloc-fill"                                                                                   4.18 %         ** 2.611444e-03
 buffers\\buffer-creation.js n=1024 len=8192 type="fast-alloc"                                                                                        0.35 %            7.998885e-01
 buffers\\buffer-creation.js n=1024 len=8192 type="fast-allocUnsafe"                                                                                  7.71 %        *** 2.536921e-08
 buffers\\buffer-creation.js n=1024 len=8192 type="slow-allocUnsafe"                                                                                  5.35 %        *** 4.558921e-05
 buffers\\buffer-creation.js n=1024 len=8192 type="slow"                                                                                              4.37 %        *** 6.654867e-04
 buffers\\buffer-from.js n=1024 len=10 source="array"                                                                                                -0.31 %            5.470660e-01
 buffers\\buffer-from.js n=1024 len=10 source="arraybuffer-middle"                                                                                   30.70 %        *** 6.190845e-54
 buffers\\buffer-from.js n=1024 len=10 source="arraybuffer"                                                                                          -3.56 %        *** 1.791732e-15
 buffers\\buffer-from.js n=1024 len=10 source="buffer"                                                                                              -15.69 %        *** 2.672736e-35
 buffers\\buffer-from.js n=1024 len=10 source="object"                                                                                               11.53 %        *** 7.237769e-34
 buffers\\buffer-from.js n=1024 len=10 source="string-base64"                                                                                        -9.66 %        *** 1.494303e-18
 buffers\\buffer-from.js n=1024 len=10 source="string"                                                                                              -23.06 %        *** 9.883857e-39
 buffers\\buffer-from.js n=1024 len=10 source="uint8array"                                                                                          -18.37 %        *** 7.316612e-44
 buffers\\buffer-from.js n=1024 len=2048 source="array"                                                                                             -10.80 %        *** 1.411818e-67
 buffers\\buffer-from.js n=1024 len=2048 source="arraybuffer-middle"                                                                                 31.86 %        *** 5.733511e-32
 buffers\\buffer-from.js n=1024 len=2048 source="arraybuffer"                                                                                        -3.97 %        *** 3.726409e-18
 buffers\\buffer-from.js n=1024 len=2048 source="buffer"                                                                                             -3.65 %        *** 4.177849e-30
 buffers\\buffer-from.js n=1024 len=2048 source="object"                                                                                             11.36 %        *** 2.380623e-26
 buffers\\buffer-from.js n=1024 len=2048 source="string-base64"                                                                                      -1.02 %        *** 1.519490e-12
 buffers\\buffer-from.js n=1024 len=2048 source="string"                                                                                             -3.18 %        *** 1.079311e-24
 buffers\\buffer-from.js n=1024 len=2048 source="uint8array"                                                                                         -3.01 %        *** 1.284177e-16
 buffers\\buffer-hex.js n=10000000 len=0                                                                                                             73.05 %        *** 5.082105e-49
 buffers\\buffer-hex.js n=10000000 len=1                                                                                                             -3.98 %        *** 2.925840e-05
 buffers\\buffer-hex.js n=10000000 len=1024                                                                                                           0.60 %        *** 5.419991e-04
 buffers\\buffer-hex.js n=10000000 len=64                                                                                                             2.13 %        *** 8.823847e-05
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="--l"                                                                      -0.35 %            7.264494e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="@"                                                                        -2.20 %            8.007837e-02
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="</i> to the Caterpillar"                                                  -0.98 %            3.668637e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="10x"                                                                      -4.28 %        *** 7.829767e-05
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="aaaaaaaaaaaaaaaaa"                                                        -0.42 %            6.726551e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="Alice"                                                                   -17.45 %        *** 9.162873e-22
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="among mad people"                                                         -0.63 %            4.632337e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="found it very"                                                            -0.57 %            5.543621e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="Gryphon"                                                                  -0.71 %            4.706095e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="neighbouring pool"                                                        -1.05 %            2.966895e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="Ou est ma chatte?"                                                        -0.84 %            3.687903e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="Panther"                                                                  -1.12 %            2.863537e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="Soo--oop"                                                                 -0.49 %            6.841558e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="SQ"                                                                       -0.03 %            9.784193e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="binary" search="venture to go near the house till she had brought herself down to"        -0.72 %            4.944216e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="--l"                                                                        -0.07 %            9.409791e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="@"                                                                          -0.69 %            5.444296e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="</i> to the Caterpillar"                                                    -0.71 %            4.911884e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="10x"                                                                        -1.87 %            9.761129e-02
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="aaaaaaaaaaaaaaaaa"                                                          -0.74 %            4.598899e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="Alice"                                                                     -13.47 %        *** 3.310372e-09
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="among mad people"                                                           -1.03 %            2.974805e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="found it very"                                                              -0.65 %            4.837249e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="Gryphon"                                                                    -0.79 %            4.449877e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="neighbouring pool"                                                          -0.32 %            7.452157e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="Ou est ma chatte?"                                                          -0.99 %            2.792177e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="Panther"                                                                    -1.09 %            2.706123e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="Soo--oop"                                                                   -0.65 %            5.341912e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="SQ"                                                                          0.48 %            6.780610e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="ucs2" search="venture to go near the house till she had brought herself down to"          -0.60 %            5.555316e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="--l"                                                                   -0.20 %            8.426501e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="@"                                                                     -2.61 %          * 3.890256e-02
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="</i> to the Caterpillar"                                               -0.68 %            5.012658e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="10x"                                                                   -3.63 %         ** 6.658883e-03
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="aaaaaaaaaaaaaaaaa"                                                     -0.74 %            4.829868e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="Alice"                                                                -22.10 %        *** 1.089377e-24
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="among mad people"                                                      -0.79 %            4.160996e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="found it very"                                                         -0.60 %            5.340795e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="Gryphon"                                                               -0.59 %            5.592168e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="neighbouring pool"                                                     -0.90 %            3.061416e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="Ou est ma chatte?"                                                     -1.39 %            1.531039e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="Panther"                                                               -0.95 %            2.903631e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="Soo--oop"                                                              -0.57 %            5.153379e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="SQ"                                                                     0.15 %            9.035586e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="undefined" search="venture to go near the house till she had brought herself down to"     -1.08 %            3.027459e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="--l"                                                                        -0.21 %            8.410248e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="@"                                                                          -2.11 %            1.269637e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="</i> to the Caterpillar"                                                    -0.53 %            6.434224e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="10x"                                                                        -4.32 %        *** 1.255939e-04
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="aaaaaaaaaaaaaaaaa"                                                          -0.80 %            4.638854e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="Alice"                                                                     -18.01 %        *** 2.045080e-19
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="among mad people"                                                           -0.79 %            3.986172e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="found it very"                                                              -0.51 %            5.729769e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="Gryphon"                                                                    -0.81 %            4.333457e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="neighbouring pool"                                                          -0.52 %            6.211223e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="Ou est ma chatte?"                                                          -0.47 %            6.280965e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="Panther"                                                                    -1.07 %            2.578412e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="Soo--oop"                                                                   -1.01 %            2.702615e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="SQ"                                                                          0.07 %            9.532958e-01
 buffers\\buffer-indexof.js iter=1 type="buffer" encoding="utf8" search="venture to go near the house till she had brought herself down to"          -0.88 %            3.541852e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="--l"                                                                      -0.45 %            6.463735e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="@"                                                                        -1.57 %            1.700239e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="</i> to the Caterpillar"                                                  -1.20 %            2.721628e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="10x"                                                                      -2.84 %          * 2.053370e-02
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="aaaaaaaaaaaaaaaaa"                                                        -0.86 %            4.135523e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="Alice"                                                                   -11.09 %        *** 1.530140e-09
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="among mad people"                                                         -0.96 %            3.569128e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="found it very"                                                            -0.84 %            3.904320e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="Gryphon"                                                                  -0.92 %            3.635840e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="neighbouring pool"                                                        -0.88 %            3.300754e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="Ou est ma chatte?"                                                        -0.78 %            4.058020e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="Panther"                                                                  -0.97 %            3.600589e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="Soo--oop"                                                                 -0.58 %            5.938500e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="SQ"                                                                        0.34 %            8.043807e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="binary" search="venture to go near the house till she had brought herself down to"        -0.46 %            6.630097e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="--l"                                                                        -0.04 %            9.704136e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="@"                                                                           2.29 %            7.465145e-02
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="</i> to the Caterpillar"                                                    -0.37 %            7.305530e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="10x"                                                                         2.51 %          * 4.197132e-02
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="aaaaaaaaaaaaaaaaa"                                                          -0.20 %            8.397360e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="Alice"                                                                      -4.74 %        *** 9.216821e-04
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="among mad people"                                                           -0.27 %            7.644037e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="found it very"                                                              -0.52 %            6.189075e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="Gryphon"                                                                    -0.33 %            7.407495e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="neighbouring pool"                                                          -0.11 %            9.145351e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="Ou est ma chatte?"                                                           0.89 %            3.138983e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="Panther"                                                                    -0.85 %            3.848009e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="Soo--oop"                                                                   -0.42 %            7.097964e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="SQ"                                                                          0.86 %            4.627404e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="ucs2" search="venture to go near the house till she had brought herself down to"           0.31 %            7.633400e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="--l"                                                                   -0.15 %            8.893093e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="@"                                                                     -2.89 %         ** 2.437993e-03
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="</i> to the Caterpillar"                                               -0.90 %            3.905602e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="10x"                                                                   -4.82 %        *** 1.543522e-06
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="aaaaaaaaaaaaaaaaa"                                                     -0.80 %            4.418717e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="Alice"                                                                -17.79 %        *** 6.256761e-20
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="among mad people"                                                      -1.25 %            2.014205e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="found it very"                                                         -0.80 %            3.713493e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="Gryphon"                                                               -0.34 %            7.258243e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="neighbouring pool"                                                     -0.84 %            3.322506e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="Ou est ma chatte?"                                                     -0.87 %            2.784203e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="Panther"                                                               -0.55 %            6.258945e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="Soo--oop"                                                              -0.72 %            3.835439e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="SQ"                                                                    -0.12 %            9.215902e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="undefined" search="venture to go near the house till she had brought herself down to"     -1.07 %            3.141827e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="--l"                                                                         0.01 %            9.939332e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="@"                                                                           0.30 %            7.906463e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="</i> to the Caterpillar"                                                    -0.31 %            7.695421e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="10x"                                                                         0.16 %            9.135554e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="aaaaaaaaaaaaaaaaa"                                                          -0.64 %            5.492043e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="Alice"                                                                      -2.21 %            1.540648e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="among mad people"                                                           -0.83 %            4.043682e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="found it very"                                                              -0.40 %            6.604813e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="Gryphon"                                                                    -0.70 %            4.947166e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="neighbouring pool"                                                          -0.42 %            6.442356e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="Ou est ma chatte?"                                                           0.18 %            8.669848e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="Panther"                                                                    -0.91 %            3.515080e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="Soo--oop"                                                                   -0.87 %            3.377439e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="SQ"                                                                          0.40 %            7.395111e-01
 buffers\\buffer-indexof.js iter=1 type="string" encoding="utf8" search="venture to go near the house till she had brought herself down to"          -0.08 %            9.333668e-01
 buffers\\buffer-iterate.js n=1000 method="for" type="fast" size=1024                                                                               -38.66 %        *** 4.488089e-44
 buffers\\buffer-iterate.js n=1000 method="for" type="fast" size=16                                                                                 -40.32 %        *** 4.545685e-56
 buffers\\buffer-iterate.js n=1000 method="for" type="fast" size=16386                                                                               -8.85 %        *** 9.406173e-57
 buffers\\buffer-iterate.js n=1000 method="for" type="fast" size=4096                                                                               -11.31 %        *** 5.776087e-48
 buffers\\buffer-iterate.js n=1000 method="for" type="fast" size=512                                                                                -46.63 %        *** 5.050247e-35
 buffers\\buffer-iterate.js n=1000 method="for" type="slow" size=1024                                                                               -38.26 %        *** 1.155162e-38
 buffers\\buffer-iterate.js n=1000 method="for" type="slow" size=16                                                                                 -39.08 %        *** 6.417078e-35
 buffers\\buffer-iterate.js n=1000 method="for" type="slow" size=16386                                                                               -8.78 %        *** 3.255136e-60
 buffers\\buffer-iterate.js n=1000 method="for" type="slow" size=4096                                                                               -11.64 %        *** 5.457078e-45
 buffers\\buffer-iterate.js n=1000 method="for" type="slow" size=512                                                                                -47.29 %        *** 2.690997e-46
 buffers\\buffer-iterate.js n=1000 method="forOf" type="fast" size=1024                                                                             110.71 %        *** 1.601002e-69
 buffers\\buffer-iterate.js n=1000 method="forOf" type="fast" size=16                                                                                -3.08 %            3.674673e-01
 buffers\\buffer-iterate.js n=1000 method="forOf" type="fast" size=16386                                                                            244.56 %        *** 1.304915e-65
 buffers\\buffer-iterate.js n=1000 method="forOf" type="fast" size=4096                                                                             173.75 %        *** 2.706117e-61
 buffers\\buffer-iterate.js n=1000 method="forOf" type="fast" size=512                                                                               65.27 %        *** 8.025107e-71
 buffers\\buffer-iterate.js n=1000 method="forOf" type="slow" size=1024                                                                             111.63 %        *** 9.453410e-75
 buffers\\buffer-iterate.js n=1000 method="forOf" type="slow" size=16                                                                                -4.00 %        *** 1.470991e-08
 buffers\\buffer-iterate.js n=1000 method="forOf" type="slow" size=16386                                                                            245.29 %        *** 1.543723e-64
 buffers\\buffer-iterate.js n=1000 method="forOf" type="slow" size=4096                                                                             177.26 %        *** 3.199303e-89
 buffers\\buffer-iterate.js n=1000 method="forOf" type="slow" size=512                                                                               64.54 %        *** 4.567671e-53
 buffers\\buffer-iterate.js n=1000 method="iterator" type="fast" size=1024                                                                           11.57 %        *** 1.967961e-48
 buffers\\buffer-iterate.js n=1000 method="iterator" type="fast" size=16                                                                            -49.67 %        *** 2.815984e-51
 buffers\\buffer-iterate.js n=1000 method="iterator" type="fast" size=16386                                                                          40.40 %        *** 4.147217e-81
 buffers\\buffer-iterate.js n=1000 method="iterator" type="fast" size=4096                                                                           30.28 %        *** 6.559132e-69
 buffers\\buffer-iterate.js n=1000 method="iterator" type="fast" size=512                                                                            -1.50 %        *** 7.022152e-06
 buffers\\buffer-iterate.js n=1000 method="iterator" type="slow" size=1024                                                                           12.50 %        *** 3.389321e-48
 buffers\\buffer-iterate.js n=1000 method="iterator" type="slow" size=16                                                                            -51.62 %        *** 5.198335e-46
 buffers\\buffer-iterate.js n=1000 method="iterator" type="slow" size=16386                                                                          40.45 %        *** 8.650464e-81
 buffers\\buffer-iterate.js n=1000 method="iterator" type="slow" size=4096                                                                           30.24 %        *** 1.296496e-68
 buffers\\buffer-iterate.js n=1000 method="iterator" type="slow" size=512                                                                            -0.92 %         ** 1.131316e-03
 buffers\\buffer-read.js millions=1 type="DoubleBE" buffer="fast" noAssert="false"                                                                  -39.77 %        *** 4.494981e-82
 buffers\\buffer-read.js millions=1 type="DoubleBE" buffer="fast" noAssert="true"                                                                   -40.36 %        *** 9.270805e-83
 buffers\\buffer-read.js millions=1 type="DoubleBE" buffer="slow" noAssert="false"                                                                  -39.87 %        *** 2.469591e-88
 buffers\\buffer-read.js millions=1 type="DoubleBE" buffer="slow" noAssert="true"                                                                   -39.95 %        *** 1.905480e-78
 buffers\\buffer-read.js millions=1 type="DoubleLE" buffer="fast" noAssert="false"                                                                  -42.71 %        *** 1.537101e-53
 buffers\\buffer-read.js millions=1 type="DoubleLE" buffer="fast" noAssert="true"                                                                   -41.59 %        *** 5.188194e-50
 buffers\\buffer-read.js millions=1 type="DoubleLE" buffer="slow" noAssert="false"                                                                  -42.92 %        *** 6.271103e-46
 buffers\\buffer-read.js millions=1 type="DoubleLE" buffer="slow" noAssert="true"                                                                   -40.60 %        *** 6.360271e-46
 buffers\\buffer-read.js millions=1 type="FloatBE" buffer="fast" noAssert="false"                                                                   -36.68 %        *** 9.102909e-73
 buffers\\buffer-read.js millions=1 type="FloatBE" buffer="fast" noAssert="true"                                                                    -37.52 %        *** 4.027095e-77
 buffers\\buffer-read.js millions=1 type="FloatBE" buffer="slow" noAssert="false"                                                                   -36.55 %        *** 1.428981e-66
 buffers\\buffer-read.js millions=1 type="FloatBE" buffer="slow" noAssert="true"                                                                    -37.41 %        *** 2.018451e-76
 buffers\\buffer-read.js millions=1 type="FloatLE" buffer="fast" noAssert="false"                                                                   -38.29 %        *** 4.356237e-53
 buffers\\buffer-read.js millions=1 type="FloatLE" buffer="fast" noAssert="true"                                                                    -40.63 %        *** 5.012620e-81
 buffers\\buffer-read.js millions=1 type="FloatLE" buffer="slow" noAssert="false"                                                                   -38.80 %        *** 3.198838e-55
 buffers\\buffer-read.js millions=1 type="FloatLE" buffer="slow" noAssert="true"                                                                    -40.26 %        *** 7.326122e-70
 buffers\\buffer-read.js millions=1 type="Int16BE" buffer="fast" noAssert="false"                                                                    19.06 %        *** 1.403670e-30
 buffers\\buffer-read.js millions=1 type="Int16BE" buffer="fast" noAssert="true"                                                                    -27.04 %        *** 2.933201e-43
 buffers\\buffer-read.js millions=1 type="Int16BE" buffer="slow" noAssert="false"                                                                    18.64 %        *** 1.137060e-36
 buffers\\buffer-read.js millions=1 type="Int16BE" buffer="slow" noAssert="true"                                                                    -27.24 %        *** 1.160528e-32
 buffers\\buffer-read.js millions=1 type="Int16LE" buffer="fast" noAssert="false"                                                                    19.66 %        *** 1.784479e-29
 buffers\\buffer-read.js millions=1 type="Int16LE" buffer="fast" noAssert="true"                                                                    -27.80 %        *** 1.643164e-42
 buffers\\buffer-read.js millions=1 type="Int16LE" buffer="slow" noAssert="false"                                                                    18.40 %        *** 7.945532e-36
 buffers\\buffer-read.js millions=1 type="Int16LE" buffer="slow" noAssert="true"                                                                    -26.02 %        *** 4.235541e-26
 buffers\\buffer-read.js millions=1 type="Int32BE" buffer="fast" noAssert="false"                                                                    -1.19 %            3.034823e-01
 buffers\\buffer-read.js millions=1 type="Int32BE" buffer="fast" noAssert="true"                                                                    -47.40 %        *** 1.243172e-43
 buffers\\buffer-read.js millions=1 type="Int32BE" buffer="slow" noAssert="false"                                                                     0.81 %            2.872066e-01
 buffers\\buffer-read.js millions=1 type="Int32BE" buffer="slow" noAssert="true"                                                                    -47.13 %        *** 9.286128e-28
 buffers\\buffer-read.js millions=1 type="Int32LE" buffer="fast" noAssert="false"                                                                     2.62 %         ** 6.505751e-03
 buffers\\buffer-read.js millions=1 type="Int32LE" buffer="fast" noAssert="true"                                                                    -42.77 %        *** 9.960392e-42
 buffers\\buffer-read.js millions=1 type="Int32LE" buffer="slow" noAssert="false"                                                                     2.59 %        *** 3.431484e-05
 buffers\\buffer-read.js millions=1 type="Int32LE" buffer="slow" noAssert="true"                                                                    -42.23 %        *** 2.721267e-36
 buffers\\buffer-read.js millions=1 type="Int8" buffer="fast" noAssert="false"                                                                       14.11 %        *** 1.021695e-36
 buffers\\buffer-read.js millions=1 type="Int8" buffer="fast" noAssert="true"                                                                       -26.83 %        *** 1.598243e-41
 buffers\\buffer-read.js millions=1 type="Int8" buffer="slow" noAssert="false"                                                                       13.58 %        *** 4.622852e-34
 buffers\\buffer-read.js millions=1 type="Int8" buffer="slow" noAssert="true"                                                                       -26.74 %        *** 3.749623e-44
 buffers\\buffer-read.js millions=1 type="UInt16BE" buffer="fast" noAssert="false"                                                                    4.00 %        *** 9.770175e-10
 buffers\\buffer-read.js millions=1 type="UInt16BE" buffer="fast" noAssert="true"                                                                   -43.99 %        *** 2.389208e-53
 buffers\\buffer-read.js millions=1 type="UInt16BE" buffer="slow" noAssert="false"                                                                    3.02 %        *** 2.438014e-11
 buffers\\buffer-read.js millions=1 type="UInt16BE" buffer="slow" noAssert="true"                                                                   -43.48 %        *** 1.778761e-52
 buffers\\buffer-read.js millions=1 type="UInt16LE" buffer="fast" noAssert="false"                                                                    7.27 %        *** 7.607707e-19
 buffers\\buffer-read.js millions=1 type="UInt16LE" buffer="fast" noAssert="true"                                                                   -37.75 %        *** 1.282249e-42
 buffers\\buffer-read.js millions=1 type="UInt16LE" buffer="slow" noAssert="false"                                                                    6.32 %        *** 1.510428e-13
 buffers\\buffer-read.js millions=1 type="UInt16LE" buffer="slow" noAssert="true"                                                                   -39.37 %        *** 1.188848e-49
 buffers\\buffer-read.js millions=1 type="UInt32BE" buffer="fast" noAssert="false"                                                                   -6.57 %        *** 2.519559e-15
 buffers\\buffer-read.js millions=1 type="UInt32BE" buffer="fast" noAssert="true"                                                                   -50.93 %        *** 1.031245e-44
 buffers\\buffer-read.js millions=1 type="UInt32BE" buffer="slow" noAssert="false"                                                                   -7.23 %        *** 5.927445e-26
 buffers\\buffer-read.js millions=1 type="UInt32BE" buffer="slow" noAssert="true"                                                                   -51.02 %        *** 4.138643e-51
 buffers\\buffer-read.js millions=1 type="UInt32LE" buffer="fast" noAssert="false"                                                                   -4.94 %        *** 1.291956e-09
 buffers\\buffer-read.js millions=1 type="UInt32LE" buffer="fast" noAssert="true"                                                                   -49.31 %        *** 2.610133e-49
 buffers\\buffer-read.js millions=1 type="UInt32LE" buffer="slow" noAssert="false"                                                                   -5.06 %        *** 8.029210e-16
 buffers\\buffer-read.js millions=1 type="UInt32LE" buffer="slow" noAssert="true"                                                                   -48.99 %        *** 3.672503e-40
 buffers\\buffer-read.js millions=1 type="UInt8" buffer="fast" noAssert="false"                                                                     -13.40 %        *** 8.950667e-29
 buffers\\buffer-read.js millions=1 type="UInt8" buffer="fast" noAssert="true"                                                                      -54.61 %        *** 4.233053e-39
 buffers\\buffer-read.js millions=1 type="UInt8" buffer="slow" noAssert="false"                                                                     -12.84 %        *** 6.666907e-28
 buffers\\buffer-read.js millions=1 type="UInt8" buffer="slow" noAssert="true"                                                                      -54.34 %        *** 2.847385e-36
 buffers\\buffer-slice.js n=1024 type="fast"                                                                                                         18.66 %        *** 4.017939e-23
 buffers\\buffer-slice.js n=1024 type="slow"                                                                                                         18.22 %        *** 5.380341e-28
 buffers\\buffer-tojson.js len=0 n=10000                                                                                                            -29.94 %        *** 2.279781e-35
 buffers\\buffer-tojson.js len=10 n=10000                                                                                                           -50.51 %        *** 4.138969e-30
 buffers\\buffer-tojson.js len=256 n=10000                                                                                                           -6.61 %        *** 1.909075e-12
 buffers\\buffer-tojson.js len=4096 n=10000                                                                                                           0.61 %            3.305055e-01
 buffers\\buffer-tostring.js n=10000000 len=0 arg="false"                                                                                           -45.06 %        *** 1.052493e-64
 buffers\\buffer-tostring.js n=10000000 len=0 arg="true"                                                                                            141.33 %        *** 2.570761e-49
 buffers\\buffer-tostring.js n=10000000 len=1 arg="false"                                                                                           -29.80 %        *** 1.295265e-36
 buffers\\buffer-tostring.js n=10000000 len=1 arg="true"                                                                                            -23.91 %        *** 5.613356e-50
 buffers\\buffer-tostring.js n=10000000 len=1024 arg="false"                                                                                        -11.89 %        *** 1.852139e-43
 buffers\\buffer-tostring.js n=10000000 len=1024 arg="true"                                                                                          -7.67 %        *** 1.280761e-22
 buffers\\buffer-tostring.js n=10000000 len=64 arg="false"                                                                                          -32.36 %        *** 3.080627e-63
 buffers\\buffer-tostring.js n=10000000 len=64 arg="true"                                                                                           -23.21 %        *** 1.418203e-37
 buffers\\buffer-write.js millions=1 type="DoubleBE" buffer="fast" noAssert="false"                                                                 -43.56 %        *** 1.585645e-31
 buffers\\buffer-write.js millions=1 type="DoubleBE" buffer="fast" noAssert="true"                                                                  -44.91 %        *** 3.569385e-44
 buffers\\buffer-write.js millions=1 type="DoubleBE" buffer="slow" noAssert="false"                                                                 -44.11 %        *** 1.041960e-42
 buffers\\buffer-write.js millions=1 type="DoubleBE" buffer="slow" noAssert="true"                                                                  -43.94 %        *** 1.257416e-34
 buffers\\buffer-write.js millions=1 type="DoubleLE" buffer="fast" noAssert="false"                                                                 -39.65 %        *** 1.140142e-82
 buffers\\buffer-write.js millions=1 type="DoubleLE" buffer="fast" noAssert="true"                                                                  -42.72 %        *** 1.151006e-80
 buffers\\buffer-write.js millions=1 type="DoubleLE" buffer="slow" noAssert="false"                                                                 -39.74 %        *** 3.682974e-75
 buffers\\buffer-write.js millions=1 type="DoubleLE" buffer="slow" noAssert="true"                                                                  -42.39 %        *** 1.113374e-74
 buffers\\buffer-write.js millions=1 type="FloatBE" buffer="fast" noAssert="false"                                                                  -41.31 %        *** 8.648892e-40
 buffers\\buffer-write.js millions=1 type="FloatBE" buffer="fast" noAssert="true"                                                                   -41.94 %        *** 1.885928e-37
 buffers\\buffer-write.js millions=1 type="FloatBE" buffer="slow" noAssert="false"                                                                  -40.38 %        *** 6.572863e-39
 buffers\\buffer-write.js millions=1 type="FloatBE" buffer="slow" noAssert="true"                                                                   -44.10 %        *** 7.293289e-41
 buffers\\buffer-write.js millions=1 type="FloatLE" buffer="fast" noAssert="false"                                                                  -40.11 %        *** 1.285867e-38
 buffers\\buffer-write.js millions=1 type="FloatLE" buffer="fast" noAssert="true"                                                                   -41.97 %        *** 3.338780e-27
 buffers\\buffer-write.js millions=1 type="FloatLE" buffer="slow" noAssert="false"                                                                  -40.85 %        *** 1.234396e-37
 buffers\\buffer-write.js millions=1 type="FloatLE" buffer="slow" noAssert="true"                                                                   -42.77 %        *** 8.299756e-37
 buffers\\buffer-write.js millions=1 type="Int16BE" buffer="fast" noAssert="false"                                                                   12.51 %        *** 1.082288e-32
 buffers\\buffer-write.js millions=1 type="Int16BE" buffer="fast" noAssert="true"                                                                   -38.73 %        *** 3.306965e-39
 buffers\\buffer-write.js millions=1 type="Int16BE" buffer="slow" noAssert="false"                                                                   12.64 %        *** 5.858414e-26
 buffers\\buffer-write.js millions=1 type="Int16BE" buffer="slow" noAssert="true"                                                                   -38.80 %        *** 2.644936e-46
 buffers\\buffer-write.js millions=1 type="Int16LE" buffer="fast" noAssert="false"                                                                   13.20 %        *** 3.046712e-36
 buffers\\buffer-write.js millions=1 type="Int16LE" buffer="fast" noAssert="true"                                                                   -42.88 %        *** 2.418837e-43
 buffers\\buffer-write.js millions=1 type="Int16LE" buffer="slow" noAssert="false"                                                                   13.35 %        *** 5.381653e-33
 buffers\\buffer-write.js millions=1 type="Int16LE" buffer="slow" noAssert="true"                                                                   -43.64 %        *** 2.124825e-56
 buffers\\buffer-write.js millions=1 type="Int32BE" buffer="fast" noAssert="false"                                                                    0.68 %            1.443934e-01
 buffers\\buffer-write.js millions=1 type="Int32BE" buffer="fast" noAssert="true"                                                                   -39.90 %        *** 7.142140e-40
 buffers\\buffer-write.js millions=1 type="Int32BE" buffer="slow" noAssert="false"                                                                    1.64 %        *** 2.493676e-06
 buffers\\buffer-write.js millions=1 type="Int32BE" buffer="slow" noAssert="true"                                                                   -40.22 %        *** 5.057077e-47
 buffers\\buffer-write.js millions=1 type="Int32LE" buffer="fast" noAssert="false"                                                                    2.51 %        *** 4.209786e-08
 buffers\\buffer-write.js millions=1 type="Int32LE" buffer="fast" noAssert="true"                                                                   -44.77 %        *** 7.731343e-32
 buffers\\buffer-write.js millions=1 type="Int32LE" buffer="slow" noAssert="false"                                                                    1.90 %        *** 6.013827e-09
 buffers\\buffer-write.js millions=1 type="Int32LE" buffer="slow" noAssert="true"                                                                   -44.69 %        *** 1.473504e-38
 buffers\\buffer-write.js millions=1 type="Int8" buffer="fast" noAssert="false"                                                                       8.96 %        *** 1.390186e-25
 buffers\\buffer-write.js millions=1 type="Int8" buffer="fast" noAssert="true"                                                                      -43.46 %        *** 6.151087e-60
 buffers\\buffer-write.js millions=1 type="Int8" buffer="slow" noAssert="false"                                                                       8.77 %        *** 3.912871e-31
 buffers\\buffer-write.js millions=1 type="Int8" buffer="slow" noAssert="true"                                                                      -42.49 %        *** 4.625293e-20
 buffers\\buffer-write.js millions=1 type="UInt16BE" buffer="fast" noAssert="false"                                                                  15.93 %        *** 1.920343e-40
 buffers\\buffer-write.js millions=1 type="UInt16BE" buffer="fast" noAssert="true"                                                                  -37.95 %        *** 2.985032e-28
 buffers\\buffer-write.js millions=1 type="UInt16BE" buffer="slow" noAssert="false"                                                                  15.93 %        *** 1.402500e-43
 buffers\\buffer-write.js millions=1 type="UInt16BE" buffer="slow" noAssert="true"                                                                  -38.79 %        *** 1.025692e-57
 buffers\\buffer-write.js millions=1 type="UInt16LE" buffer="fast" noAssert="false"                                                                  12.50 %        *** 2.898478e-33
 buffers\\buffer-write.js millions=1 type="UInt16LE" buffer="fast" noAssert="true"                                                                  -43.70 %        *** 2.854414e-55
 buffers\\buffer-write.js millions=1 type="UInt16LE" buffer="slow" noAssert="false"                                                                  12.86 %        *** 6.317302e-42
 buffers\\buffer-write.js millions=1 type="UInt16LE" buffer="slow" noAssert="true"                                                                  -43.15 %        *** 4.572356e-42
 buffers\\buffer-write.js millions=1 type="UInt32BE" buffer="fast" noAssert="false"                                                                   5.89 %        *** 1.182524e-25
 buffers\\buffer-write.js millions=1 type="UInt32BE" buffer="fast" noAssert="true"                                                                  -40.05 %        *** 1.608055e-52
 buffers\\buffer-write.js millions=1 type="UInt32BE" buffer="slow" noAssert="false"                                                                   5.68 %        *** 2.005348e-24
 buffers\\buffer-write.js millions=1 type="UInt32BE" buffer="slow" noAssert="true"                                                                  -40.09 %        *** 2.130559e-44
 buffers\\buffer-write.js millions=1 type="UInt32LE" buffer="fast" noAssert="false"                                                                   5.20 %        *** 3.130693e-19
 buffers\\buffer-write.js millions=1 type="UInt32LE" buffer="fast" noAssert="true"                                                                  -40.95 %        *** 4.726284e-60
 buffers\\buffer-write.js millions=1 type="UInt32LE" buffer="slow" noAssert="false"                                                                   5.93 %        *** 2.668763e-20
 buffers\\buffer-write.js millions=1 type="UInt32LE" buffer="slow" noAssert="true"                                                                  -40.30 %        *** 1.091369e-32
 buffers\\buffer-write.js millions=1 type="UInt8" buffer="fast" noAssert="false"                                                                      8.60 %        *** 2.492144e-29
 buffers\\buffer-write.js millions=1 type="UInt8" buffer="fast" noAssert="true"                                                                     -41.73 %        *** 1.405204e-31
 buffers\\buffer-write.js millions=1 type="UInt8" buffer="slow" noAssert="false"                                                                      9.32 %        *** 4.601417e-22
 buffers\\buffer-write.js millions=1 type="UInt8" buffer="slow" noAssert="true"                                                                     -42.55 %        *** 2.019819e-31
 buffers\\buffer_zero.js type="buffer" n=1024                                                                                                         2.44 %        *** 3.511559e-04
 buffers\\buffer_zero.js type="string" n=1024                                                                                                         8.90 %        *** 1.325879e-13
 buffers\\dataview-set.js millions=1 type="Float32BE"                                                                                                -4.65 %        *** 1.682569e-11
 buffers\\dataview-set.js millions=1 type="Float32LE"                                                                                                -6.15 %        *** 1.081206e-21
 buffers\\dataview-set.js millions=1 type="Float64BE"                                                                                                -6.72 %        *** 5.129692e-21
 buffers\\dataview-set.js millions=1 type="Float64LE"                                                                                                -7.83 %        *** 4.473849e-17
 buffers\\dataview-set.js millions=1 type="Int16BE"                                                                                                  -4.64 %         ** 1.451298e-03
 buffers\\dataview-set.js millions=1 type="Int16LE"                                                                                                  -3.09 %        *** 4.174781e-04
 buffers\\dataview-set.js millions=1 type="Int32BE"                                                                                                  -3.69 %         ** 1.222692e-03
 buffers\\dataview-set.js millions=1 type="Int32LE"                                                                                                  -5.41 %        *** 6.345715e-07
 buffers\\dataview-set.js millions=1 type="Int8"                                                                                                     -6.33 %        *** 1.863074e-07
 buffers\\dataview-set.js millions=1 type="Uint16BE"                                                                                                 -7.71 %        *** 4.916663e-08
 buffers\\dataview-set.js millions=1 type="Uint16LE"                                                                                                 -9.33 %        *** 2.014695e-15
 buffers\\dataview-set.js millions=1 type="Uint32BE"                                                                                                 29.27 %        *** 6.652924e-54
 buffers\\dataview-set.js millions=1 type="Uint32LE"                                                                                                 33.39 %        *** 8.781109e-55
 buffers\\dataview-set.js millions=1 type="Uint8"                                                                                                    -4.19 %        *** 2.561106e-04
buffer-swap.js with --set n=1e6
                                                                            improvement confidence      p.value
 buffers\\buffer-swap.js n=1000000 len=1024 method="swap16" aligned="false"      0.36 %        *** 6.076393e-18
 buffers\\buffer-swap.js n=1000000 len=1024 method="swap16" aligned="true"       1.10 %        *** 1.359542e-22
 buffers\\buffer-swap.js n=1000000 len=1024 method="swap32" aligned="false"      0.07 %            1.796922e-01
 buffers\\buffer-swap.js n=1000000 len=1024 method="swap32" aligned="true"       0.22 %          * 1.744881e-02
 buffers\\buffer-swap.js n=1000000 len=1024 method="swap64" aligned="false"      0.24 %        *** 1.566726e-07
 buffers\\buffer-swap.js n=1000000 len=1024 method="swap64" aligned="true"      -0.04 %            7.858086e-01
 buffers\\buffer-swap.js n=1000000 len=128 method="swap16" aligned="false"       1.96 %        *** 2.119761e-08
 buffers\\buffer-swap.js n=1000000 len=128 method="swap16" aligned="true"        3.60 %        *** 8.102858e-24
 buffers\\buffer-swap.js n=1000000 len=128 method="swap32" aligned="false"     -25.83 %        *** 2.334289e-88
 buffers\\buffer-swap.js n=1000000 len=128 method="swap32" aligned="true"      -28.18 %        *** 9.633524e-92
 buffers\\buffer-swap.js n=1000000 len=128 method="swap64" aligned="false"     -32.50 %        *** 2.203248e-71
 buffers\\buffer-swap.js n=1000000 len=128 method="swap64" aligned="true"      -29.72 %        *** 5.921971e-96
 buffers\\buffer-swap.js n=1000000 len=1536 method="swap16" aligned="false"      0.21 %        *** 2.326170e-04
 buffers\\buffer-swap.js n=1000000 len=1536 method="swap16" aligned="true"       0.92 %        *** 2.883013e-20
 buffers\\buffer-swap.js n=1000000 len=1536 method="swap32" aligned="false"      0.10 %        *** 8.005634e-06
 buffers\\buffer-swap.js n=1000000 len=1536 method="swap32" aligned="true"       0.14 %            7.896609e-02
 buffers\\buffer-swap.js n=1000000 len=1536 method="swap64" aligned="false"      0.09 %            9.037307e-02
 buffers\\buffer-swap.js n=1000000 len=1536 method="swap64" aligned="true"       0.21 %            3.514098e-01
 buffers\\buffer-swap.js n=1000000 len=2056 method="swap16" aligned="false"      0.17 %        *** 3.248787e-04
 buffers\\buffer-swap.js n=1000000 len=2056 method="swap16" aligned="true"       0.55 %        *** 1.625691e-10
 buffers\\buffer-swap.js n=1000000 len=2056 method="swap32" aligned="false"      0.02 %            1.648908e-01
 buffers\\buffer-swap.js n=1000000 len=2056 method="swap32" aligned="true"       0.13 %          * 3.592004e-02
 buffers\\buffer-swap.js n=1000000 len=2056 method="swap64" aligned="false"     -0.08 %            1.680445e-01
 buffers\\buffer-swap.js n=1000000 len=2056 method="swap64" aligned="true"       0.13 %            8.412957e-02
 buffers\\buffer-swap.js n=1000000 len=256 method="swap16" aligned="false"       1.14 %        *** 2.298617e-15
 buffers\\buffer-swap.js n=1000000 len=256 method="swap16" aligned="true"        2.35 %        *** 8.848386e-23
 buffers\\buffer-swap.js n=1000000 len=256 method="swap32" aligned="false"       0.51 %          * 2.855728e-02
 buffers\\buffer-swap.js n=1000000 len=256 method="swap32" aligned="true"        0.31 %          * 4.837458e-02
 buffers\\buffer-swap.js n=1000000 len=256 method="swap64" aligned="false"       0.70 %        *** 1.187119e-10
 buffers\\buffer-swap.js n=1000000 len=256 method="swap64" aligned="true"        0.03 %            8.377633e-01
 buffers\\buffer-swap.js n=1000000 len=4096 method="swap16" aligned="false"      0.03 %            2.168347e-01
 buffers\\buffer-swap.js n=1000000 len=4096 method="swap16" aligned="true"       0.27 %        *** 5.990335e-08
 buffers\\buffer-swap.js n=1000000 len=4096 method="swap32" aligned="false"      0.03 %            3.267018e-01
 buffers\\buffer-swap.js n=1000000 len=4096 method="swap32" aligned="true"      -0.05 %            7.015377e-01
 buffers\\buffer-swap.js n=1000000 len=4096 method="swap64" aligned="false"     -0.23 %            1.504769e-01
 buffers\\buffer-swap.js n=1000000 len=4096 method="swap64" aligned="true"      -0.18 %            7.870197e-02
 buffers\\buffer-swap.js n=1000000 len=512 method="swap16" aligned="false"       0.57 %        *** 4.245723e-15
 buffers\\buffer-swap.js n=1000000 len=512 method="swap16" aligned="true"        1.80 %        *** 3.992138e-20
 buffers\\buffer-swap.js n=1000000 len=512 method="swap32" aligned="false"       0.35 %        *** 6.259493e-09
 buffers\\buffer-swap.js n=1000000 len=512 method="swap32" aligned="true"        0.42 %         ** 1.212643e-03
 buffers\\buffer-swap.js n=1000000 len=512 method="swap64" aligned="false"       0.52 %        *** 2.336598e-16
 buffers\\buffer-swap.js n=1000000 len=512 method="swap64" aligned="true"       -0.04 %            7.897691e-01
 buffers\\buffer-swap.js n=1000000 len=64 method="swap16" aligned="false"      -11.63 %        *** 1.715831e-70
 buffers\\buffer-swap.js n=1000000 len=64 method="swap16" aligned="true"       -11.28 %        *** 2.934296e-46
 buffers\\buffer-swap.js n=1000000 len=64 method="swap32" aligned="false"      -22.73 %        *** 6.453671e-79
 buffers\\buffer-swap.js n=1000000 len=64 method="swap32" aligned="true"       -23.37 %        *** 3.179763e-71
 buffers\\buffer-swap.js n=1000000 len=64 method="swap64" aligned="false"      -26.91 %        *** 1.133643e-31
 buffers\\buffer-swap.js n=1000000 len=64 method="swap64" aligned="true"       -24.71 %        *** 1.203672e-29
 buffers\\buffer-swap.js n=1000000 len=768 method="swap16" aligned="false"       0.38 %        *** 5.071203e-12
 buffers\\buffer-swap.js n=1000000 len=768 method="swap16" aligned="true"        1.18 %        *** 2.312994e-23
 buffers\\buffer-swap.js n=1000000 len=768 method="swap32" aligned="false"       0.17 %         ** 2.755085e-03
 buffers\\buffer-swap.js n=1000000 len=768 method="swap32" aligned="true"        0.13 %            3.430058e-01
 buffers\\buffer-swap.js n=1000000 len=768 method="swap64" aligned="false"       0.44 %        *** 4.743284e-04
 buffers\\buffer-swap.js n=1000000 len=768 method="swap64" aligned="true"       -0.03 %            8.388090e-01
 buffers\\buffer-swap.js n=1000000 len=8 method="swap16" aligned="false"         6.06 %        *** 2.951182e-30
 buffers\\buffer-swap.js n=1000000 len=8 method="swap16" aligned="true"          5.74 %        *** 3.316930e-21
 buffers\\buffer-swap.js n=1000000 len=8 method="swap32" aligned="false"         3.50 %        *** 1.244331e-22
 buffers\\buffer-swap.js n=1000000 len=8 method="swap32" aligned="true"          1.72 %        *** 1.879290e-11
 buffers\\buffer-swap.js n=1000000 len=8 method="swap64" aligned="false"         0.68 %          * 3.477764e-02
 buffers\\buffer-swap.js n=1000000 len=8 method="swap64" aligned="true"          0.10 %            8.185927e-01
 buffers\\buffer-swap.js n=1000000 len=8192 method="swap16" aligned="false"      0.02 %            1.425613e-01
 buffers\\buffer-swap.js n=1000000 len=8192 method="swap16" aligned="true"       0.18 %        *** 1.916646e-08
 buffers\\buffer-swap.js n=1000000 len=8192 method="swap32" aligned="false"     -0.02 %            2.420096e-01
 buffers\\buffer-swap.js n=1000000 len=8192 method="swap32" aligned="true"       0.11 %          * 2.388254e-02
 buffers\\buffer-swap.js n=1000000 len=8192 method="swap64" aligned="false"     -0.17 %         ** 3.838764e-03
 buffers\\buffer-swap.js n=1000000 len=8192 method="swap64" aligned="true"       0.02 %            6.347701e-01
child_process
                                                                                  improvement confidence      p.value
 child_process\\child-process-exec-stdout.js dur=5 len=1024                           -0.90 %            4.373815e-01
 child_process\\child-process-exec-stdout.js dur=5 len=256                             0.23 %            8.935467e-01
 child_process\\child-process-exec-stdout.js dur=5 len=4096                            0.62 %            6.591330e-01
 child_process\\child-process-exec-stdout.js dur=5 len=64                             -1.87 %            3.482599e-01
 child_process\\child-process-params.js params=1 methodName="exec" n=1000             -4.63 %        *** 5.123714e-11
 child_process\\child-process-params.js params=1 methodName="execFile" n=1000         -3.92 %        *** 2.644723e-12
 child_process\\child-process-params.js params=1 methodName="execFileSync" n=1000     -0.28 %            7.107140e-01
 child_process\\child-process-params.js params=1 methodName="execSync" n=1000         -0.21 %            4.051633e-01
 child_process\\child-process-params.js params=1 methodName="spawn" n=1000            -4.01 %        *** 1.536730e-14
 child_process\\child-process-params.js params=1 methodName="spawnSync" n=1000        -0.22 %            7.796821e-01
 child_process\\child-process-params.js params=2 methodName="exec" n=1000             -4.42 %        *** 5.623094e-16
 child_process\\child-process-params.js params=2 methodName="execFile" n=1000         -3.40 %        *** 1.986012e-09
 child_process\\child-process-params.js params=2 methodName="execFileSync" n=1000      0.07 %            9.104965e-01
 child_process\\child-process-params.js params=2 methodName="execSync" n=1000         -0.09 %            4.823520e-01
 child_process\\child-process-params.js params=2 methodName="spawn" n=1000            -3.98 %        *** 7.050357e-13
 child_process\\child-process-params.js params=2 methodName="spawnSync" n=1000         1.04 %            2.596032e-01
 child_process\\child-process-params.js params=3 methodName="exec" n=1000             -5.15 %        *** 4.912272e-15
 child_process\\child-process-params.js params=3 methodName="execFile" n=1000         -4.78 %        *** 2.814372e-17
 child_process\\child-process-params.js params=3 methodName="execFileSync" n=1000      0.06 %            9.181210e-01
 child_process\\child-process-params.js params=3 methodName="spawn" n=1000            -3.86 %        *** 1.507486e-10
 child_process\\child-process-params.js params=3 methodName="spawnSync" n=1000         1.02 %            2.644717e-01
 child_process\\child-process-params.js params=4 methodName="execFile" n=1000         -3.90 %        *** 7.927832e-17
 child_process\\child-process-read-ipc.js dur=5 len=1024                              -0.02 %            9.396622e-01
 child_process\\child-process-read-ipc.js dur=5 len=1048576                            1.03 %          * 3.282735e-02
 child_process\\child-process-read-ipc.js dur=5 len=16384                             -0.27 %        *** 5.423084e-04
 child_process\\child-process-read-ipc.js dur=5 len=16777216                           0.26 %            2.500390e-01
 child_process\\child-process-read-ipc.js dur=5 len=256                               -0.70 %        *** 7.789173e-04
 child_process\\child-process-read-ipc.js dur=5 len=4096                              -0.21 %            9.370554e-02
 child_process\\child-process-read-ipc.js dur=5 len=64                                -0.68 %         ** 2.257675e-03
 child_process\\child-process-read-ipc.js dur=5 len=65536                              0.91 %        *** 3.971267e-04
 child_process\\child-process-read.js dur=5 len=1024                                   0.83 %         ** 1.021766e-03
 child_process\\child-process-read.js dur=5 len=256                                   -1.70 %            4.431098e-01
 child_process\\child-process-read.js dur=5 len=4096                                  -0.54 %            5.921539e-01
 child_process\\child-process-read.js dur=5 len=64                                     0.84 %        *** 6.748565e-05
 child_process\\spawn-echo.js thousands=1                                             -0.68 %            3.306275e-01
domain
                                            improvement confidence    p.value
 domain\\domain-fn-args.js n=10 arguments=0     -5.22 %            0.13903860
 domain\\domain-fn-args.js n=10 arguments=1     -2.80 %            0.12515340
 domain\\domain-fn-args.js n=10 arguments=2     -4.77 %          * 0.01492218
 domain\\domain-fn-args.js n=10 arguments=3     -4.34 %         ** 0.00841915

es
                                                                                       improvement confidence      p.value
 es\\defaultparams-bench.js millions=100 method="withdefaults"                            186.76 %        *** 2.057441e-50
 es\\defaultparams-bench.js millions=100 method="withoutdefaults"                         187.46 %        *** 1.148147e-66
 es\\destructuring-bench.js millions=100 method="destructure"                              58.76 %        *** 3.980102e-67
 es\\destructuring-bench.js millions=100 method="swap"                                    -73.19 %        *** 2.054673e-67
 es\\destructuring-object-bench.js millions=100 method="destructureObject"                 45.92 %        *** 3.253867e-84
 es\\destructuring-object-bench.js millions=100 method="normal"                            -2.25 %        *** 1.426450e-24
 es\\map-bench.js millions=1 method="fakeMap"                                              -0.54 %            8.154590e-02
 es\\map-bench.js millions=1 method="map"                                                  -1.98 %        *** 4.223953e-12
 es\\map-bench.js millions=1 method="nullProtoObject"                                      -9.73 %        *** 2.357791e-35
 es\\map-bench.js millions=1 method="object"                                               -6.76 %        *** 2.362004e-27
 es\\restparams-bench.js millions=100 method="arguments"                                   -9.20 %        *** 7.682132e-16
 es\\restparams-bench.js millions=100 method="copy"                                       -23.35 %        *** 7.057908e-56
 es\\restparams-bench.js millions=100 method="rest"                                       303.00 %        *** 8.692510e-87
 es\\spread-bench.js millions=5 rest=0 context="context" count=10 method="apply"            6.25 %        *** 2.747691e-37
 es\\spread-bench.js millions=5 rest=0 context="context" count=10 method="call-spread"      4.22 %        *** 1.238224e-33
 es\\spread-bench.js millions=5 rest=0 context="context" count=10 method="spread"           5.66 %        *** 1.230090e-19
 es\\spread-bench.js millions=5 rest=0 context="context" count=20 method="apply"            4.22 %        *** 9.667833e-21
 es\\spread-bench.js millions=5 rest=0 context="context" count=20 method="call-spread"      3.61 %        *** 2.641823e-15
 es\\spread-bench.js millions=5 rest=0 context="context" count=20 method="spread"           3.95 %        *** 1.124106e-25
 es\\spread-bench.js millions=5 rest=0 context="context" count=5 method="apply"             7.54 %        *** 2.061487e-11
 es\\spread-bench.js millions=5 rest=0 context="context" count=5 method="call-spread"       7.91 %        *** 2.713476e-19
 es\\spread-bench.js millions=5 rest=0 context="context" count=5 method="spread"            8.16 %        *** 2.198573e-14
 es\\spread-bench.js millions=5 rest=0 context="null" count=10 method="apply"               5.37 %        *** 6.674710e-23
 es\\spread-bench.js millions=5 rest=0 context="null" count=10 method="call-spread"         4.07 %        *** 5.798976e-38
 es\\spread-bench.js millions=5 rest=0 context="null" count=10 method="spread"              6.06 %        *** 2.881326e-22
 es\\spread-bench.js millions=5 rest=0 context="null" count=20 method="apply"               4.40 %        *** 9.221114e-39
 es\\spread-bench.js millions=5 rest=0 context="null" count=20 method="call-spread"         3.29 %        *** 1.949925e-19
 es\\spread-bench.js millions=5 rest=0 context="null" count=20 method="spread"              4.23 %        *** 6.953280e-25
 es\\spread-bench.js millions=5 rest=0 context="null" count=5 method="apply"                8.92 %        *** 5.443435e-15
 es\\spread-bench.js millions=5 rest=0 context="null" count=5 method="call-spread"          6.58 %        *** 1.196305e-14
 es\\spread-bench.js millions=5 rest=0 context="null" count=5 method="spread"               7.35 %        *** 1.602696e-12
 es\\spread-bench.js millions=5 rest=1 context="context" count=10 method="apply"           40.98 %        *** 1.500746e-56
 es\\spread-bench.js millions=5 rest=1 context="context" count=10 method="call-spread"     27.83 %        *** 2.708692e-84
 es\\spread-bench.js millions=5 rest=1 context="context" count=10 method="spread"          36.68 %        *** 9.473065e-70
 es\\spread-bench.js millions=5 rest=1 context="context" count=20 method="apply"           31.29 %        *** 9.726107e-80
 es\\spread-bench.js millions=5 rest=1 context="context" count=20 method="call-spread"     19.57 %        *** 2.758893e-73
 es\\spread-bench.js millions=5 rest=1 context="context" count=20 method="spread"          26.39 %        *** 8.597381e-55
 es\\spread-bench.js millions=5 rest=1 context="context" count=5 method="apply"            53.11 %        *** 4.678357e-80
 es\\spread-bench.js millions=5 rest=1 context="context" count=5 method="call-spread"      38.85 %        *** 5.448252e-79
 es\\spread-bench.js millions=5 rest=1 context="context" count=5 method="spread"           48.35 %        *** 1.633168e-59
 es\\spread-bench.js millions=5 rest=1 context="null" count=10 method="apply"              40.47 %        *** 2.991328e-42
 es\\spread-bench.js millions=5 rest=1 context="null" count=10 method="call-spread"        27.92 %        *** 1.178384e-67
 es\\spread-bench.js millions=5 rest=1 context="null" count=10 method="spread"             38.78 %        *** 2.025877e-51
 es\\spread-bench.js millions=5 rest=1 context="null" count=20 method="apply"              31.04 %        *** 1.404906e-83
 es\\spread-bench.js millions=5 rest=1 context="null" count=20 method="call-spread"        19.52 %        *** 2.329415e-75
 es\\spread-bench.js millions=5 rest=1 context="null" count=20 method="spread"             27.37 %        *** 1.218005e-65
 es\\spread-bench.js millions=5 rest=1 context="null" count=5 method="apply"               51.95 %        *** 2.989997e-47
 es\\spread-bench.js millions=5 rest=1 context="null" count=5 method="call-spread"         38.73 %        *** 9.373389e-50
 es\\spread-bench.js millions=5 rest=1 context="null" count=5 method="spread"              51.66 %        *** 3.193677e-48
new es/foreach-bench.js
                                                            improvement confidence      p.value
 es\\foreach-bench.js millions=5 count=10 method="for-in"        1.36 %        *** 1.074313e-05
 es\\foreach-bench.js millions=5 count=10 method="for-of"        0.70 %        *** 4.396489e-04
 es\\foreach-bench.js millions=5 count=10 method="for"           5.31 %        *** 2.817524e-26
 es\\foreach-bench.js millions=5 count=10 method="forEach"       6.71 %        *** 6.956617e-23
 es\\foreach-bench.js millions=5 count=100 method="for-in"      -2.48 %        *** 1.222102e-12
 es\\foreach-bench.js millions=5 count=100 method="for-of"       1.85 %        *** 1.263492e-11
 es\\foreach-bench.js millions=5 count=100 method="for"         21.90 %        *** 1.471960e-44
 es\\foreach-bench.js millions=5 count=100 method="forEach"     -5.37 %        *** 6.729070e-24
 es\\foreach-bench.js millions=5 count=20 method="for-in"       -1.60 %        *** 1.931362e-07
 es\\foreach-bench.js millions=5 count=20 method="for-of"        1.13 %        *** 1.624073e-06
 es\\foreach-bench.js millions=5 count=20 method="for"          12.95 %        *** 7.255962e-58
 es\\foreach-bench.js millions=5 count=20 method="forEach"       0.84 %        *** 6.306995e-04
 es\\foreach-bench.js millions=5 count=5 method="for-in"         2.90 %        *** 2.485570e-13
 es\\foreach-bench.js millions=5 count=5 method="for-of"        -0.14 %            5.990183e-01
 es\\foreach-bench.js millions=5 count=5 method="for"           -3.16 %        *** 1.395389e-07
 es\\foreach-bench.js millions=5 count=5 method="forEach"       17.81 %        *** 5.034140e-57
events
                                                      improvement confidence      p.value
 events\\ee-add-remove.js n=250000                       -45.96 %        *** 9.772078e-70
 events\\ee-emit-multi-args.js n=2000000                 -37.43 %        *** 1.653690e-47
 events\\ee-emit.js n=2000000                            -42.67 %        *** 1.317334e-47
 events\\ee-listener-count-on-prototype.js n=50000000    120.82 %        *** 3.881793e-63
 events\\ee-listeners-many.js n=5000000                   22.51 %        *** 7.230026e-65
 events\\ee-listeners.js n=5000000                        12.49 %        *** 5.530568e-39
 events\\ee-once.js n=20000000                           -17.92 %        *** 3.652062e-28
http

The most long http benchmarks was a little shortened: check_is_http_token.js was launched with set n=5e7 instead of 5e8 and simple.js was launched with --runs 15 instead of 30.

                                                                                                       improvement confidence       p.value
 http\\bench-parser.js n=100000 fields=16                                                                  -4.37 %        ***  3.569241e-28
 http\\bench-parser.js n=100000 fields=32                                                                  -3.46 %          *  1.656215e-02
 http\\bench-parser.js n=100000 fields=4                                                                  -11.25 %        ***  1.023311e-42
 http\\bench-parser.js n=100000 fields=8                                                                   -7.27 %        ***  7.002934e-31
 http\\check_invalid_header_char.js n=500000000 key="\177"                                                -88.89 %        ***  1.087074e-76
 http\\check_invalid_header_char.js n=500000000 key=""                                                    -78.56 %        ***  1.307016e-82
 http\\check_invalid_header_char.js n=500000000 key="\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tFoo bar baz"           -38.94 %        *** 1.564267e-107
 http\\check_invalid_header_char.js n=500000000 key="1"                                                   -82.84 %        ***  2.208471e-91
 http\\check_invalid_header_char.js n=500000000 key="20091"                                               -80.15 %        *** 3.797239e-116
 http\\check_invalid_header_char.js n=500000000 key="close"                                               -80.14 %        *** 1.631525e-142
 http\\check_invalid_header_char.js n=500000000 key="en-US"                                               -80.17 %        ***  3.793769e-80
 http\\check_invalid_header_char.js n=500000000 key="foo\\nbar"                                           -91.21 %        *** 7.622870e-154
 http\\check_invalid_header_char.js n=500000000 key="gzip"                                                -86.58 %        ***  7.193320e-79
 http\\check_invalid_header_char.js n=500000000 key="Here is a value..."                                  -27.15 %        ***  6.119973e-45
 http\\check_invalid_header_char.js n=500000000 key="keep-alive"                                          -54.69 %        ***  2.247444e-66
 http\\check_invalid_header_char.js n=500000000 key="private"                                             -66.71 %        ***  2.391885e-86
 http\\check_invalid_header_char.js n=500000000 key="SAMEORIGIN"                                          -54.73 %        ***  4.635725e-76
 http\\check_invalid_header_char.js n=500000000 key="Sat, 07 May 2016 16:54:48 GMT"                       -33.52 %        ***  1.358258e-82
 http\\check_invalid_header_char.js n=500000000 key="text/html; charset=utf-8"                            -36.93 %        ***  1.107974e-47
 http\\check_invalid_header_char.js n=500000000 key="text/plain"                                          -54.66 %        ***  8.837458e-56
 http\\check_invalid_header_char.js n=500000000 key="中文呢"                                           -34.59 %        ***  3.093828e-52
 http\\check_is_http_token.js n=50000000 key="((((())))"                                                  -80.63 %        ***  2.506936e-60
 http\\check_is_http_token.js n=50000000 key=":"                                                          -80.65 %        ***  1.934004e-87
 http\\check_is_http_token.js n=50000000 key=":alternate-protocol"                                        -84.86 %        ***  1.537442e-60
 http\\check_is_http_token.js n=50000000 key="@@"                                                         -80.56 %        ***  3.816927e-52
 http\\check_is_http_token.js n=50000000 key="Accept-Ranges"                                              -50.52 %        ***  1.374950e-83
 http\\check_is_http_token.js n=50000000 key="alt-svc"                                                    -59.64 %        ***  1.257471e-71
 http\\check_is_http_token.js n=50000000 key="alternate-protocol"                                         -45.46 %        ***  5.911024e-63
 http\\check_is_http_token.js n=50000000 key="alternate-protocol:"                                        -41.62 %        ***  2.682686e-53
 http\\check_is_http_token.js n=50000000 key="Cache-Control"                                              -50.74 %        ***  1.960734e-90
 http\\check_is_http_token.js n=50000000 key="Connection"                                                 -47.90 %        ***  8.006204e-63
 http\\check_is_http_token.js n=50000000 key="Content-Encoding"                                           -47.17 %        ***  5.423750e-83
 http\\check_is_http_token.js n=50000000 key="content-length"                                             -49.73 %        ***  1.641712e-59
 http\\check_is_http_token.js n=50000000 key="Content-Location"                                           -47.06 %        ***  6.244804e-71
 http\\check_is_http_token.js n=50000000 key="content-type"                                               -43.33 %        ***  7.090822e-71
 http\\check_is_http_token.js n=50000000 key="Content-Type"                                               -43.09 %        ***  2.151129e-81
 http\\check_is_http_token.js n=50000000 key="date"                                                       -81.51 %        ***  1.778910e-73
 http\\check_is_http_token.js n=50000000 key="ETag"                                                       -81.50 %        ***  1.212925e-76
 http\\check_is_http_token.js n=50000000 key="Expires"                                                    -59.18 %        ***  1.485951e-74
 http\\check_is_http_token.js n=50000000 key="Keep-Alive"                                                 -48.43 %        ***  1.040756e-46
 http\\check_is_http_token.js n=50000000 key="Last-Modified"                                              -51.02 %        ***  3.781236e-60
 http\\check_is_http_token.js n=50000000 key="location"                                                   -55.80 %        ***  5.556102e-64
 http\\check_is_http_token.js n=50000000 key="server"                                                     -66.11 %        ***  1.714344e-66
 http\\check_is_http_token.js n=50000000 key="Server"                                                     -66.24 %        ***  1.778495e-73
 http\\check_is_http_token.js n=50000000 key="status"                                                     -66.81 %        ***  1.687298e-60
 http\\check_is_http_token.js n=50000000 key="TCN"                                                        -79.83 %        ***  1.301879e-98
 http\\check_is_http_token.js n=50000000 key="Transfer-Encoding"                                          -46.97 %        ***  2.318722e-45
 http\\check_is_http_token.js n=50000000 key="Vary"                                                       -81.36 %        ***  4.002107e-62
 http\\check_is_http_token.js n=50000000 key="version"                                                    -59.34 %        ***  6.095173e-76
 http\\check_is_http_token.js n=50000000 key="x-frame-options"                                            -48.38 %        ***  2.059074e-70
 http\\check_is_http_token.js n=50000000 key="x-xss-protection"                                           -47.35 %        ***  5.648471e-81
 http\\check_is_http_token.js n=50000000 key="中文呢"                                                  -19.31 %        ***  2.692170e-52
 http\\chunked.js c=100 size=1 num=1 benchmarker="autocannon"                                              -3.55 %        ***  1.177415e-18
 http\\chunked.js c=100 size=1 num=16 benchmarker="autocannon"                                             -3.60 %        ***  1.004363e-11
 http\\chunked.js c=100 size=1 num=4 benchmarker="autocannon"                                              -3.92 %        ***  1.605936e-16
 http\\chunked.js c=100 size=1 num=8 benchmarker="autocannon"                                              -2.09 %        ***  2.829203e-06
 http\\chunked.js c=100 size=256 num=1 benchmarker="autocannon"                                            -3.04 %        ***  1.866999e-10
 http\\chunked.js c=100 size=256 num=16 benchmarker="autocannon"                                           -3.21 %        ***  1.381201e-09
 http\\chunked.js c=100 size=256 num=4 benchmarker="autocannon"                                            -3.28 %        ***  2.463133e-12
 http\\chunked.js c=100 size=256 num=8 benchmarker="autocannon"                                            -1.72 %        ***  1.776643e-05
 http\\chunked.js c=100 size=64 num=1 benchmarker="autocannon"                                             -3.03 %        ***  4.151764e-12
 http\\chunked.js c=100 size=64 num=16 benchmarker="autocannon"                                            -2.08 %        ***  4.864422e-06
 http\\chunked.js c=100 size=64 num=4 benchmarker="autocannon"                                             -2.22 %        ***  3.388990e-08
 http\\chunked.js c=100 size=64 num=8 benchmarker="autocannon"                                             -2.72 %        ***  2.561185e-07
 http\\client-request-body.js method="end" bytes=1024 type="asc" dur=5                                     -7.01 %        ***  4.134339e-31
 http\\client-request-body.js method="end" bytes=1024 type="buf" dur=5                                     -7.91 %        ***  3.154750e-34
 http\\client-request-body.js method="end" bytes=1024 type="utf" dur=5                                     -6.49 %        ***  1.395121e-24
 http\\client-request-body.js method="end" bytes=256 type="asc" dur=5                                      -6.90 %        ***  2.348893e-33
 http\\client-request-body.js method="end" bytes=256 type="buf" dur=5                                      -7.20 %        ***  8.542280e-32
 http\\client-request-body.js method="end" bytes=256 type="utf" dur=5                                      -7.13 %        ***  9.335939e-36
 http\\client-request-body.js method="end" bytes=32 type="asc" dur=5                                       -7.08 %        ***  7.227582e-30
 http\\client-request-body.js method="end" bytes=32 type="buf" dur=5                                       -7.25 %        ***  6.532999e-35
 http\\client-request-body.js method="end" bytes=32 type="utf" dur=5                                       -7.53 %        ***  5.631636e-34
 http\\client-request-body.js method="write" bytes=1024 type="asc" dur=5                                   -6.92 %        ***  1.649107e-31
 http\\client-request-body.js method="write" bytes=1024 type="buf" dur=5                                   -7.92 %        ***  1.222351e-34
 http\\client-request-body.js method="write" bytes=1024 type="utf" dur=5                                   -7.25 %        ***  2.691796e-33
 http\\client-request-body.js method="write" bytes=256 type="asc" dur=5                                    -7.01 %        ***  3.714085e-32
 http\\client-request-body.js method="write" bytes=256 type="buf" dur=5                                    -8.07 %        ***  9.361541e-33
 http\\client-request-body.js method="write" bytes=256 type="utf" dur=5                                    -7.38 %        ***  2.399511e-30
 http\\client-request-body.js method="write" bytes=32 type="asc" dur=5                                     -7.06 %        ***  2.493660e-27
 http\\client-request-body.js method="write" bytes=32 type="buf" dur=5                                     -8.08 %        ***  1.307705e-30
 http\\client-request-body.js method="write" bytes=32 type="utf" dur=5                                     -7.48 %        ***  3.392244e-28
 http\\cluster.js c=50 length=1024 type="buffer" benchmarker="autocannon"                                  -4.78 %        ***  3.117193e-07
 http\\cluster.js c=50 length=1024 type="bytes" benchmarker="autocannon"                                   -6.35 %        ***  1.130824e-12
 http\\cluster.js c=50 length=102400 type="buffer" benchmarker="autocannon"                                -5.82 %        ***  1.821486e-07
 http\\cluster.js c=50 length=102400 type="bytes" benchmarker="autocannon"                                -11.54 %        ***  3.221650e-29
 http\\cluster.js c=50 length=4 type="buffer" benchmarker="autocannon"                                     -4.55 %        ***  2.637825e-07
 http\\cluster.js c=50 length=4 type="bytes" benchmarker="autocannon"                                      -6.25 %        ***  3.777872e-12
 http\\cluster.js c=500 length=1024 type="buffer" benchmarker="autocannon"                                 -5.03 %        ***  1.108270e-10
 http\\cluster.js c=500 length=1024 type="bytes" benchmarker="autocannon"                                  -6.29 %        ***  1.814635e-13
 http\\cluster.js c=500 length=102400 type="buffer" benchmarker="autocannon"                               -5.29 %        ***  4.350849e-05
 http\\cluster.js c=500 length=102400 type="bytes" benchmarker="autocannon"                                -8.68 %        ***  1.560928e-10
 http\\cluster.js c=500 length=4 type="buffer" benchmarker="autocannon"                                    -5.13 %        ***  2.788204e-14
 http\\cluster.js c=500 length=4 type="bytes" benchmarker="autocannon"                                     -5.64 %        ***  8.692756e-14
 http\\create-clientrequest.js n=1000000 pathlen=1                                                          1.76 %         **  6.565825e-03
 http\\create-clientrequest.js n=1000000 pathlen=128                                                        6.56 %        ***  6.132681e-15
 http\\create-clientrequest.js n=1000000 pathlen=16                                                        10.93 %        ***  1.240467e-23
 http\\create-clientrequest.js n=1000000 pathlen=32                                                         8.79 %        ***  5.796884e-14
 http\\create-clientrequest.js n=1000000 pathlen=64                                                         6.54 %        ***  4.556245e-22
 http\\create-clientrequest.js n=1000000 pathlen=8                                                         10.73 %        ***  3.209776e-21
 http\\end-vs-write-end.js method="end" c=100 kb=1024 type="asc" benchmarker="autocannon"                   0.75 %             5.069610e-01
 http\\end-vs-write-end.js method="end" c=100 kb=1024 type="buf" benchmarker="autocannon"                  -2.02 %         **  9.983234e-03
 http\\end-vs-write-end.js method="end" c=100 kb=1024 type="utf" benchmarker="autocannon"                   1.09 %             3.372412e-01
 http\\end-vs-write-end.js method="end" c=100 kb=128 type="asc" benchmarker="autocannon"                  -10.09 %        ***  7.552131e-18
 http\\end-vs-write-end.js method="end" c=100 kb=128 type="buf" benchmarker="autocannon"                   -1.92 %          *  3.740466e-02
 http\\end-vs-write-end.js method="end" c=100 kb=128 type="utf" benchmarker="autocannon"                   -8.95 %        ***  1.480997e-16
 http\\end-vs-write-end.js method="end" c=100 kb=256 type="asc" benchmarker="autocannon"                   -4.08 %        ***  1.377526e-06
 http\\end-vs-write-end.js method="end" c=100 kb=256 type="buf" benchmarker="autocannon"                    0.12 %             9.113114e-01
 http\\end-vs-write-end.js method="end" c=100 kb=256 type="utf" benchmarker="autocannon"                   -3.19 %        ***  1.029744e-05
 http\\end-vs-write-end.js method="end" c=100 kb=64 type="asc" benchmarker="autocannon"                   -16.43 %        ***  3.308102e-21
 http\\end-vs-write-end.js method="end" c=100 kb=64 type="buf" benchmarker="autocannon"                    -1.25 %             1.566492e-01
 http\\end-vs-write-end.js method="end" c=100 kb=64 type="utf" benchmarker="autocannon"                    -8.49 %        ***  1.176542e-10
 http\\end-vs-write-end.js method="write" c=100 kb=1024 type="asc" benchmarker="autocannon"                -0.12 %             9.341455e-01
 http\\end-vs-write-end.js method="write" c=100 kb=1024 type="buf" benchmarker="autocannon"                 0.16 %             7.890450e-01
 http\\end-vs-write-end.js method="write" c=100 kb=1024 type="utf" benchmarker="autocannon"                -0.52 %             5.004981e-01
 http\\end-vs-write-end.js method="write" c=100 kb=128 type="asc" benchmarker="autocannon"                -11.05 %        ***  1.926600e-16
 http\\end-vs-write-end.js method="write" c=100 kb=128 type="buf" benchmarker="autocannon"                 -6.46 %        ***  3.579947e-08
 http\\end-vs-write-end.js method="write" c=100 kb=128 type="utf" benchmarker="autocannon"                -11.42 %        ***  8.420314e-24
 http\\end-vs-write-end.js method="write" c=100 kb=256 type="asc" benchmarker="autocannon"                 -6.61 %        ***  1.701159e-08
 http\\end-vs-write-end.js method="write" c=100 kb=256 type="buf" benchmarker="autocannon"                 -6.35 %        ***  1.870454e-07
 http\\end-vs-write-end.js method="write" c=100 kb=256 type="utf" benchmarker="autocannon"                 -5.31 %        ***  2.040191e-11
 http\\end-vs-write-end.js method="write" c=100 kb=64 type="asc" benchmarker="autocannon"                 -23.43 %        ***  1.297754e-26
 http\\end-vs-write-end.js method="write" c=100 kb=64 type="buf" benchmarker="autocannon"                  -6.51 %        ***  4.032692e-11
 http\\end-vs-write-end.js method="write" c=100 kb=64 type="utf" benchmarker="autocannon"                 -11.04 %        ***  1.206863e-19
 http\\http_server_for_chunky_client.js type="send" num=2000 len=1                                         -5.79 %        ***  8.491075e-18
 http\\http_server_for_chunky_client.js type="send" num=2000 len=128                                       -2.59 %        ***  8.357146e-14
 http\\http_server_for_chunky_client.js type="send" num=2000 len=16                                        -4.59 %        ***  1.302737e-22
 http\\http_server_for_chunky_client.js type="send" num=2000 len=32                                        -3.71 %        ***  8.800441e-16
 http\\http_server_for_chunky_client.js type="send" num=2000 len=4                                         -5.07 %        ***  6.604031e-17
 http\\http_server_for_chunky_client.js type="send" num=2000 len=64                                        -3.57 %        ***  2.493372e-14
 http\\http_server_for_chunky_client.js type="send" num=2000 len=8                                         -5.43 %        ***  6.684029e-18
 http\\http_server_for_chunky_client.js type="send" num=5 len=1                                           -10.95 %        ***  7.295982e-17
 http\\http_server_for_chunky_client.js type="send" num=5 len=128                                         -18.91 %        ***  1.691256e-28
 http\\http_server_for_chunky_client.js type="send" num=5 len=16                                          -17.17 %        ***  7.613305e-20
 http\\http_server_for_chunky_client.js type="send" num=5 len=32                                          -16.70 %        ***  9.378219e-23
 http\\http_server_for_chunky_client.js type="send" num=5 len=4                                           -20.17 %        ***  2.267978e-33
 http\\http_server_for_chunky_client.js type="send" num=5 len=64                                          -18.62 %        ***  6.457991e-23
 http\\http_server_for_chunky_client.js type="send" num=5 len=8                                           -19.49 %        ***  2.003852e-18
 http\\http_server_for_chunky_client.js type="send" num=50 len=1                                          -15.03 %        ***  1.106210e-39
 http\\http_server_for_chunky_client.js type="send" num=50 len=128                                        -12.93 %        ***  1.578896e-43
 http\\http_server_for_chunky_client.js type="send" num=50 len=16                                         -14.41 %        ***  2.370400e-40
 http\\http_server_for_chunky_client.js type="send" num=50 len=32                                         -13.41 %        ***  1.407625e-40
 http\\http_server_for_chunky_client.js type="send" num=50 len=4                                          -14.83 %        ***  1.022015e-43
 http\\http_server_for_chunky_client.js type="send" num=50 len=64                                         -13.13 %        ***  3.283492e-46
 http\\http_server_for_chunky_client.js type="send" num=50 len=8                                          -14.18 %        ***  1.020625e-41
 http\\http_server_for_chunky_client.js type="send" num=500 len=1                                          -5.87 %        ***  1.111754e-06
 http\\http_server_for_chunky_client.js type="send" num=500 len=128                                        -4.72 %        ***  4.420159e-19
 http\\http_server_for_chunky_client.js type="send" num=500 len=16                                         -5.36 %        ***  2.092015e-22
 http\\http_server_for_chunky_client.js type="send" num=500 len=32                                         -3.68 %        ***  1.404249e-13
 http\\http_server_for_chunky_client.js type="send" num=500 len=4                                          -6.57 %        ***  1.223214e-16
 http\\http_server_for_chunky_client.js type="send" num=500 len=64                                         -4.79 %        ***  2.066460e-23
 http\\http_server_for_chunky_client.js type="send" num=500 len=8                                          -4.79 %        ***  1.513417e-07
 http\\simple.js res="normal" c=50 chunks=0 length=1024 type="buffer" benchmarker="autocannon"             -4.17 %        ***  4.862845e-05
 http\\simple.js res="normal" c=50 chunks=0 length=1024 type="bytes" benchmarker="autocannon"              -8.43 %        ***  5.454468e-07
 http\\simple.js res="normal" c=50 chunks=0 length=102400 type="buffer" benchmarker="autocannon"           -4.91 %         **  3.241289e-03
 http\\simple.js res="normal" c=50 chunks=0 length=102400 type="bytes" benchmarker="autocannon"           -25.24 %        ***  7.674309e-16
 http\\simple.js res="normal" c=50 chunks=0 length=4 type="buffer" benchmarker="autocannon"                -4.59 %        ***  8.669667e-05
 http\\simple.js res="normal" c=50 chunks=0 length=4 type="bytes" benchmarker="autocannon"                 -6.32 %        ***  1.054130e-05
 http\\simple.js res="normal" c=50 chunks=1 length=1024 type="buffer" benchmarker="autocannon"             -5.06 %        ***  2.501442e-05
 http\\simple.js res="normal" c=50 chunks=1 length=1024 type="bytes" benchmarker="autocannon"              -5.65 %        ***  6.339490e-05
 http\\simple.js res="normal" c=50 chunks=1 length=102400 type="buffer" benchmarker="autocannon"           -3.28 %          *  2.691863e-02
 http\\simple.js res="normal" c=50 chunks=1 length=102400 type="bytes" benchmarker="autocannon"           -13.40 %        ***  1.355733e-16
 http\\simple.js res="normal" c=50 chunks=1 length=4 type="buffer" benchmarker="autocannon"                -4.24 %        ***  3.382373e-04
 http\\simple.js res="normal" c=50 chunks=1 length=4 type="bytes" benchmarker="autocannon"                 -4.45 %        ***  2.801222e-05
 http\\simple.js res="normal" c=50 chunks=4 length=1024 type="buffer" benchmarker="autocannon"             -4.72 %        ***  3.078187e-05
 http\\simple.js res="normal" c=50 chunks=4 length=1024 type="bytes" benchmarker="autocannon"              -3.68 %         **  3.193511e-03
 http\\simple.js res="normal" c=50 chunks=4 length=102400 type="buffer" benchmarker="autocannon"           -4.79 %         **  7.796647e-03
 http\\simple.js res="normal" c=50 chunks=4 length=102400 type="bytes" benchmarker="autocannon"            -9.21 %        ***  7.230804e-05
 http\\simple.js res="normal" c=50 chunks=4 length=4 type="buffer" benchmarker="autocannon"                -5.82 %        ***  2.674268e-05
 http\\simple.js res="normal" c=50 chunks=4 length=4 type="bytes" benchmarker="autocannon"                 -4.23 %        ***  4.396474e-04
 http\\simple.js res="normal" c=500 chunks=0 length=1024 type="buffer" benchmarker="autocannon"            -6.52 %        ***  1.124726e-07
 http\\simple.js res="normal" c=500 chunks=0 length=1024 type="bytes" benchmarker="autocannon"             -8.37 %        ***  7.851841e-08
 http\\simple.js res="normal" c=500 chunks=0 length=102400 type="buffer" benchmarker="autocannon"          -3.67 %          *  3.904036e-02
 http\\simple.js res="normal" c=500 chunks=0 length=102400 type="bytes" benchmarker="autocannon"          -28.70 %        ***  1.658213e-18
 http\\simple.js res="normal" c=500 chunks=0 length=4 type="buffer" benchmarker="autocannon"               -5.55 %        ***  1.105788e-06
 http\\simple.js res="normal" c=500 chunks=0 length=4 type="bytes" benchmarker="autocannon"                -3.46 %         **  3.664429e-03
 http\\simple.js res="normal" c=500 chunks=1 length=1024 type="buffer" benchmarker="autocannon"            -5.76 %        ***  2.093527e-06
 http\\simple.js res="normal" c=500 chunks=1 length=1024 type="bytes" benchmarker="autocannon"             -4.83 %        ***  5.687172e-04
 http\\simple.js res="normal" c=500 chunks=1 length=102400 type="buffer" benchmarker="autocannon"          -3.93 %          *  1.443829e-02
 http\\simple.js res="normal" c=500 chunks=1 length=102400 type="bytes" benchmarker="autocannon"          -15.57 %        ***  2.753559e-17
 http\\simple.js res="normal" c=500 chunks=1 length=4 type="buffer" benchmarker="autocannon"               -6.46 %        ***  7.633596e-07
 http\\simple.js res="normal" c=500 chunks=1 length=4 type="bytes" benchmarker="autocannon"                -4.28 %        ***  6.074356e-04
 http\\simple.js res="normal" c=500 chunks=4 length=1024 type="buffer" benchmarker="autocannon"            -4.10 %        ***  3.614595e-04
 http\\simple.js res="normal" c=500 chunks=4 length=1024 type="bytes" benchmarker="autocannon"             -3.00 %         **  6.119423e-03
 http\\simple.js res="normal" c=500 chunks=4 length=102400 type="buffer" benchmarker="autocannon"          -5.17 %         **  7.153175e-03
 http\\simple.js res="normal" c=500 chunks=4 length=102400 type="bytes" benchmarker="autocannon"           -5.45 %          *  1.902785e-02
 http\\simple.js res="normal" c=500 chunks=4 length=4 type="buffer" benchmarker="autocannon"               -6.04 %        ***  1.989949e-08
 http\\simple.js res="normal" c=500 chunks=4 length=4 type="bytes" benchmarker="autocannon"                -2.89 %          *  2.727371e-02
 http\\simple.js res="setHeader" c=50 chunks=0 length=1024 type="buffer" benchmarker="autocannon"          -5.84 %        ***  3.927146e-09
 http\\simple.js res="setHeader" c=50 chunks=0 length=1024 type="bytes" benchmarker="autocannon"           -8.28 %        ***  1.050204e-07
 http\\simple.js res="setHeader" c=50 chunks=0 length=102400 type="buffer" benchmarker="autocannon"        -4.73 %         **  3.158161e-03
 http\\simple.js res="setHeader" c=50 chunks=0 length=102400 type="bytes" benchmarker="autocannon"        -10.73 %        ***  5.309183e-15
 http\\simple.js res="setHeader" c=50 chunks=0 length=4 type="buffer" benchmarker="autocannon"             -6.36 %        ***  1.812964e-09
 http\\simple.js res="setHeader" c=50 chunks=0 length=4 type="bytes" benchmarker="autocannon"              -5.88 %        ***  3.057814e-04
 http\\simple.js res="setHeader" c=50 chunks=1 length=1024 type="buffer" benchmarker="autocannon"          -5.58 %        ***  1.925861e-08
 http\\simple.js res="setHeader" c=50 chunks=1 length=1024 type="bytes" benchmarker="autocannon"           -6.23 %        ***  2.869951e-06
 http\\simple.js res="setHeader" c=50 chunks=1 length=102400 type="buffer" benchmarker="autocannon"        -5.82 %         **  1.198956e-03
 http\\simple.js res="setHeader" c=50 chunks=1 length=102400 type="bytes" benchmarker="autocannon"        -10.41 %        ***  1.290550e-13
 http\\simple.js res="setHeader" c=50 chunks=1 length=4 type="buffer" benchmarker="autocannon"             -6.35 %        ***  4.469679e-08
 http\\simple.js res="setHeader" c=50 chunks=1 length=4 type="bytes" benchmarker="autocannon"              -4.81 %        ***  7.020090e-06
 http\\simple.js res="setHeader" c=50 chunks=4 length=1024 type="buffer" benchmarker="autocannon"          -5.62 %        ***  4.475218e-06
 http\\simple.js res="setHeader" c=50 chunks=4 length=1024 type="bytes" benchmarker="autocannon"           -3.18 %         **  2.280484e-03
 http\\simple.js res="setHeader" c=50 chunks=4 length=102400 type="buffer" benchmarker="autocannon"        -5.60 %         **  2.814704e-03
 http\\simple.js res="setHeader" c=50 chunks=4 length=102400 type="bytes" benchmarker="autocannon"         -6.29 %         **  3.563679e-03
 http\\simple.js res="setHeader" c=50 chunks=4 length=4 type="buffer" benchmarker="autocannon"             -6.56 %        ***  1.448702e-08
 http\\simple.js res="setHeader" c=50 chunks=4 length=4 type="bytes" benchmarker="autocannon"              -2.69 %          *  1.272579e-02
 http\\simple.js res="setHeader" c=500 chunks=0 length=1024 type="buffer" benchmarker="autocannon"         -5.44 %        ***  1.667645e-05
 http\\simple.js res="setHeader" c=500 chunks=0 length=1024 type="bytes" benchmarker="autocannon"          -8.81 %        ***  9.475921e-08
 http\\simple.js res="setHeader" c=500 chunks=0 length=102400 type="buffer" benchmarker="autocannon"       -2.75 %             6.818363e-02
 http\\simple.js res="setHeader" c=500 chunks=0 length=102400 type="bytes" benchmarker="autocannon"       -10.21 %        ***  2.970999e-13
 http\\simple.js res="setHeader" c=500 chunks=0 length=4 type="buffer" benchmarker="autocannon"            -4.93 %        ***  4.878756e-04
 http\\simple.js res="setHeader" c=500 chunks=0 length=4 type="bytes" benchmarker="autocannon"             -8.33 %        ***  4.536478e-09
 http\\simple.js res="setHeader" c=500 chunks=1 length=1024 type="buffer" benchmarker="autocannon"         -5.24 %        ***  1.016925e-04
 http\\simple.js res="setHeader" c=500 chunks=1 length=1024 type="bytes" benchmarker="autocannon"          -6.63 %        ***  9.762973e-05
 http\\simple.js res="setHeader" c=500 chunks=1 length=102400 type="buffer" benchmarker="autocannon"       -4.17 %          *  2.297458e-02
 http\\simple.js res="setHeader" c=500 chunks=1 length=102400 type="bytes" benchmarker="autocannon"       -12.01 %        ***  1.902364e-17
 http\\simple.js res="setHeader" c=500 chunks=1 length=4 type="buffer" benchmarker="autocannon"            -4.51 %        ***  4.990340e-04
 http\\simple.js res="setHeader" c=500 chunks=1 length=4 type="bytes" benchmarker="autocannon"             -6.48 %        ***  2.152770e-06
 http\\simple.js res="setHeader" c=500 chunks=4 length=1024 type="buffer" benchmarker="autocannon"         -5.43 %        ***  5.798034e-06
 http\\simple.js res="setHeader" c=500 chunks=4 length=1024 type="bytes" benchmarker="autocannon"          -3.33 %          *  2.798374e-02
 http\\simple.js res="setHeader" c=500 chunks=4 length=102400 type="buffer" benchmarker="autocannon"       -4.07 %          *  3.823748e-02
 http\\simple.js res="setHeader" c=500 chunks=4 length=102400 type="bytes" benchmarker="autocannon"        -8.36 %        ***  3.811375e-04
 http\\simple.js res="setHeader" c=500 chunks=4 length=4 type="buffer" benchmarker="autocannon"            -5.58 %        ***  2.991319e-05
 http\\simple.js res="setHeader" c=500 chunks=4 length=4 type="bytes" benchmarker="autocannon"             -3.15 %          *  3.128712e-02
 http\\simple.js res="setHeaderWH" c=50 chunks=0 length=1024 type="buffer" benchmarker="autocannon"        -4.23 %        ***  1.635204e-04
 http\\simple.js res="setHeaderWH" c=50 chunks=0 length=1024 type="bytes" benchmarker="autocannon"         -9.60 %        ***  1.959187e-07
 http\\simple.js res="setHeaderWH" c=50 chunks=0 length=102400 type="buffer" benchmarker="autocannon"      -3.42 %          *  1.414317e-02
 http\\simple.js res="setHeaderWH" c=50 chunks=0 length=102400 type="bytes" benchmarker="autocannon"      -24.92 %        ***  1.729289e-12
 http\\simple.js res="setHeaderWH" c=50 chunks=0 length=4 type="buffer" benchmarker="autocannon"           -3.85 %         **  2.921067e-03
 http\\simple.js res="setHeaderWH" c=50 chunks=0 length=4 type="bytes" benchmarker="autocannon"            -7.80 %        ***  1.600889e-07
 http\\simple.js res="setHeaderWH" c=50 chunks=1 length=1024 type="buffer" benchmarker="autocannon"        -4.69 %        ***  5.645600e-05
 http\\simple.js res="setHeaderWH" c=50 chunks=1 length=1024 type="bytes" benchmarker="autocannon"         -7.51 %        ***  3.705732e-06
 http\\simple.js res="setHeaderWH" c=50 chunks=1 length=102400 type="buffer" benchmarker="autocannon"      -4.58 %        ***  7.952977e-04
 http\\simple.js res="setHeaderWH" c=50 chunks=1 length=102400 type="bytes" benchmarker="autocannon"      -13.14 %        ***  4.292583e-18
 http\\simple.js res="setHeaderWH" c=50 chunks=1 length=4 type="buffer" benchmarker="autocannon"           -4.65 %        ***  4.776798e-05
 http\\simple.js res="setHeaderWH" c=50 chunks=1 length=4 type="bytes" benchmarker="autocannon"            -5.81 %        ***  3.656902e-06
 http\\simple.js res="setHeaderWH" c=50 chunks=4 length=1024 type="buffer" benchmarker="autocannon"        -5.38 %        ***  5.252614e-06
 http\\simple.js res="setHeaderWH" c=50 chunks=4 length=1024 type="bytes" benchmarker="autocannon"         -3.39 %         **  7.162036e-03
 http\\simple.js res="setHeaderWH" c=50 chunks=4 length=102400 type="buffer" benchmarker="autocannon"      -4.63 %         **  6.541741e-03
 http\\simple.js res="setHeaderWH" c=50 chunks=4 length=102400 type="bytes" benchmarker="autocannon"       -8.07 %        ***  6.679127e-04
 http\\simple.js res="setHeaderWH" c=50 chunks=4 length=4 type="buffer" benchmarker="autocannon"           -5.88 %        ***  1.664189e-06
 http\\simple.js res="setHeaderWH" c=50 chunks=4 length=4 type="bytes" benchmarker="autocannon"            -3.82 %        ***  7.560696e-04
 http\\simple.js res="setHeaderWH" c=500 chunks=0 length=1024 type="buffer" benchmarker="autocannon"       -5.89 %        ***  3.958380e-07
 http\\simple.js res="setHeaderWH" c=500 chunks=0 length=1024 type="bytes" benchmarker="autocannon"        -9.99 %        ***  3.889125e-09
 http\\simple.js res="setHeaderWH" c=500 chunks=0 length=102400 type="buffer" benchmarker="autocannon"     -3.60 %          *  4.319252e-02
 http\\simple.js res="setHeaderWH" c=500 chunks=0 length=102400 type="bytes" benchmarker="autocannon"     -28.63 %        ***  2.439082e-18
 http\\simple.js res="setHeaderWH" c=500 chunks=0 length=4 type="buffer" benchmarker="autocannon"          -6.45 %        ***  3.711696e-10
 http\\simple.js res="setHeaderWH" c=500 chunks=0 length=4 type="bytes" benchmarker="autocannon"           -7.29 %        ***  2.646061e-08
 http\\simple.js res="setHeaderWH" c=500 chunks=1 length=1024 type="buffer" benchmarker="autocannon"       -6.22 %        ***  9.347363e-06
 http\\simple.js res="setHeaderWH" c=500 chunks=1 length=1024 type="bytes" benchmarker="autocannon"        -6.44 %        ***  1.845766e-05
 http\\simple.js res="setHeaderWH" c=500 chunks=1 length=102400 type="buffer" benchmarker="autocannon"     -5.09 %          *  1.153079e-02
 http\\simple.js res="setHeaderWH" c=500 chunks=1 length=102400 type="bytes" benchmarker="autocannon"     -15.37 %        ***  1.632493e-16
 http\\simple.js res="setHeaderWH" c=500 chunks=1 length=4 type="buffer" benchmarker="autocannon"          -5.77 %        ***  9.809755e-07
 http\\simple.js res="setHeaderWH" c=500 chunks=1 length=4 type="bytes" benchmarker="autocannon"           -4.46 %        ***  3.223076e-04
 http\\simple.js res="setHeaderWH" c=500 chunks=4 length=1024 type="buffer" benchmarker="autocannon"       -6.08 %        ***  5.702144e-06
 http\\simple.js res="setHeaderWH" c=500 chunks=4 length=1024 type="bytes" benchmarker="autocannon"        -2.95 %          *  1.536396e-02
 http\\simple.js res="setHeaderWH" c=500 chunks=4 length=102400 type="buffer" benchmarker="autocannon"     -4.31 %          *  1.684718e-02
 http\\simple.js res="setHeaderWH" c=500 chunks=4 length=102400 type="bytes" benchmarker="autocannon"      -7.40 %         **  2.654488e-03
 http\\simple.js res="setHeaderWH" c=500 chunks=4 length=4 type="buffer" benchmarker="autocannon"          -6.73 %        ***  7.854392e-09
 http\\simple.js res="setHeaderWH" c=500 chunks=4 length=4 type="bytes" benchmarker="autocannon"           -3.46 %         **  7.784934e-03
module
                                                                         improvement confidence      p.value
 module\\module-loader.js useCache="false" fullPath="false" thousands=50     -4.24 %          * 2.924986e-02
 module\\module-loader.js useCache="false" fullPath="true" thousands=50       1.43 %            4.253951e-01
 module\\module-loader.js useCache="true" fullPath="false" thousands=50      19.81 %        *** 2.188674e-07
 module\\module-loader.js useCache="true" fullPath="true" thousands=50        5.57 %            3.987202e-01
net
                                                   improvement confidence      p.value
 net\\net-c2s-cork.js dur=5 type="buf" len=1024        -1.82 %        *** 1.459071e-04
 net\\net-c2s-cork.js dur=5 type="buf" len=128         -2.08 %        *** 2.868727e-05
 net\\net-c2s-cork.js dur=5 type="buf" len=16          -1.22 %         ** 7.662987e-03
 net\\net-c2s-cork.js dur=5 type="buf" len=32          -1.72 %        *** 8.782447e-04
 net\\net-c2s-cork.js dur=5 type="buf" len=4           -1.03 %          * 2.950394e-02
 net\\net-c2s-cork.js dur=5 type="buf" len=512         -2.09 %        *** 4.327445e-07
 net\\net-c2s-cork.js dur=5 type="buf" len=64          -1.86 %        *** 9.534242e-05
 net\\net-c2s-cork.js dur=5 type="buf" len=8            1.23 %         ** 3.051232e-03
 net\\net-c2s.js dur=5 type="asc" len=102400           -1.57 %        *** 1.533519e-04
 net\\net-c2s.js dur=5 type="asc" len=16777216         -0.02 %            9.339418e-01
 net\\net-c2s.js dur=5 type="buf" len=102400           -1.35 %        *** 2.334037e-04
 net\\net-c2s.js dur=5 type="buf" len=16777216          0.97 %        *** 1.881552e-05
 net\\net-c2s.js dur=5 type="utf" len=102400           -0.77 %         ** 3.194185e-03
 net\\net-c2s.js dur=5 type="utf" len=16777216          0.87 %        *** 7.962570e-04
 net\\net-pipe.js dur=5 type="asc" len=102400          21.46 %            5.914150e-02
 net\\net-pipe.js dur=5 type="asc" len=16777216        -5.31 %            5.306393e-01
 net\\net-pipe.js dur=5 type="buf" len=102400          15.24 %            1.506721e-01
 net\\net-pipe.js dur=5 type="buf" len=16777216        17.44 %            1.068245e-01
 net\\net-pipe.js dur=5 type="utf" len=102400           6.00 %            3.415080e-01
 net\\net-pipe.js dur=5 type="utf" len=16777216         4.76 %            5.760742e-01
 net\\net-s2c.js dur=5 type="asc" len=102400           -1.26 %        *** 1.179792e-04
 net\\net-s2c.js dur=5 type="asc" len=16777216          0.24 %            2.778647e-01
 net\\net-s2c.js dur=5 type="buf" len=102400           -1.58 %        *** 1.175153e-04
 net\\net-s2c.js dur=5 type="buf" len=16777216          1.09 %         ** 9.607544e-03
 net\\net-s2c.js dur=5 type="utf" len=102400           -1.39 %        *** 1.722645e-10
 net\\net-s2c.js dur=5 type="utf" len=16777216          0.93 %            1.215938e-01
 net\\tcp-raw-c2s.js dur=5 type="asc" len=102400       -0.51 %            2.520456e-01
 net\\tcp-raw-c2s.js dur=5 type="asc" len=16777216     -0.68 %          * 3.019990e-02
 net\\tcp-raw-c2s.js dur=5 type="buf" len=102400       -0.53 %            5.924597e-02
 net\\tcp-raw-c2s.js dur=5 type="buf" len=16777216      0.65 %         ** 1.305128e-03
 net\\tcp-raw-c2s.js dur=5 type="utf" len=102400       -0.53 %            9.120898e-02
 net\\tcp-raw-c2s.js dur=5 type="utf" len=16777216      0.63 %            1.074695e-01
 net\\tcp-raw-s2c.js dur=5 type="asc" len=102400       -0.71 %          * 4.672277e-02
 net\\tcp-raw-s2c.js dur=5 type="asc" len=16777216     -0.21 %            6.686713e-01
 net\\tcp-raw-s2c.js dur=5 type="buf" len=102400       -0.67 %            5.853961e-02
 net\\tcp-raw-s2c.js dur=5 type="buf" len=16777216      0.61 %        *** 4.102306e-04
 net\\tcp-raw-s2c.js dur=5 type="utf" len=102400       -0.21 %            6.136643e-01
 net\\tcp-raw-s2c.js dur=5 type="utf" len=16777216     -0.16 %            7.074423e-01
os
                          improvement confidence      p.value
 os\\cpus.js n=30000          -5.34 %        *** 1.939582e-21
 os\\loadavg.js n=5000000     13.34 %        *** 8.419388e-36
process
                                                improvement confidence      p.value
 process\\bench-env.js n=100000                      0.28 %            1.493386e-01
 process\\bench-hrtime.js type="diff" n=1000000     -0.31 %        *** 9.291465e-06
 process\\bench-hrtime.js type="raw" n=1000000      -0.37 %        *** 4.781790e-16
 process\\memoryUsage.js n=100000                   -5.51 %        *** 1.062248e-13
 process\\next-tick-breadth-args.js millions=2     -20.70 %        *** 5.710155e-60
 process\\next-tick-breadth.js millions=2           11.20 %        *** 2.730821e-47
 process\\next-tick-depth-args.js millions=2       -30.70 %        *** 2.342960e-62
 process\\next-tick-depth.js millions=2            -28.69 %        *** 6.210576e-43
querystring
                                                                                                                                        improvement confidence      p.value
 querystring\\querystring-parse.js n=1000000 type="altspaces"                                                                              -10.92 %        *** 1.364564e-13
 querystring\\querystring-parse.js n=1000000 type="encodefake"                                                                             -10.04 %        *** 4.934766e-25
 querystring\\querystring-parse.js n=1000000 type="encodelast"                                                                             -10.78 %        *** 6.040949e-27
 querystring\\querystring-parse.js n=1000000 type="encodemany"                                                                              -3.88 %        *** 2.484171e-12
 querystring\\querystring-parse.js n=1000000 type="manyblankpairs"                                                                          17.03 %        *** 3.669811e-30
 querystring\\querystring-parse.js n=1000000 type="manypairs"                                                                               71.94 %        *** 2.961889e-50
 querystring\\querystring-parse.js n=1000000 type="multicharsep"                                                                           -15.18 %        *** 4.718177e-32
 querystring\\querystring-parse.js n=1000000 type="multivalue"                                                                              -2.28 %        *** 3.041186e-07
 querystring\\querystring-parse.js n=1000000 type="multivaluemany"                                                                         -14.39 %        *** 4.898868e-31
 querystring\\querystring-parse.js n=1000000 type="noencode"                                                                               -11.90 %        *** 1.981318e-26
 querystring\\querystring-stringify.js n=10000000 type="encodelast"                                                                        -16.25 %        *** 2.404157e-31
 querystring\\querystring-stringify.js n=10000000 type="encodemany"                                                                        -18.63 %        *** 3.232300e-64
 querystring\\querystring-stringify.js n=10000000 type="noencode"                                                                           -5.14 %        *** 6.372979e-24
 querystring\\querystring-unescapebuffer.js n=10000000 input="%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37"     -6.47 %        *** 1.572508e-22
 querystring\\querystring-unescapebuffer.js n=10000000 input="there is nothing to unescape here"                                             3.07 %        *** 2.934277e-06
 querystring\\querystring-unescapebuffer.js n=10000000 input="there%20are%20several%20spaces%20that%20need%20to%20be%20unescaped"          -10.03 %        *** 3.310386e-19
 querystring\\querystring-unescapebuffer.js n=10000000 input="there%2Qare%0-fake%escaped values in%%%%this%9Hstring"                        -5.56 %        *** 6.509139e-16
streams
                                          improvement confidence      p.value
 streams/readable-bigread.js n=1000          -10.73 %        *** 1.269154e-12
 streams/readable-bigunevenread.js n=1000    -13.88 %        *** 1.834009e-19
 streams/readable-boundaryread.js n=2000     -13.83 %        *** 4.606770e-10
 streams/readable-readall.js n=5000           -9.64 %        *** 3.697793e-25
 streams/readable-unevenread.js n=1000        -8.92 %        *** 8.211917e-14
 streams/writable-manywrites.js n=2000000    -22.36 %        *** 9.987796e-27
streams (windows)
                                           improvement confidence      p.value
 streams\\readable-bigread.js n=1000          -17.60 %        *** 2.188145e-39
 streams\\readable-bigunevenread.js n=1000    -14.71 %        *** 8.952692e-34
 streams\\readable-boundaryread.js n=2000     -13.13 %        *** 8.564883e-31
 streams\\readable-readall.js n=5000          -14.74 %        *** 2.377291e-42
 streams\\readable-unevenread.js n=1000       -13.26 %        *** 5.473820e-19
 streams\\writable-manywrites.js n=2000000    -15.44 %        *** 2.245030e-33
string_decoder

(string-decoder.js was launched with n=25e4 instead of 25e5)

                                                                                          improvement confidence      p.value
 string_decoder\\string-decoder-create.js n=25000000 encoding="ascii"                         -5.57 %        *** 2.938499e-28
 string_decoder\\string-decoder-create.js n=25000000 encoding="AscII"                        -11.21 %        *** 2.233764e-31
 string_decoder\\string-decoder-create.js n=25000000 encoding="base64"                        18.13 %        *** 2.788810e-43
 string_decoder\\string-decoder-create.js n=25000000 encoding="ucs2"                          21.31 %        *** 3.090671e-35
 string_decoder\\string-decoder-create.js n=25000000 encoding="UTF-16LE"                      12.17 %        *** 1.610229e-15
 string_decoder\\string-decoder-create.js n=25000000 encoding="utf-8"                         26.49 %        *** 5.179343e-44
 string_decoder\\string-decoder-create.js n=25000000 encoding="UTF-8"                         17.64 %        *** 1.119155e-32
 string_decoder\\string-decoder-create.js n=25000000 encoding="utf8"                          33.97 %        *** 2.164914e-43
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=1024 encoding="ascii"           -10.28 %        *** 4.118098e-43
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=1024 encoding="base64-ascii"    -10.85 %        *** 2.352498e-64
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=1024 encoding="base64-utf8"     -10.11 %        *** 2.515007e-49
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=1024 encoding="utf16le"          -4.03 %        *** 2.609310e-37
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=1024 encoding="utf8"             -5.25 %        *** 3.511981e-63
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=128 encoding="ascii"            -19.03 %        *** 6.691114e-43
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=128 encoding="base64-ascii"     -18.85 %        *** 8.161656e-24
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=128 encoding="base64-utf8"      -18.74 %        *** 8.300350e-27
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=128 encoding="utf16le"          -15.45 %        *** 1.551373e-57
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=128 encoding="utf8"             -13.16 %        *** 6.316570e-62
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=32 encoding="ascii"             -20.26 %        *** 3.785883e-47
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=32 encoding="base64-ascii"      -21.82 %        *** 1.009891e-21
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=32 encoding="base64-utf8"       -21.91 %        *** 3.389575e-20
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=32 encoding="utf16le"           -15.73 %        *** 3.185635e-44
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=32 encoding="utf8"              -27.20 %        *** 5.069660e-61
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=4096 encoding="ascii"            -7.34 %        *** 1.208310e-39
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=4096 encoding="base64-ascii"     -7.49 %        *** 2.706785e-40
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=4096 encoding="base64-utf8"      -7.27 %        *** 2.205726e-33
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=4096 encoding="utf16le"          -3.41 %        *** 1.607691e-15
 string_decoder\\string-decoder.js n=250000 chunk=1024 inlen=4096 encoding="utf8"             -4.79 %        *** 3.066881e-69
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=1024 encoding="ascii"             -21.32 %        *** 3.470832e-57
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=1024 encoding="base64-ascii"      -21.74 %        *** 7.859288e-35
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=1024 encoding="base64-utf8"       -22.21 %        *** 1.199006e-35
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=1024 encoding="utf16le"           -12.17 %        *** 3.176889e-22
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=1024 encoding="utf8"              -16.20 %        *** 6.902098e-31
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=128 encoding="ascii"              -21.20 %        *** 1.196128e-43
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=128 encoding="base64-ascii"       -22.98 %        *** 7.835172e-36
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=128 encoding="base64-utf8"        -21.89 %        *** 3.082109e-32
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=128 encoding="utf16le"            -13.96 %        *** 1.030760e-20
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=128 encoding="utf8"               -26.04 %        *** 6.023027e-37
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=32 encoding="ascii"               -22.78 %        *** 4.964699e-53
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=32 encoding="base64-ascii"        -24.04 %        *** 2.392287e-36
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=32 encoding="base64-utf8"         -23.38 %        *** 1.614575e-31
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=32 encoding="utf16le"             -17.59 %        *** 6.662991e-47
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=32 encoding="utf8"                -30.77 %        *** 1.348067e-69
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=4096 encoding="ascii"             -18.28 %        *** 2.205989e-24
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=4096 encoding="base64-ascii"      -20.96 %        *** 7.900781e-24
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=4096 encoding="base64-utf8"       -22.17 %        *** 9.200040e-52
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=4096 encoding="utf16le"           -13.88 %        *** 2.685590e-44
 string_decoder\\string-decoder.js n=250000 chunk=16 inlen=4096 encoding="utf8"              -17.09 %        *** 1.771876e-49
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=1024 encoding="ascii"            -12.46 %        *** 8.386790e-34
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=1024 encoding="base64-ascii"     -14.75 %        *** 6.154259e-29
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=1024 encoding="base64-utf8"      -11.85 %        *** 3.647512e-30
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=1024 encoding="utf16le"           -7.36 %        *** 1.969025e-25
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=1024 encoding="utf8"              -4.14 %        *** 8.657672e-36
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=128 encoding="ascii"             -18.56 %        *** 2.216563e-38
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=128 encoding="base64-ascii"      -17.95 %        *** 1.226298e-20
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=128 encoding="base64-utf8"       -18.22 %        *** 1.556503e-22
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=128 encoding="utf16le"           -15.75 %        *** 1.177897e-53
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=128 encoding="utf8"              -12.93 %        *** 4.922752e-61
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=32 encoding="ascii"              -20.00 %        *** 2.622663e-47
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=32 encoding="base64-ascii"       -22.46 %        *** 2.631449e-22
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=32 encoding="base64-utf8"        -23.06 %        *** 2.441661e-22
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=32 encoding="utf16le"            -16.00 %        *** 1.075582e-49
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=32 encoding="utf8"               -27.23 %        *** 1.741069e-66
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=4096 encoding="ascii"            -12.18 %        *** 2.709551e-37
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=4096 encoding="base64-ascii"      -9.53 %        *** 5.832544e-21
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=4096 encoding="base64-utf8"       -8.51 %        *** 5.870005e-27
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=4096 encoding="utf16le"           -7.64 %        *** 2.962503e-33
 string_decoder\\string-decoder.js n=250000 chunk=256 inlen=4096 encoding="utf8"              -3.02 %        *** 7.767665e-47
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=1024 encoding="ascii"             -15.56 %        *** 4.858562e-43
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=1024 encoding="base64-ascii"      -16.94 %        *** 5.797840e-19
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=1024 encoding="base64-utf8"       -12.47 %        *** 1.226234e-20
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=1024 encoding="utf16le"            -9.30 %        *** 3.702454e-20
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=1024 encoding="utf8"              -10.59 %        *** 8.160000e-54
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=128 encoding="ascii"              -19.21 %        *** 7.353231e-50
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=128 encoding="base64-ascii"       -16.99 %        *** 8.922750e-18
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=128 encoding="base64-utf8"        -14.68 %        *** 1.513500e-22
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=128 encoding="utf16le"            -16.00 %        *** 3.151190e-46
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=128 encoding="utf8"               -16.36 %        *** 2.746556e-59
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=32 encoding="ascii"               -20.88 %        *** 2.914962e-33
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=32 encoding="base64-ascii"        -23.01 %        *** 8.390443e-24
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=32 encoding="base64-utf8"         -22.59 %        *** 2.732638e-20
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=32 encoding="utf16le"             -15.60 %        *** 5.365177e-39
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=32 encoding="utf8"                -26.52 %        *** 8.555508e-38
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=4096 encoding="ascii"             -19.69 %        *** 1.330018e-38
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=4096 encoding="base64-ascii"      -11.96 %        *** 6.249688e-17
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=4096 encoding="base64-utf8"        -8.68 %        *** 5.494369e-11
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=4096 encoding="utf16le"           -12.10 %        *** 7.708981e-45
 string_decoder\\string-decoder.js n=250000 chunk=64 inlen=4096 encoding="utf8"               -3.56 %        *** 1.850288e-45
timers
                                                    improvement confidence      p.value
 timers/immediate.js type="breadth" thousands=2000      12.76 %        *** 8.348231e-05
 timers/immediate.js type="breadth1" thousands=2000      6.83 %        *** 3.396593e-04
 timers/immediate.js type="breadth4" thousands=2000      1.13 %            6.231323e-01
 timers/immediate.js type="clear" thousands=2000         6.40 %        *** 1.983798e-04
 timers/immediate.js type="depth" thousands=2000         5.43 %        *** 3.101314e-05
 timers/immediate.js type="depth1" thousands=2000        9.83 %        *** 5.083261e-11
 timers/set-immediate-breadth-args.js millions=5        -0.12 %            7.798393e-01
 timers/set-immediate-breadth.js millions=10             3.89 %        *** 7.465471e-15
 timers/set-immediate-depth-args.js millions=10         16.38 %        *** 1.535860e-20
 timers/set-immediate-depth.js millions=10               6.00 %        *** 8.826471e-14
 timers/timers-breadth.js thousands=500                  8.19 %        *** 8.195604e-18
 timers/timers-cancel-pooled.js thousands=500            0.39 %            6.270987e-01
 timers/timers-cancel-unpooled.js thousands=100         -0.17 %        *** 9.034505e-04
 timers/timers-depth.js thousands=1                     -0.25 %            7.790906e-01
 timers/timers-insert-pooled.js thousands=500          -11.42 %        *** 5.366038e-36
 timers/timers-insert-unpooled.js thousands=100         -5.00 %        *** 4.390698e-11
 timers/timers-timeout-pooled.js thousands=500          90.99 %        *** 1.828523e-24
timers (windows)
                                                     improvement confidence      p.value
 timers\\immediate.js type="breadth" thousands=2000      13.61 %        *** 9.040825e-20
 timers\\immediate.js type="breadth1" thousands=2000     11.29 %        *** 3.955783e-19
 timers\\immediate.js type="breadth4" thousands=2000      7.33 %        *** 7.727951e-22
 timers\\immediate.js type="clear" thousands=2000        20.89 %        *** 2.369455e-35
 timers\\immediate.js type="depth" thousands=2000         6.78 %        *** 1.987398e-38
 timers\\immediate.js type="depth1" thousands=2000        7.84 %        *** 2.557152e-46
 timers\\set-immediate-breadth-args.js millions=5        -4.05 %        *** 4.449593e-05
 timers\\set-immediate-breadth.js millions=10            16.72 %        *** 1.136465e-43
 timers\\set-immediate-depth-args.js millions=10         11.82 %        *** 5.897423e-39
 timers\\set-immediate-depth.js millions=10               1.77 %        *** 6.841528e-10
 timers\\timers-breadth.js thousands=500                  3.36 %        *** 4.310861e-24
 timers\\timers-cancel-pooled.js thousands=500            1.03 %            1.787179e-01
 timers\\timers-cancel-unpooled.js thousands=100         -0.44 %            7.711119e-01
 timers\\timers-depth.js thousands=1                      0.24 %         ** 1.072972e-03
 timers\\timers-insert-pooled.js thousands=500           -4.06 %        *** 7.462975e-18
 timers\\timers-insert-unpooled.js thousands=100         -6.09 %        *** 7.852493e-37
 timers\\timers-timeout-pooled.js thousands=500         121.48 %        *** 4.629659e-30
tls
                                                  improvement confidence      p.value
 tls\\convertprotocols.js n=1                         -1.28 %            3.987238e-01
 tls\\convertprotocols.js n=50000                     -7.17 %        *** 1.529057e-17
 tls\\throughput.js size=1024 type="asc" dur=5        -0.46 %        *** 2.143612e-04
 tls\\throughput.js size=1024 type="buf" dur=5        -0.54 %        *** 2.668916e-07
 tls\\throughput.js size=1024 type="utf" dur=5        -0.53 %        *** 2.389609e-06
 tls\\throughput.js size=1048576 type="asc" dur=5     -0.53 %        *** 1.990643e-09
 tls\\throughput.js size=1048576 type="buf" dur=5     -0.52 %        *** 1.093546e-12
 tls\\throughput.js size=1048576 type="utf" dur=5     -0.80 %        *** 3.224579e-13
 tls\\throughput.js size=2 type="asc" dur=5            4.04 %        *** 7.047651e-15
 tls\\throughput.js size=2 type="buf" dur=5            3.99 %        *** 6.373564e-12
 tls\\throughput.js size=2 type="utf" dur=5           -0.14 %            6.862909e-01
 tls\\tls-connect.js dur=5 concurrency=1              -1.55 %        *** 1.795457e-07
 tls\\tls-connect.js dur=5 concurrency=10             -2.21 %        *** 4.948116e-13
url
                                                                                                     improvement confidence      p.value
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="auth"                             -34.68 %        *** 1.134414e-42
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="dot"                              -36.20 %        *** 3.690335e-38
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="file"                             -37.51 %        *** 1.797921e-72
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="idn"                               -0.14 %            7.634703e-01
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="javascript"                       -37.03 %        *** 1.103488e-61
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="long"                             -35.99 %        *** 7.285023e-63
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="percent"                          -37.05 %        *** 1.104747e-33
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="short"                            -36.11 %        *** 8.727093e-62
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="legacy" type="ws"                               -35.67 %        *** 1.944222e-38
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="auth"                             -48.61 %        *** 7.992448e-58
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="dot"                              -45.38 %        *** 3.662469e-33
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="file"                             -47.54 %        *** 9.435727e-33
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="idn"                              -65.33 %        *** 7.051892e-87
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="javascript"                       -69.68 %        *** 1.603037e-34
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="long"                             -43.30 %        *** 3.376686e-56
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="percent"                          -61.89 %        *** 2.388693e-38
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="short"                            -44.23 %        *** 2.510468e-27
 url\\legacy-vs-whatwg-url-get-prop.js n=100000 method="whatwg" type="ws"                               -55.04 %        *** 4.578596e-55
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="auth"                                -12.45 %        *** 1.711388e-40
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="dot"                                   0.45 %            1.882933e-01
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="file"                                 98.08 %        *** 1.621694e-64
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="idn"                                   1.15 %        *** 4.218465e-04
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="javascript"                           13.76 %        *** 1.356816e-50
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="long"                                  2.27 %        *** 1.409552e-14
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="percent"                              96.61 %        *** 1.899178e-82
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="short"                                 0.80 %          * 1.239411e-02
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="legacy" type="ws"                                    0.85 %         ** 9.112197e-03
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="auth"                                  2.50 %        *** 7.503010e-11
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="dot"                                   7.52 %        *** 8.455763e-38
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="file"                                  7.90 %        *** 1.526125e-36
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="idn"                                   5.55 %        *** 2.489551e-43
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="javascript"                           12.64 %        *** 2.417359e-48
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="long"                                  6.94 %        *** 2.121187e-55
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="percent"                               7.66 %        *** 5.306395e-46
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="short"                                 7.11 %        *** 2.798048e-42
 url\\legacy-vs-whatwg-url-parse.js n=100000 method="whatwg" type="ws"                                    6.11 %        *** 2.729744e-37
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="altspaces"              -14.68 %        *** 1.929322e-29
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="encodefake"             -16.68 %        *** 7.459998e-34
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="encodelast"             -13.59 %        *** 7.181302e-34
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="encodemany"              -6.63 %        *** 1.324676e-23
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="manyblankpairs"         -61.45 %        *** 6.221670e-29
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="manypairs"               69.11 %        *** 9.437955e-54
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="multicharsep"           -13.70 %        *** 8.321268e-48
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="multivalue"             -11.17 %        *** 4.977578e-26
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="multivaluemany"         -16.96 %        *** 1.765300e-30
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="legacy" type="noencode"               -15.45 %        *** 3.347243e-36
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="altspaces"              -13.75 %        *** 1.404840e-51
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="encodefake"             -10.75 %        *** 5.581615e-23
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="encodelast"              -9.40 %        *** 2.358757e-32
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="encodemany"              -2.84 %        *** 2.638015e-10
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="manyblankpairs"         -31.54 %        *** 3.377100e-53
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="manypairs"               35.70 %        *** 4.250240e-50
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="multicharsep"            -9.30 %        *** 4.442361e-21
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="multivalue"              -5.55 %        *** 1.122990e-26
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="multivaluemany"         -13.67 %        *** 8.816168e-40
 url\\legacy-vs-whatwg-url-searchparams-parse.js n=100000 method="whatwg" type="noencode"               -11.04 %        *** 8.930977e-22
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="altspaces"         -38.20 %        *** 1.371476e-40
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="encodefake"        -29.33 %        *** 3.796764e-41
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="encodelast"        -17.64 %        *** 9.479205e-38
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="encodemany"        -15.80 %        *** 9.898271e-28
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="manyblankpairs"    -25.85 %        *** 9.208104e-36
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="manypairs"          -7.40 %        *** 2.529692e-26
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="multicharsep"      -17.07 %        *** 1.035808e-29
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="multivalue"        -13.49 %        *** 1.196666e-31
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="multivaluemany"     -9.98 %        *** 4.374953e-32
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="legacy" type="noencode"          -17.37 %        *** 2.798452e-41
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="altspaces"         -34.87 %        *** 2.000988e-44
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodefake"        -24.12 %        *** 9.944973e-42
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodelast"         -2.28 %        *** 8.334588e-07
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="encodemany"         -2.31 %        *** 6.106178e-05
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="manyblankpairs"    -18.84 %        *** 3.308262e-21
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="manypairs"          -2.90 %        *** 1.820190e-08
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multicharsep"       -2.40 %        *** 2.367131e-05
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multivalue"         -4.30 %        *** 3.218007e-12
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="multivaluemany"     -4.80 %        *** 2.103796e-14
 url\\legacy-vs-whatwg-url-searchparams-serialize.js n=1000000 method="whatwg" type="noencode"           -2.66 %        *** 2.926273e-07
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="auth"                            -51.73 %        *** 4.379512e-51
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="dot"                              -5.18 %        *** 1.735350e-24
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="file"                             -5.89 %        *** 1.226933e-20
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="idn"                              -2.28 %        *** 2.800866e-10
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="javascript"                       13.51 %        *** 4.329471e-45
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="long"                            -12.73 %        *** 2.274410e-27
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="percent"                          -4.31 %        *** 3.444205e-13
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="short"                            -3.60 %        *** 1.365628e-13
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="legacy" type="ws"                               -8.52 %        *** 1.231807e-38
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="auth"                            -27.34 %        *** 5.465109e-50
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="dot"                             -28.28 %        *** 1.288086e-58
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="file"                            -35.34 %        *** 4.934594e-74
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="idn"                             -30.77 %        *** 3.725545e-59
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="javascript"                      -42.18 %        *** 8.087409e-58
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="long"                            -34.16 %        *** 2.065759e-56
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="percent"                         -31.25 %        *** 6.367013e-51
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="short"                           -33.69 %        *** 6.343895e-52
 url\\legacy-vs-whatwg-url-serialize.js n=100000 method="whatwg" type="ws"                              -30.20 %        *** 2.051514e-52
 url\\url-format.js n=25000000 type="file"                                                                2.21 %        *** 1.136270e-07
 url\\url-format.js n=25000000 type="slashes"                                                            10.82 %        *** 1.191810e-39
 url\\url-resolve.js n=100000 path="down" href="auth"                                                    -3.12 %        *** 1.876031e-11
 url\\url-resolve.js n=100000 path="down" href="dot"                                                      0.66 %          * 4.852259e-02
 url\\url-resolve.js n=100000 path="down" href="file"                                                    57.66 %        *** 2.305978e-79
 url\\url-resolve.js n=100000 path="down" href="idn"                                                      0.68 %         ** 6.882208e-03
 url\\url-resolve.js n=100000 path="down" href="javascript"                                              25.13 %        *** 1.492438e-55
 url\\url-resolve.js n=100000 path="down" href="long"                                                    -1.08 %        *** 1.791669e-06
 url\\url-resolve.js n=100000 path="down" href="noscheme"                                                -8.51 %        *** 5.063194e-18
 url\\url-resolve.js n=100000 path="down" href="percent"                                                 59.67 %        *** 5.046567e-81
 url\\url-resolve.js n=100000 path="down" href="short"                                                    2.48 %        *** 3.496543e-10
 url\\url-resolve.js n=100000 path="down" href="ws"                                                      17.53 %        *** 1.419044e-50
 url\\url-resolve.js n=100000 path="foo/bar" href="auth"                                                 -7.60 %        *** 2.216584e-21
 url\\url-resolve.js n=100000 path="foo/bar" href="dot"                                                   1.60 %        *** 1.993903e-05
 url\\url-resolve.js n=100000 path="foo/bar" href="file"                                                 55.15 %        *** 2.840973e-81
 url\\url-resolve.js n=100000 path="foo/bar" href="idn"                                                  -1.34 %        *** 3.903494e-04
 url\\url-resolve.js n=100000 path="foo/bar" href="javascript"                                           25.80 %        *** 1.284336e-72
 url\\url-resolve.js n=100000 path="foo/bar" href="long"                                                 -4.51 %        *** 5.230985e-31
 url\\url-resolve.js n=100000 path="foo/bar" href="noscheme"                                             -8.54 %        *** 7.546034e-23
 url\\url-resolve.js n=100000 path="foo/bar" href="percent"                                              54.50 %        *** 1.572397e-81
 url\\url-resolve.js n=100000 path="foo/bar" href="short"                                                -1.24 %         ** 3.113847e-03
 url\\url-resolve.js n=100000 path="foo/bar" href="ws"                                                   17.65 %        *** 2.496146e-49
 url\\url-resolve.js n=100000 path="sibling" href="auth"                                                 -2.36 %        *** 4.817946e-08
 url\\url-resolve.js n=100000 path="sibling" href="dot"                                                   1.18 %         ** 1.966300e-03
 url\\url-resolve.js n=100000 path="sibling" href="file"                                                 63.13 %        *** 1.468631e-87
 url\\url-resolve.js n=100000 path="sibling" href="idn"                                                   0.09 %            7.115274e-01
 url\\url-resolve.js n=100000 path="sibling" href="javascript"                                           23.15 %        *** 2.968431e-52
 url\\url-resolve.js n=100000 path="sibling" href="long"                                                 -1.46 %        *** 9.864590e-06
 url\\url-resolve.js n=100000 path="sibling" href="noscheme"                                             -7.02 %        *** 6.240868e-22
 url\\url-resolve.js n=100000 path="sibling" href="percent"                                              63.87 %        *** 5.207680e-87
 url\\url-resolve.js n=100000 path="sibling" href="short"                                                 0.31 %            3.489059e-01
 url\\url-resolve.js n=100000 path="sibling" href="ws"                                                   16.66 %        *** 6.019323e-55
 url\\url-resolve.js n=100000 path="up" href="auth"                                                      -3.18 %        *** 6.211091e-14
 url\\url-resolve.js n=100000 path="up" href="dot"                                                        2.48 %        *** 2.235447e-11
 url\\url-resolve.js n=100000 path="up" href="file"                                                      64.16 %        *** 1.120646e-60
 url\\url-resolve.js n=100000 path="up" href="idn"                                                        2.05 %        *** 7.035095e-11
 url\\url-resolve.js n=100000 path="up" href="javascript"                                                23.82 %        *** 1.183798e-55
 url\\url-resolve.js n=100000 path="up" href="long"                                                      -0.12 %            5.914309e-01
 url\\url-resolve.js n=100000 path="up" href="noscheme"                                                  -3.24 %        *** 5.245393e-13
 url\\url-resolve.js n=100000 path="up" href="percent"                                                   62.59 %        *** 9.910767e-85
 url\\url-resolve.js n=100000 path="up" href="short"                                                      0.86 %          * 1.166051e-02
 url\\url-resolve.js n=100000 path="up" href="ws"                                                        17.43 %        *** 2.954736e-63
 url\\url-resolve.js n=100000 path="withscheme" href="auth"                                              -1.94 %        *** 3.003200e-05
 url\\url-resolve.js n=100000 path="withscheme" href="dot"                                                3.15 %        *** 8.889146e-11
 url\\url-resolve.js n=100000 path="withscheme" href="file"                                              80.29 %        *** 2.949170e-80
 url\\url-resolve.js n=100000 path="withscheme" href="idn"                                                4.70 %        *** 1.548568e-23
 url\\url-resolve.js n=100000 path="withscheme" href="javascript"                                         0.93 %          * 1.054471e-02
 url\\url-resolve.js n=100000 path="withscheme" href="long"                                               4.39 %        *** 1.507388e-21
 url\\url-resolve.js n=100000 path="withscheme" href="noscheme"                                          -4.35 %        *** 2.632984e-12
 url\\url-resolve.js n=100000 path="withscheme" href="percent"                                           78.78 %        *** 2.885921e-85
 url\\url-resolve.js n=100000 path="withscheme" href="short"                                              3.95 %        *** 6.668780e-13
 url\\url-resolve.js n=100000 path="withscheme" href="ws"                                                 2.31 %        *** 9.448911e-11
 url\\url-searchparams-iteration.js n=1000000 method="forEach"                                           -6.36 %        *** 6.228921e-23
 url\\url-searchparams-iteration.js n=1000000 method="iterator"                                          44.89 %        *** 2.507953e-75
 url\\url-searchparams-read.js n=1000000 param="nonexistent" method="get"                                -2.40 %        *** 6.349718e-09
 url\\url-searchparams-read.js n=1000000 param="nonexistent" method="getAll"                             -5.26 %        *** 3.396310e-20
 url\\url-searchparams-read.js n=1000000 param="nonexistent" method="has"                                 2.03 %        *** 2.035114e-04
 url\\url-searchparams-read.js n=1000000 param="one" method="get"                                        -6.95 %        *** 5.136380e-17
 url\\url-searchparams-read.js n=1000000 param="one" method="getAll"                                     -1.00 %        *** 1.246260e-04
 url\\url-searchparams-read.js n=1000000 param="one" method="has"                                        -5.98 %        *** 4.260513e-24
 url\\url-searchparams-read.js n=1000000 param="three" method="get"                                      -4.27 %        *** 1.108214e-18
 url\\url-searchparams-read.js n=1000000 param="three" method="getAll"                                   -6.90 %        *** 1.815173e-23
 url\\url-searchparams-read.js n=1000000 param="three" method="has"                                       0.00 %            9.966544e-01
 url\\url-searchparams-read.js n=1000000 param="two" method="get"                                        -5.57 %        *** 2.739023e-16
 url\\url-searchparams-read.js n=1000000 param="two" method="getAll"                                     -5.53 %        *** 7.586545e-21
 url\\url-searchparams-read.js n=1000000 param="two" method="has"                                        -1.92 %        *** 6.239710e-08
 url\\url-searchparams-sort.js n=1000000 type="almostsorted"                                              2.35 %        *** 1.322935e-05
 url\\url-searchparams-sort.js n=1000000 type="empty"                                                   -21.89 %        *** 2.378564e-48
 url\\url-searchparams-sort.js n=1000000 type="long"                                                      5.88 %        *** 9.087719e-17
 url\\url-searchparams-sort.js n=1000000 type="random"                                                    2.00 %            5.024592e-02
 url\\url-searchparams-sort.js n=1000000 type="reversed"                                                  2.29 %        *** 5.462454e-12
 url\\url-searchparams-sort.js n=1000000 type="short"                                                     1.89 %        *** 2.360603e-08
 url\\url-searchparams-sort.js n=1000000 type="sorted"                                                    5.70 %        *** 2.041392e-23
 url\\usvstring.js n=50000000 input="allinvalid"                                                        -18.33 %        *** 7.074157e-42
 url\\usvstring.js n=50000000 input="nonstring"                                                           3.36 %        *** 2.835381e-26
 url\\usvstring.js n=50000000 input="someinvalid"                                                       -20.13 %        *** 3.506343e-41
 url\\usvstring.js n=50000000 input="valid"                                                             -17.29 %        *** 7.099021e-61
 url\\usvstring.js n=50000000 input="validsurr"                                                          -6.33 %        *** 1.076393e-44
 url\\whatwg-url-idna.js n=5000000 to="ascii" input="all"                                                -6.92 %        *** 1.017367e-54
 url\\whatwg-url-idna.js n=5000000 to="ascii" input="empty"                                             -45.72 %        *** 2.164783e-51
 url\\whatwg-url-idna.js n=5000000 to="ascii" input="none"                                              -16.72 %        *** 8.775029e-40
 url\\whatwg-url-idna.js n=5000000 to="ascii" input="nonstring"                                         -25.84 %        *** 1.076997e-58
 url\\whatwg-url-idna.js n=5000000 to="ascii" input="some"                                               -6.34 %        *** 1.003916e-38
 url\\whatwg-url-idna.js n=5000000 to="unicode" input="all"                                               4.72 %        *** 1.042363e-48
 url\\whatwg-url-idna.js n=5000000 to="unicode" input="empty"                                           -45.95 %        *** 5.020348e-42
 url\\whatwg-url-idna.js n=5000000 to="unicode" input="none"                                             -7.51 %        *** 1.010640e-34
 url\\whatwg-url-idna.js n=5000000 to="unicode" input="nonstring"                                       -27.50 %        *** 4.037907e-63
 url\\whatwg-url-idna.js n=5000000 to="unicode" input="some"                                              3.37 %        *** 6.093441e-47
 url\\whatwg-url-properties.js n=10000 prop="hash" input="auth"                                         -13.05 %        *** 2.634506e-30
 url\\whatwg-url-properties.js n=10000 prop="hash" input="dot"                                          -12.87 %        *** 3.142510e-34
 url\\whatwg-url-properties.js n=10000 prop="hash" input="file"                                         -12.25 %        *** 1.737973e-35
 url\\whatwg-url-properties.js n=10000 prop="hash" input="idn"                                          -12.61 %        *** 3.513764e-31
 url\\whatwg-url-properties.js n=10000 prop="hash" input="javascript"                                    50.86 %        *** 1.262411e-51
 url\\whatwg-url-properties.js n=10000 prop="hash" input="long"                                         -11.76 %        *** 1.310080e-35
 url\\whatwg-url-properties.js n=10000 prop="hash" input="percent"                                      -13.48 %        *** 6.087931e-33
 url\\whatwg-url-properties.js n=10000 prop="hash" input="short"                                        -12.11 %        *** 1.362106e-30
 url\\whatwg-url-properties.js n=10000 prop="hash" input="ws"                                           -11.87 %        *** 1.085072e-38
 url\\whatwg-url-properties.js n=10000 prop="host" input="auth"                                          -4.81 %        *** 8.595136e-17
 url\\whatwg-url-properties.js n=10000 prop="host" input="dot"                                           -4.59 %        *** 1.993239e-17
 url\\whatwg-url-properties.js n=10000 prop="host" input="file"                                          -5.18 %        *** 1.870640e-21
 url\\whatwg-url-properties.js n=10000 prop="host" input="idn"                                           -4.32 %        *** 3.969293e-17
 url\\whatwg-url-properties.js n=10000 prop="host" input="javascript"                                    38.02 %        *** 7.908134e-24
 url\\whatwg-url-properties.js n=10000 prop="host" input="long"                                          -3.15 %        *** 4.817165e-16
 url\\whatwg-url-properties.js n=10000 prop="host" input="percent"                                       -5.10 %        *** 2.164275e-21
 url\\whatwg-url-properties.js n=10000 prop="host" input="short"                                         -4.08 %        *** 1.470347e-16
 url\\whatwg-url-properties.js n=10000 prop="host" input="ws"                                            -4.67 %        *** 4.359596e-17
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="auth"                                      -2.99 %        *** 9.807744e-10
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="dot"                                       -4.26 %        *** 4.912310e-12
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="file"                                      -3.11 %        *** 6.699793e-07
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="idn"                                       -4.22 %        *** 3.396294e-13
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="javascript"                                49.62 %        *** 1.981183e-37
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="long"                                      -3.80 %        *** 1.562894e-10
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="percent"                                   -4.51 %        *** 1.431079e-15
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="short"                                     -3.87 %        *** 2.053252e-11
 url\\whatwg-url-properties.js n=10000 prop="hostname" input="ws"                                        -3.86 %        *** 1.262418e-12
 url\\whatwg-url-properties.js n=10000 prop="href" input="auth"                                          -4.79 %        *** 4.013623e-14
 url\\whatwg-url-properties.js n=10000 prop="href" input="dot"                                           -6.14 %        *** 2.150363e-19
 url\\whatwg-url-properties.js n=10000 prop="href" input="file"                                          -5.48 %        *** 1.590497e-18
 url\\whatwg-url-properties.js n=10000 prop="href" input="idn"                                           -5.34 %        *** 6.377817e-16
 url\\whatwg-url-properties.js n=10000 prop="href" input="javascript"                                    -5.73 %        *** 5.289524e-22
 url\\whatwg-url-properties.js n=10000 prop="href" input="long"                                          -5.19 %        *** 2.087097e-17
 url\\whatwg-url-properties.js n=10000 prop="href" input="percent"                                       -5.33 %        *** 7.574755e-17
 url\\whatwg-url-properties.js n=10000 prop="href" input="short"                                         -5.84 %        *** 1.909005e-20
 url\\whatwg-url-properties.js n=10000 prop="href" input="ws"                                            -4.79 %        *** 3.236116e-16
 url\\whatwg-url-properties.js n=10000 prop="origin" input="auth"                                        -7.60 %        *** 2.831374e-08
 url\\whatwg-url-properties.js n=10000 prop="origin" input="dot"                                         -6.90 %        *** 4.798042e-17
 url\\whatwg-url-properties.js n=10000 prop="origin" input="file"                                         6.93 %        *** 8.729391e-09
 url\\whatwg-url-properties.js n=10000 prop="origin" input="idn"                                          3.23 %        *** 1.238775e-30
 url\\whatwg-url-properties.js n=10000 prop="origin" input="javascript"                                   6.81 %        *** 4.992687e-07
 url\\whatwg-url-properties.js n=10000 prop="origin" input="long"                                        -8.67 %        *** 8.268461e-31
 url\\whatwg-url-properties.js n=10000 prop="origin" input="percent"                                     -2.96 %        *** 1.995345e-11
 url\\whatwg-url-properties.js n=10000 prop="origin" input="short"                                       -9.09 %        *** 1.326430e-39
 url\\whatwg-url-properties.js n=10000 prop="origin" input="ws"                                          -9.85 %        *** 2.241308e-25
 url\\whatwg-url-properties.js n=10000 prop="password" input="auth"                                      18.63 %        *** 5.568602e-25
 url\\whatwg-url-properties.js n=10000 prop="password" input="dot"                                       15.84 %        *** 9.368072e-31
 url\\whatwg-url-properties.js n=10000 prop="password" input="file"                                      86.69 %        *** 1.938197e-34
 url\\whatwg-url-properties.js n=10000 prop="password" input="idn"                                       15.81 %        *** 2.129617e-30
 url\\whatwg-url-properties.js n=10000 prop="password" input="javascript"                                88.89 %        *** 2.679697e-64
 url\\whatwg-url-properties.js n=10000 prop="password" input="long"                                      16.81 %        *** 5.568713e-29
 url\\whatwg-url-properties.js n=10000 prop="password" input="percent"                                   15.69 %        *** 2.482159e-23
 url\\whatwg-url-properties.js n=10000 prop="password" input="short"                                     17.05 %        *** 3.539161e-28
 url\\whatwg-url-properties.js n=10000 prop="password" input="ws"                                        15.76 %        *** 4.664430e-27
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="auth"                                     -12.64 %        *** 5.152179e-35
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="dot"                                       -9.69 %        *** 3.694581e-28
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="file"                                      -9.73 %        *** 7.444527e-29
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="idn"                                      -10.30 %        *** 2.487335e-35
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="javascript"                                15.95 %        *** 1.536945e-24
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="long"                                     -10.00 %        *** 1.407055e-31
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="percent"                                  -10.80 %        *** 6.089620e-29
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="short"                                    -10.44 %        *** 1.002774e-29
 url\\whatwg-url-properties.js n=10000 prop="pathname" input="ws"                                        -9.63 %        *** 1.597101e-32
 url\\whatwg-url-properties.js n=10000 prop="port" input="auth"                                          -2.29 %        *** 5.943297e-08
 url\\whatwg-url-properties.js n=10000 prop="port" input="dot"                                           -3.78 %        *** 2.046475e-16
 url\\whatwg-url-properties.js n=10000 prop="port" input="file"                                          69.79 %        *** 2.031454e-46
 url\\whatwg-url-properties.js n=10000 prop="port" input="idn"                                           -4.19 %        *** 1.942649e-15
 url\\whatwg-url-properties.js n=10000 prop="port" input="javascript"                                    71.72 %        *** 3.124656e-52
 url\\whatwg-url-properties.js n=10000 prop="port" input="long"                                          -4.53 %        *** 8.561101e-18
 url\\whatwg-url-properties.js n=10000 prop="port" input="percent"                                       -3.07 %        *** 4.260172e-12
 url\\whatwg-url-properties.js n=10000 prop="port" input="short"                                         -3.25 %        *** 5.006745e-16
 url\\whatwg-url-properties.js n=10000 prop="port" input="ws"                                            -4.20 %        *** 3.139579e-16
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="auth"                                      -7.56 %        *** 6.618186e-18
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="dot"                                       -6.44 %        *** 2.919348e-14
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="file"                                      -6.11 %        *** 1.796060e-16
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="idn"                                       -6.27 %        *** 6.620996e-15
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="javascript"                                -4.14 %        *** 3.200331e-11
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="long"                                      -4.12 %        *** 2.973464e-04
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="percent"                                   -6.37 %        *** 3.744318e-16
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="short"                                     -5.61 %        *** 4.764372e-13
 url\\whatwg-url-properties.js n=10000 prop="protocol" input="ws"                                        -4.82 %        *** 5.709715e-14
 url\\whatwg-url-properties.js n=10000 prop="search" input="auth"                                         3.56 %        *** 2.782816e-08
 url\\whatwg-url-properties.js n=10000 prop="search" input="dot"                                          2.82 %        *** 2.137876e-07
 url\\whatwg-url-properties.js n=10000 prop="search" input="file"                                         1.59 %            7.033034e-02
 url\\whatwg-url-properties.js n=10000 prop="search" input="idn"                                          1.50 %         ** 9.755151e-03
 url\\whatwg-url-properties.js n=10000 prop="search" input="javascript"                                   1.18 %            7.517150e-02
 url\\whatwg-url-properties.js n=10000 prop="search" input="long"                                         3.28 %        *** 6.054618e-07
 url\\whatwg-url-properties.js n=10000 prop="search" input="percent"                                      3.34 %        *** 3.786630e-09
 url\\whatwg-url-properties.js n=10000 prop="search" input="short"                                        2.76 %        *** 1.575200e-04
 url\\whatwg-url-properties.js n=10000 prop="search" input="ws"                                           2.06 %         ** 2.509838e-03
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="auth"                                 170.44 %        *** 4.234964e-71
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="dot"                                  164.03 %        *** 9.941064e-68
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="file"                                 166.02 %        *** 2.458205e-62
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="idn"                                  165.76 %        *** 2.372835e-40
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="javascript"                           167.64 %        *** 2.012943e-55
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="long"                                 163.47 %        *** 1.100228e-36
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="percent"                              162.82 %        *** 1.198895e-41
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="short"                                170.57 %        *** 2.259498e-74
 url\\whatwg-url-properties.js n=10000 prop="searchParams" input="ws"                                   165.36 %        *** 5.683900e-46
 url\\whatwg-url-properties.js n=10000 prop="username" input="auth"                                      19.15 %        *** 2.575329e-34
 url\\whatwg-url-properties.js n=10000 prop="username" input="dot"                                       17.37 %        *** 3.630928e-27
 url\\whatwg-url-properties.js n=10000 prop="username" input="file"                                      83.67 %        *** 6.575456e-46
 url\\whatwg-url-properties.js n=10000 prop="username" input="idn"                                       17.98 %        *** 5.385188e-33
 url\\whatwg-url-properties.js n=10000 prop="username" input="javascript"                                82.92 %        *** 3.592966e-35
 url\\whatwg-url-properties.js n=10000 prop="username" input="long"                                      18.19 %        *** 2.593662e-36
 url\\whatwg-url-properties.js n=10000 prop="username" input="percent"                                   18.24 %        *** 8.653417e-39
 url\\whatwg-url-properties.js n=10000 prop="username" input="short"                                     15.88 %        *** 5.294615e-27
 url\\whatwg-url-properties.js n=10000 prop="username" input="ws"                                        17.22 %        *** 6.998943e-27
util
                                                             improvement confidence      p.value
 util\\format.js type="no-replace" n=1000000                      3.52 %        *** 2.300325e-20
 util\\format.js type="number" n=1000000                        -72.27 %        *** 1.272147e-49
 util\\format.js type="object" n=1000000                        -31.42 %        *** 6.317101e-45
 util\\format.js type="string" n=1000000                        -72.66 %        *** 8.318604e-55
 util\\format.js type="unknown" n=1000000                       -65.93 %        *** 5.048714e-92
 util\\inspect-proxy.js n=1000000 v=1                            -0.82 %        *** 8.354899e-04
 util\\inspect-proxy.js n=1000000 v=2                             0.43 %            1.797406e-01
 util\\inspect.js n=5000000                                       4.30 %        *** 3.568230e-27
 util\\normalize-encoding.js n=100000 input=""                  -57.84 %        *** 5.757415e-36
 util\\normalize-encoding.js n=100000 input="[]"                 -8.83 %        *** 3.635484e-21
 util\\normalize-encoding.js n=100000 input="1"                 -20.57 %        *** 3.098413e-44
 util\\normalize-encoding.js n=100000 input="base64"            -36.86 %        *** 4.703203e-60
 util\\normalize-encoding.js n=100000 input="BASE64"            -31.97 %        *** 5.454870e-58
 util\\normalize-encoding.js n=100000 input="binary"            -38.93 %        *** 2.731996e-35
 util\\normalize-encoding.js n=100000 input="BINARY"            -32.30 %        *** 1.343991e-45
 util\\normalize-encoding.js n=100000 input="false"             -59.39 %        *** 1.940626e-48
 util\\normalize-encoding.js n=100000 input="foo"               -33.22 %        *** 4.522212e-59
 util\\normalize-encoding.js n=100000 input="group_common"      -33.62 %        *** 1.910655e-43
 util\\normalize-encoding.js n=100000 input="group_misc"        -18.14 %        *** 4.468980e-41
 util\\normalize-encoding.js n=100000 input="group_uncommon"    -38.04 %        *** 4.374311e-40
 util\\normalize-encoding.js n=100000 input="group_upper"       -19.29 %        *** 1.042609e-25
 util\\normalize-encoding.js n=100000 input="hex"               -35.69 %        *** 1.748319e-58
 util\\normalize-encoding.js n=100000 input="HEX"               -32.11 %        *** 5.283979e-60
 util\\normalize-encoding.js n=100000 input="latin1"            -44.70 %        *** 6.491027e-53
 util\\normalize-encoding.js n=100000 input="ucs2"              -45.57 %        *** 9.186528e-50
 util\\normalize-encoding.js n=100000 input="UCS2"              -37.59 %        *** 9.180225e-45
 util\\normalize-encoding.js n=100000 input="undefined"         -59.37 %        *** 4.134435e-38
 util\\normalize-encoding.js n=100000 input="utf-16le"          -44.90 %        *** 7.891071e-50
 util\\normalize-encoding.js n=100000 input="UTF-16LE"          -35.28 %        *** 3.941014e-48
 util\\normalize-encoding.js n=100000 input="utf-8"             -49.98 %        *** 2.161624e-54
 util\\normalize-encoding.js n=100000 input="utF-8"             -33.75 %        *** 9.738238e-48
 util\\normalize-encoding.js n=100000 input="uTf-8"             -33.67 %        *** 1.084618e-36
 util\\normalize-encoding.js n=100000 input="UTF-8"             -35.61 %        *** 9.109863e-50
 util\\normalize-encoding.js n=100000 input="utf16le"           -46.45 %        *** 1.365423e-44
 util\\normalize-encoding.js n=100000 input="UTF16LE"           -34.85 %        *** 1.335203e-45
 util\\normalize-encoding.js n=100000 input="utf8"              -50.38 %        *** 1.338962e-58
 util\\normalize-encoding.js n=100000 input="Utf8"              -37.45 %        *** 1.124196e-53
 util\\normalize-encoding.js n=100000 input="UTF8"              -38.18 %        *** 2.279434e-58
vm
                                                                         improvement confidence      p.value
 vm/run-in-context.js withSigintListener=0 breakOnSigint=0 n=200000          -1.69 %            1.722634e-01
 vm/run-in-context.js withSigintListener=0 breakOnSigint=1 n=200000           0.06 %            9.724491e-01
 vm/run-in-context.js withSigintListener=1 breakOnSigint=0 n=200000          -3.25 %        *** 9.922300e-04
 vm/run-in-context.js withSigintListener=1 breakOnSigint=1 n=200000           0.36 %            7.734769e-01
 vm/run-in-this-context.js withSigintListener=0 breakOnSigint=0 n=200000     -3.81 %        *** 1.130806e-05
 vm/run-in-this-context.js withSigintListener=0 breakOnSigint=1 n=200000     -1.43 %            2.500253e-01
 vm/run-in-this-context.js withSigintListener=1 breakOnSigint=0 n=200000     -4.65 %        *** 4.163715e-08
 vm/run-in-this-context.js withSigintListener=1 breakOnSigint=1 n=200000      0.77 %            5.442813e-01
vm (windows)
                                                                     improvement confidence      p.value
 vm\\run-in-context.js withSigintListener=0 breakOnSigint=0 n=1          -0.96 %            5.105984e-01
 vm\\run-in-context.js withSigintListener=0 breakOnSigint=1 n=1          -4.87 %          * 4.596951e-02
 vm\\run-in-context.js withSigintListener=1 breakOnSigint=0 n=1           3.44 %            1.442365e-01
 vm\\run-in-context.js withSigintListener=1 breakOnSigint=1 n=1          14.86 %        *** 1.086548e-06
 vm\\run-in-this-context.js withSigintListener=0 breakOnSigint=0 n=1     -4.59 %        *** 6.585714e-05
 vm\\run-in-this-context.js withSigintListener=0 breakOnSigint=1 n=1     70.57 %        *** 1.027894e-19
 vm\\run-in-this-context.js withSigintListener=1 breakOnSigint=0 n=1     -5.60 %        *** 2.006588e-07
 vm\\run-in-this-context.js withSigintListener=1 breakOnSigint=1 n=1     33.06 %        *** 6.418536e-23

I draw your attention particularly to buffers, events, http (!!), querystring, streams, string_decoder, url, util where we have significant losses. These all go to the core competences of Node and you can imagine the articles and blog posts about how far 8.0 LTS regressed.

We do have a couple of wins, es and timers in particular. The gains in es point the way toward what TurboFanScript might look like, or perhaps these are just doing a bit of catch-up on existing ES3/5 perf.

There is https://benchmarking.nodejs.org/, but we have a long way to go before it helps answer these kinds of questions. Currently they are mostly microbenchmarks too, plus AcmeAir (which is a questionable representation of real-world Node IMO) and then there's an Octane benchmark down the bottom where master has a non-trivial dip over 8.x. @nodejs/benchmarking may be able to speak with more authority to the representative nature of all those graphs though.

So, the basic question is what to do with 5.9+? We could go ahead and put it in 8.x. We could wait till 6.0 or 6.1 to do it. We could defer the upgrade till 9.x. But how do we go about answering this question given the complex dependencies (mainly re LTS)?

My personal inclination is to defer till 9.x so we have 2 full cycles to pick up the pieces before an LTS (similar strategy that Ubuntu has pulled off with its major reworks and component replacements—conservative in the LTS branches to lessen potential breakage and make support easier, then liberal in the in-between).

Can others please present alternative proposals with justifications and/or framing?

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jun 21, 2017

Member

/cc @nodejs/ctc @nodejs/v8 @nodejs/lts

Member

rvagg commented Jun 21, 2017

/cc @nodejs/ctc @nodejs/v8 @nodejs/lts

@mcollina

This comment has been minimized.

Show comment
Hide comment
@mcollina

mcollina Jun 21, 2017

Member

@rvagg we tested that same build on some private application code. Load testing that turned out to give 5-15% more throughput overall, even with all those regressions in the microbenchmarks. Even if streams microbenchmarks are lower, I see better throughput on some more realistic streams tests.

I would note that our microbenchmarks are more written for crankshaft.js than our codebase.

I think if we support v8 5.9, we might have to backport some of the performance regressions for which later v8 releases has fixes. As an example v8/v8@6d38f89 (which is be in 6.0) solves a very bad regression in the through module. I guess there are others. We would need to have a strategy to float those fixes over time. I worked with @bmeurer to solve that issue, and I think we can ask for similar fixes over time if there are significant regressions that we are noticing.

Given that v8 5.9 has been released, can we just have a build done with that, so we can check again?

Member

mcollina commented Jun 21, 2017

@rvagg we tested that same build on some private application code. Load testing that turned out to give 5-15% more throughput overall, even with all those regressions in the microbenchmarks. Even if streams microbenchmarks are lower, I see better throughput on some more realistic streams tests.

I would note that our microbenchmarks are more written for crankshaft.js than our codebase.

I think if we support v8 5.9, we might have to backport some of the performance regressions for which later v8 releases has fixes. As an example v8/v8@6d38f89 (which is be in 6.0) solves a very bad regression in the through module. I guess there are others. We would need to have a strategy to float those fixes over time. I worked with @bmeurer to solve that issue, and I think we can ask for similar fixes over time if there are significant regressions that we are noticing.

Given that v8 5.9 has been released, can we just have a build done with that, so we can check again?

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jun 21, 2017

Member

Thanks for the data point @mcollina, this is interesting.

https://nodejs.org/download/nightly/ has builds for master (right down the bottom) which has 5.9 in it. https://nodejs.org/download/v8-canary/ has 6.1 in it if you want to reach further ahead.

Member

rvagg commented Jun 21, 2017

Thanks for the data point @mcollina, this is interesting.

https://nodejs.org/download/nightly/ has builds for master (right down the bottom) which has 5.9 in it. https://nodejs.org/download/v8-canary/ has 6.1 in it if you want to reach further ahead.

@fhinkel

This comment has been minimized.

Show comment
Hide comment
@fhinkel

fhinkel Jun 21, 2017

Member

We had looked into performance and saw only improvements from 5.8 to 5.9 /cc @psmarshall

Member

fhinkel commented Jun 21, 2017

We had looked into performance and saw only improvements from 5.8 to 5.9 /cc @psmarshall

@mhdawson

This comment has been minimized.

Show comment
Hide comment
@mhdawson

mhdawson Jun 21, 2017

Member

As per the discussion in the thread for the CTC meeting I agree that we should have something which shows an assessment of the data (micro benchmarks, nightly runs, other data) to support whether it should be pulled in or not.

I think earlier suggestion from @MylesBorins (possibly in the LTS WG) was that we might want to skip 5.9 and wait for 6.0 before updating Node version 8. The rational being that 6.0 will have lots of fixes (performance and otherwise) and we don't want to go LTS with V8 5.9, it should either be V5.8 or 6.0.

Member

mhdawson commented Jun 21, 2017

As per the discussion in the thread for the CTC meeting I agree that we should have something which shows an assessment of the data (micro benchmarks, nightly runs, other data) to support whether it should be pulled in or not.

I think earlier suggestion from @MylesBorins (possibly in the LTS WG) was that we might want to skip 5.9 and wait for 6.0 before updating Node version 8. The rational being that 6.0 will have lots of fixes (performance and otherwise) and we don't want to go LTS with V8 5.9, it should either be V5.8 or 6.0.

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jun 21, 2017

Member

If someone wants to spend some time on this, maybe a good way to run the benchmarks would be to compare 8.1.0 with the commits in the 8.2.0 proposal, that would remove all the extra noise.

Also I believe that most of the benchmarks above are run on Windows. I don't know if it would make much difference but Linux is arguably more important as a deployment platform for Node (yes we have a very high number of Windows users but it's just not used for prod deployments as much).

Member

rvagg commented Jun 21, 2017

If someone wants to spend some time on this, maybe a good way to run the benchmarks would be to compare 8.1.0 with the commits in the 8.2.0 proposal, that would remove all the extra noise.

Also I believe that most of the benchmarks above are run on Windows. I don't know if it would make much difference but Linux is arguably more important as a deployment platform for Node (yes we have a very high number of Windows users but it's just not used for prod deployments as much).

@addaleax

This comment has been minimized.

Show comment
Hide comment
@addaleax

addaleax Jun 21, 2017

Member

@rvagg That’s one of the reasons I’d like to see an 8.2.0 RC with V8 5.9 – it would make it a bit easier for people to check how their own applications perform. (And to answer your question in the release proposal thread: Yes, of course we can back out those changes if we agree that that’s the best course of action.)

Member

addaleax commented Jun 21, 2017

@rvagg That’s one of the reasons I’d like to see an 8.2.0 RC with V8 5.9 – it would make it a bit easier for people to check how their own applications perform. (And to answer your question in the release proposal thread: Yes, of course we can back out those changes if we agree that that’s the best course of action.)

@psmarshall

This comment has been minimized.

Show comment
Hide comment
@psmarshall

psmarshall Jun 21, 2017

I looked into the benchmarks mentioned above, I'll write an overview here and get the data into a better format for more details soon.

A lot of the regressions we saw happened to rely on some optimization that crankshaft had, and turbofan didn't. Because these are microbenchmarks, we saw that missing one optimization can tank a whole benchmark. In larger benchmarks, we might be a little bit slower here, and a little bit faster there, but we mostly see overall performance gains in the range of 5-15% like @mcollina mentioned.

The microbenchmarks do give us useful information - they point out that one particular thing didn't work as fast as it did in crankshaft for some reason. e.g. In the url benchmarks we saw -40% to -70% regressions. This was due to missing inlining which is now fixed (see v8/v8@23ee743). These types of fixes also gave noticeable performance boosts on other, non-node benchmarks, so that's an indication that they are useful, and not just overfitting to the benchmark.

http (one of the worst regressions) is basically entirely down to handling of String charCodeAt, which crankshaft inlined aggressively (tracking bug). Same with path.

More data to come tomorrow.

psmarshall commented Jun 21, 2017

I looked into the benchmarks mentioned above, I'll write an overview here and get the data into a better format for more details soon.

A lot of the regressions we saw happened to rely on some optimization that crankshaft had, and turbofan didn't. Because these are microbenchmarks, we saw that missing one optimization can tank a whole benchmark. In larger benchmarks, we might be a little bit slower here, and a little bit faster there, but we mostly see overall performance gains in the range of 5-15% like @mcollina mentioned.

The microbenchmarks do give us useful information - they point out that one particular thing didn't work as fast as it did in crankshaft for some reason. e.g. In the url benchmarks we saw -40% to -70% regressions. This was due to missing inlining which is now fixed (see v8/v8@23ee743). These types of fixes also gave noticeable performance boosts on other, non-node benchmarks, so that's an indication that they are useful, and not just overfitting to the benchmark.

http (one of the worst regressions) is basically entirely down to handling of String charCodeAt, which crankshaft inlined aggressively (tracking bug). Same with path.

More data to come tomorrow.

@Trott

This comment has been minimized.

Show comment
Hide comment
@Trott

Trott Jun 21, 2017

Member

this suggests to me that we're not going to get much upstream help in reigning in perf problems

@rvagg When we had the last CTC/V8 meeting (or at least the last one I was able to go to), it was the V8 team that both proposed/organized the meeting and brought up the issue of CrankshiftScript in our code. (I think it was even one of them--Benedikt, maybe?--that coined the term.) They seemed very interested/invested in helping us figure out how to get from our current codebase to something that would play as nice or better with Turbofan. I could be wrong, but I think we're getting a lot of help from them already, even if it may not be as visible as we might expect. And I think requests for more help in specific areas would not fall on deaf ears.

Apologies in advance if it sounds like I'm reading something into your comment that isn't there. I've personally been extremely pleased and grateful about the V8 team's assistance with Node.js for a long time now and so I'm taking the opportunity to express that.

And none of this takes away from the main issue of course, which is that the task is enormous and fraught with "moving lever A fixes spring B but causes button C to stop working" type perils. We should plan and discuss publicly, like you're doing here.

Member

Trott commented Jun 21, 2017

this suggests to me that we're not going to get much upstream help in reigning in perf problems

@rvagg When we had the last CTC/V8 meeting (or at least the last one I was able to go to), it was the V8 team that both proposed/organized the meeting and brought up the issue of CrankshiftScript in our code. (I think it was even one of them--Benedikt, maybe?--that coined the term.) They seemed very interested/invested in helping us figure out how to get from our current codebase to something that would play as nice or better with Turbofan. I could be wrong, but I think we're getting a lot of help from them already, even if it may not be as visible as we might expect. And I think requests for more help in specific areas would not fall on deaf ears.

Apologies in advance if it sounds like I'm reading something into your comment that isn't there. I've personally been extremely pleased and grateful about the V8 team's assistance with Node.js for a long time now and so I'm taking the opportunity to express that.

And none of this takes away from the main issue of course, which is that the task is enormous and fraught with "moving lever A fixes spring B but causes button C to stop working" type perils. We should plan and discuss publicly, like you're doing here.

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jun 21, 2017

Member

Apologies in advance if it sounds like I'm reading something into your comment that isn't there.

Sorry for not being absolutely clear—I agree that the fruit that the Node/V8 relationship is bearing is impressive and mutually valuable and I'm not trying to knock that, just that it seems to me from looking from the outside that the way we're going to have to tackle the problem is by changing things on our end to better adapt to V8 rather than expecting V8 to adapt to our overoptimised codebase. I also think that's perfectly reasonable fwiw because it's not as if our codebase is representative in any way of typical Node.js, nor is it idiomatic ES3/5, it really is CrankshaftScript and that's a dead reality now. So we're in for pain either way and it's exactly the whack-a-mole problem you mentioned that I'm most afraid of because it's bitten us so hard multiple times in the past and we now need to do it on a scale that we've never attempted before.

I hope I'm not being interpreted as being willfully obstructionist here, I'm really only concerned about the issues I laid out in the OP. If the answer is simply that our benchmarks, or the particular runs of the benchmarks taken from the old 5.9 candidate, don't match a reality that we think matters then we significantly simplify this issue.

8.2.0-rc.1 coming soon, see nodejs/node#13744 (comment)

Member

rvagg commented Jun 21, 2017

Apologies in advance if it sounds like I'm reading something into your comment that isn't there.

Sorry for not being absolutely clear—I agree that the fruit that the Node/V8 relationship is bearing is impressive and mutually valuable and I'm not trying to knock that, just that it seems to me from looking from the outside that the way we're going to have to tackle the problem is by changing things on our end to better adapt to V8 rather than expecting V8 to adapt to our overoptimised codebase. I also think that's perfectly reasonable fwiw because it's not as if our codebase is representative in any way of typical Node.js, nor is it idiomatic ES3/5, it really is CrankshaftScript and that's a dead reality now. So we're in for pain either way and it's exactly the whack-a-mole problem you mentioned that I'm most afraid of because it's bitten us so hard multiple times in the past and we now need to do it on a scale that we've never attempted before.

I hope I'm not being interpreted as being willfully obstructionist here, I'm really only concerned about the issues I laid out in the OP. If the answer is simply that our benchmarks, or the particular runs of the benchmarks taken from the old 5.9 candidate, don't match a reality that we think matters then we significantly simplify this issue.

8.2.0-rc.1 coming soon, see nodejs/node#13744 (comment)

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jun 22, 2017

Member

@not-an-aardvark nodejs/node#13744 (comment):

If it's useful as a datapoint: Node 8.2.0-rc.1 improves the end-to-end performance of ESLint by about 7% compared to Node 8.1.2 in both our single-file and multi-file benchmarks.

We really are overdue for a proper representative benchmark suite.

Member

rvagg commented Jun 22, 2017

@not-an-aardvark nodejs/node#13744 (comment):

If it's useful as a datapoint: Node 8.2.0-rc.1 improves the end-to-end performance of ESLint by about 7% compared to Node 8.1.2 in both our single-file and multi-file benchmarks.

We really are overdue for a proper representative benchmark suite.

@zbjornson

This comment has been minimized.

Show comment
Hide comment
@zbjornson

zbjornson Jun 22, 2017

Per @rvagg's broadcast on twitter, here's a set of benchmarks run on 7.10.0 and 8.2.0-rc.1 (all values are ops/sec):

image

I can explain what the benchmarks are if anyone's interested, but it sounds like the goal is just to see how some real world applications do.

Some of the most interesting cases are the four that start with "QS" and the five that start with "Clamp" -- those are all different implementations of the same functions that we tested during development before picking the fastest to actually ship. For QS the fastest implementation is different between v8 versions. Clamp is within margin of error.

These are all math-heavy functions and I think they would all run in d8. That is, these shouldn't be reflective of node API performance. I haven't looked at the generated assembly yet, and I have limited time to do so in the next few weeks if it would be helpful.


BTW, from the buffer-swap.js benchmarks in the OP, only the ones with len=128 runs in JS; the others are CPP. (And only the ones in JS have a perf degradation.) I think you're also missing the fs benchmarks from the original thread.

zbjornson commented Jun 22, 2017

Per @rvagg's broadcast on twitter, here's a set of benchmarks run on 7.10.0 and 8.2.0-rc.1 (all values are ops/sec):

image

I can explain what the benchmarks are if anyone's interested, but it sounds like the goal is just to see how some real world applications do.

Some of the most interesting cases are the four that start with "QS" and the five that start with "Clamp" -- those are all different implementations of the same functions that we tested during development before picking the fastest to actually ship. For QS the fastest implementation is different between v8 versions. Clamp is within margin of error.

These are all math-heavy functions and I think they would all run in d8. That is, these shouldn't be reflective of node API performance. I haven't looked at the generated assembly yet, and I have limited time to do so in the next few weeks if it would be helpful.


BTW, from the buffer-swap.js benchmarks in the OP, only the ones with len=128 runs in JS; the others are CPP. (And only the ones in JS have a perf degradation.) I think you're also missing the fs benchmarks from the original thread.

@matthargett

This comment has been minimized.

Show comment
Hide comment
@matthargett

matthargett Jun 22, 2017

I'd love to see the CrankshaftScript replaced with more idiomatic JS (or C++) to enable better performance possibilities from alternative JS runtimes like ChakraCore (used in node-chakracore) and SpiderMonkey (spidernode). RIght now, I don't think the Nodejs ecosystem isn't as strong as it could be due to this coupling between Node.js and v8 that effectively limits real-world deployable innovations (memory use, requests per second per watt, etc) versus browser-side JS. To echo folks above, I'd really like to see some hot-path aspects of this corrected for the next LTS.

@rvagg for my purposes, AcmeAir, SSR benchmarks, and Octane are a reasonable iron triangle for community-run CI. Between the raw benchmark times+memory use, and monitoring/pinning JIT stats (bailouts, re-JITs, etc), I think many of the app-level regression cases for my context would be caught.

matthargett commented Jun 22, 2017

I'd love to see the CrankshaftScript replaced with more idiomatic JS (or C++) to enable better performance possibilities from alternative JS runtimes like ChakraCore (used in node-chakracore) and SpiderMonkey (spidernode). RIght now, I don't think the Nodejs ecosystem isn't as strong as it could be due to this coupling between Node.js and v8 that effectively limits real-world deployable innovations (memory use, requests per second per watt, etc) versus browser-side JS. To echo folks above, I'd really like to see some hot-path aspects of this corrected for the next LTS.

@rvagg for my purposes, AcmeAir, SSR benchmarks, and Octane are a reasonable iron triangle for community-run CI. Between the raw benchmark times+memory use, and monitoring/pinning JIT stats (bailouts, re-JITs, etc), I think many of the app-level regression cases for my context would be caught.

@vsemozhetbyt

This comment has been minimized.

Show comment
Hide comment
@vsemozhetbyt

vsemozhetbyt Jun 22, 2017

Member

(FWIW, besides fs, also missing in the copy from the old results: crypto, dgram, misc, and path).

Member

vsemozhetbyt commented Jun 22, 2017

(FWIW, besides fs, also missing in the copy from the old results: crypto, dgram, misc, and path).

@vsemozhetbyt

This comment has been minimized.

Show comment
Hide comment
@vsemozhetbyt

vsemozhetbyt Jun 23, 2017

Member

The old data seems really outdated. I've just run the array benchmarks (still on Windows), that initially cause severe concerns:

nodejs/node#11851 (comment)
nodejs/node#11851 (comment)

The pros and cons seem drastically different now (8.1.2 vs 8.2.0-rc-1):

Label (click me):
                                             improvement confidence      p.value
 arrays\\var-int.js n=25 type="Array"            -1.38 %            0.1449170222
 arrays\\var-int.js n=25 type="Buffer"           -3.60 %        *** 0.0002448808
 arrays\\var-int.js n=25 type="Float32Array"      0.51 %            0.6640802009
 arrays\\var-int.js n=25 type="Float64Array"      0.33 %            0.7028409025
 arrays\\var-int.js n=25 type="Int16Array"       -1.35 %            0.1832062399
 arrays\\var-int.js n=25 type="Int32Array"       -2.18 %            0.0772578995
 arrays\\var-int.js n=25 type="Int8Array"        -2.88 %        *** 0.0006455217
 arrays\\var-int.js n=25 type="Uint16Array"      -3.62 %        *** 0.0003638146
 arrays\\var-int.js n=25 type="Uint32Array"      -1.99 %            0.1343990743
 arrays\\var-int.js n=25 type="Uint8Array"       -3.08 %         ** 0.0074982413

                                                improvement confidence      p.value
 arrays\\zero-float.js n=25 type="Array"            18.03 %        *** 7.646284e-37
 arrays\\zero-float.js n=25 type="Buffer"           21.01 %        *** 7.406994e-40
 arrays\\zero-float.js n=25 type="Float32Array"     20.62 %        *** 1.541712e-31
 arrays\\zero-float.js n=25 type="Float64Array"    -16.98 %        *** 7.101956e-24
 arrays\\zero-float.js n=25 type="Int16Array"       -3.52 %        *** 9.136824e-05
 arrays\\zero-float.js n=25 type="Int32Array"       -0.24 %            7.432021e-01
 arrays\\zero-float.js n=25 type="Int8Array"        19.16 %        *** 3.006861e-29
 arrays\\zero-float.js n=25 type="Uint16Array"      -3.33 %        *** 1.387510e-06
 arrays\\zero-float.js n=25 type="Uint32Array"      -1.14 %            1.474507e-01
 arrays\\zero-float.js n=25 type="Uint8Array"       20.62 %        *** 1.324800e-28

                                              improvement confidence      p.value
 arrays\\zero-int.js n=25 type="Array"            16.56 %        *** 1.737679e-21
 arrays\\zero-int.js n=25 type="Buffer"           20.61 %        *** 7.972851e-34
 arrays\\zero-int.js n=25 type="Float32Array"     20.84 %        *** 7.841709e-36
 arrays\\zero-int.js n=25 type="Float64Array"    -16.23 %        *** 8.517111e-22
 arrays\\zero-int.js n=25 type="Int16Array"       -2.22 %            5.165204e-02
 arrays\\zero-int.js n=25 type="Int32Array"        0.96 %            1.183342e-01
 arrays\\zero-int.js n=25 type="Int8Array"        19.63 %        *** 8.789434e-33
 arrays\\zero-int.js n=25 type="Uint16Array"      -2.96 %         ** 5.486944e-03
 arrays\\zero-int.js n=25 type="Uint32Array"       0.42 %            4.711222e-01
 arrays\\zero-int.js n=25 type="Uint8Array"       21.33 %        *** 8.041571e-33

Member

vsemozhetbyt commented Jun 23, 2017

The old data seems really outdated. I've just run the array benchmarks (still on Windows), that initially cause severe concerns:

nodejs/node#11851 (comment)
nodejs/node#11851 (comment)

The pros and cons seem drastically different now (8.1.2 vs 8.2.0-rc-1):

Label (click me):
                                             improvement confidence      p.value
 arrays\\var-int.js n=25 type="Array"            -1.38 %            0.1449170222
 arrays\\var-int.js n=25 type="Buffer"           -3.60 %        *** 0.0002448808
 arrays\\var-int.js n=25 type="Float32Array"      0.51 %            0.6640802009
 arrays\\var-int.js n=25 type="Float64Array"      0.33 %            0.7028409025
 arrays\\var-int.js n=25 type="Int16Array"       -1.35 %            0.1832062399
 arrays\\var-int.js n=25 type="Int32Array"       -2.18 %            0.0772578995
 arrays\\var-int.js n=25 type="Int8Array"        -2.88 %        *** 0.0006455217
 arrays\\var-int.js n=25 type="Uint16Array"      -3.62 %        *** 0.0003638146
 arrays\\var-int.js n=25 type="Uint32Array"      -1.99 %            0.1343990743
 arrays\\var-int.js n=25 type="Uint8Array"       -3.08 %         ** 0.0074982413

                                                improvement confidence      p.value
 arrays\\zero-float.js n=25 type="Array"            18.03 %        *** 7.646284e-37
 arrays\\zero-float.js n=25 type="Buffer"           21.01 %        *** 7.406994e-40
 arrays\\zero-float.js n=25 type="Float32Array"     20.62 %        *** 1.541712e-31
 arrays\\zero-float.js n=25 type="Float64Array"    -16.98 %        *** 7.101956e-24
 arrays\\zero-float.js n=25 type="Int16Array"       -3.52 %        *** 9.136824e-05
 arrays\\zero-float.js n=25 type="Int32Array"       -0.24 %            7.432021e-01
 arrays\\zero-float.js n=25 type="Int8Array"        19.16 %        *** 3.006861e-29
 arrays\\zero-float.js n=25 type="Uint16Array"      -3.33 %        *** 1.387510e-06
 arrays\\zero-float.js n=25 type="Uint32Array"      -1.14 %            1.474507e-01
 arrays\\zero-float.js n=25 type="Uint8Array"       20.62 %        *** 1.324800e-28

                                              improvement confidence      p.value
 arrays\\zero-int.js n=25 type="Array"            16.56 %        *** 1.737679e-21
 arrays\\zero-int.js n=25 type="Buffer"           20.61 %        *** 7.972851e-34
 arrays\\zero-int.js n=25 type="Float32Array"     20.84 %        *** 7.841709e-36
 arrays\\zero-int.js n=25 type="Float64Array"    -16.23 %        *** 8.517111e-22
 arrays\\zero-int.js n=25 type="Int16Array"       -2.22 %            5.165204e-02
 arrays\\zero-int.js n=25 type="Int32Array"        0.96 %            1.183342e-01
 arrays\\zero-int.js n=25 type="Int8Array"        19.63 %        *** 8.789434e-33
 arrays\\zero-int.js n=25 type="Uint16Array"      -2.96 %         ** 5.486944e-03
 arrays\\zero-int.js n=25 type="Uint32Array"       0.42 %            4.711222e-01
 arrays\\zero-int.js n=25 type="Uint8Array"       21.33 %        *** 8.041571e-33

@vsemozhetbyt

This comment has been minimized.

Show comment
Hide comment
@vsemozhetbyt
Member

vsemozhetbyt commented Jun 23, 2017

@bmeurer, @nodejs/v8 Can you explain the Float64Array degradation (see the comment above) in V8 5.9 with these benchmarks?

https://github.com/nodejs/node/blob/master/benchmark/arrays/zero-float.js
https://github.com/nodejs/node/blob/master/benchmark/arrays/zero-int.js

@watson

This comment has been minimized.

Show comment
Hide comment
@watson

watson Jun 23, 2017

Member

The Opbeat test suite is seeing significant performance degradations on Node 8. I've been trying to debug it for the last two weeks, and have found that one of the major victims seem to be Bluebird. I'd love to provide some benchmarks here if anyone are interested? (and in that case, what type of benchmarks would you prefer?)

Member

watson commented Jun 23, 2017

The Opbeat test suite is seeing significant performance degradations on Node 8. I've been trying to debug it for the last two weeks, and have found that one of the major victims seem to be Bluebird. I'd love to provide some benchmarks here if anyone are interested? (and in that case, what type of benchmarks would you prefer?)

@addaleax

This comment has been minimized.

Show comment
Hide comment
@addaleax

addaleax Jun 23, 2017

Member

@watson That’s definitely something to look into, but to clarify, you are not talking about the 8.2.0 RC, but all versions of Node 8?

Member

addaleax commented Jun 23, 2017

@watson That’s definitely something to look into, but to clarify, you are not talking about the 8.2.0 RC, but all versions of Node 8?

@targos

This comment has been minimized.

Show comment
Hide comment
@targos

targos Jun 23, 2017

Member

@watson Node 8 currently has V8 5.8. It would be interesting to compare that with 8.2.0-rc-1.
Is it possible to test a release candidate on travis?

Member

targos commented Jun 23, 2017

@watson Node 8 currently has V8 5.8. It would be interesting to compare that with 8.2.0-rc-1.
Is it possible to test a release candidate on travis?

@watson

This comment has been minimized.

Show comment
Hide comment
@watson

watson Jun 23, 2017

Member

@addaleax @targos Ah sorry, no. I've only tested it on Node 8.1.2. But I'd be happy to see if the problem is also on 8.2.0-rc-1. I don't think that's easy to do on Travis as it's using nvm which I don't think support RC releases. But I should be able to get the same results locally

Member

watson commented Jun 23, 2017

@addaleax @targos Ah sorry, no. I've only tested it on Node 8.1.2. But I'd be happy to see if the problem is also on 8.2.0-rc-1. I don't think that's easy to do on Travis as it's using nvm which I don't think support RC releases. But I should be able to get the same results locally

@mgol

This comment has been minimized.

Show comment
Hide comment
@mgol

mgol Jun 23, 2017

@targos Travis uses nvm to manage Node versions and nvm doesn't support RCs yet.

But you can download the binary from the site during the build.

EDIT: Simultaneous comment. :)

mgol commented Jun 23, 2017

@targos Travis uses nvm to manage Node versions and nvm doesn't support RCs yet.

But you can download the binary from the site during the build.

EDIT: Simultaneous comment. :)

@SimenB

This comment has been minimized.

Show comment
Hide comment
@SimenB

SimenB Jun 23, 2017

Member

That's wrong, nvm supports rc.

$ nvm install rc
Downloading and installing node v8.2.0-rc.1...
Downloading https://nodejs.org/download/rc//v8.2.0-rc.1/node-v8.2.0-rc.1-darwin-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v8.2.0-rc.1 (npm v5.0.3)
rc -> v8.2.0-rc.1
Clearing mirror cache...
Done!

/cc @ljharb maybe close out creationix/nvm#779

Member

SimenB commented Jun 23, 2017

That's wrong, nvm supports rc.

$ nvm install rc
Downloading and installing node v8.2.0-rc.1...
Downloading https://nodejs.org/download/rc//v8.2.0-rc.1/node-v8.2.0-rc.1-darwin-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v8.2.0-rc.1 (npm v5.0.3)
rc -> v8.2.0-rc.1
Clearing mirror cache...
Done!

/cc @ljharb maybe close out creationix/nvm#779

@mgol

This comment has been minimized.

Show comment
Hide comment
@mgol

mgol Jun 23, 2017

@SimenB Where did you get that? I have the latest stable nvm version (0.33.2) and it doesn't work there.

$ nvm install rc        
Version 'rc' not found - try `nvm ls-remote` to browse available versions.

mgol commented Jun 23, 2017

@SimenB Where did you get that? I have the latest stable nvm version (0.33.2) and it doesn't work there.

$ nvm install rc        
Version 'rc' not found - try `nvm ls-remote` to browse available versions.
@watson

This comment has been minimized.

Show comment
Hide comment
@watson

watson Jun 23, 2017

Member

@SimenB From Travis:

$ nvm install rc
Version 'rc' not found - try `nvm ls-remote` to browse available versions.
Member

watson commented Jun 23, 2017

@SimenB From Travis:

$ nvm install rc
Version 'rc' not found - try `nvm ls-remote` to browse available versions.
@SimenB

This comment has been minimized.

Show comment
Hide comment
@SimenB

SimenB Jun 23, 2017

Member

Huh, lemme check how that works for me...

EDIT: Ah, from zsh-nvm. https://github.com/lukechilds/zsh-nvm. @lukechilds upstream it? ❤️

Member

SimenB commented Jun 23, 2017

Huh, lemme check how that works for me...

EDIT: Ah, from zsh-nvm. https://github.com/lukechilds/zsh-nvm. @lukechilds upstream it? ❤️

@lukechilds

This comment has been minimized.

Show comment
Hide comment
@lukechilds

lukechilds Jun 23, 2017

@SimenB @mgol That's a feature that zsh-nvm adds to nvm. It's not available in nvm on it's own.

lukechilds commented Jun 23, 2017

@SimenB @mgol That's a feature that zsh-nvm adds to nvm. It's not available in nvm on it's own.

@lukechilds

This comment has been minimized.

Show comment
Hide comment
@lukechilds

lukechilds Jun 23, 2017

@SimenB Currently very busy working on something else, but it's on my list.

lukechilds commented Jun 23, 2017

@SimenB Currently very busy working on something else, but it's on my list.

@ljharb

This comment has been minimized.

Show comment
Hide comment
@ljharb

ljharb Jun 23, 2017

nvm absolutely does not yet support RCs; and popularizing hacks to make it work will only make the problem worse - when I do support RCs, everyone who's tried to hack in that support will likely have their installed RC versions break.

ljharb commented Jun 23, 2017

nvm absolutely does not yet support RCs; and popularizing hacks to make it work will only make the problem worse - when I do support RCs, everyone who's tried to hack in that support will likely have their installed RC versions break.

@mhdawson

This comment has been minimized.

Show comment
Hide comment
@mhdawson

mhdawson Jun 23, 2017

Member

@watson, when you say provide some benchmarks, I'd be interested to know what you had in mind. Are they micro-benchmarks are more system level. The Benchmarking WG is still looking for more system level benchmarks to add to the nightly runs. The goal is to cover the main Node.js uses cases and there are still many gaps.

Member

mhdawson commented Jun 23, 2017

@watson, when you say provide some benchmarks, I'd be interested to know what you had in mind. Are they micro-benchmarks are more system level. The Benchmarking WG is still looking for more system level benchmarks to add to the nightly runs. The goal is to cover the main Node.js uses cases and there are still many gaps.

@matthargett

This comment has been minimized.

Show comment
Hide comment
@matthargett

matthargett Jun 23, 2017

@mhdawson you didn't ask me, but for my purposes across several companies that deployed nodejs to production in both embedded (ARM SoC) and microservices (deployed to AWS and Azure) environments over the last ~5 years:

matthargett commented Jun 23, 2017

@mhdawson you didn't ask me, but for my purposes across several companies that deployed nodejs to production in both embedded (ARM SoC) and microservices (deployed to AWS and Azure) environments over the last ~5 years:

@joyeecheung

This comment has been minimized.

Show comment
Hide comment
@joyeecheung

joyeecheung Jun 24, 2017

Member

I've run the egg benchmark (benchmark for the egg framework) with v7.x, v8.x, 2.0-rc, nightly and v8 canary: https://joyeecheung.github.io/egg-benchmark/plot/

All cases are either generator-heavy or async/await-heavy. RC numbers look pretty good. They are not exactly production-level cases but surely more complicated than micro-benchmarks.

Member

joyeecheung commented Jun 24, 2017

I've run the egg benchmark (benchmark for the egg framework) with v7.x, v8.x, 2.0-rc, nightly and v8 canary: https://joyeecheung.github.io/egg-benchmark/plot/

All cases are either generator-heavy or async/await-heavy. RC numbers look pretty good. They are not exactly production-level cases but surely more complicated than micro-benchmarks.

@watson

This comment has been minimized.

Show comment
Hide comment
@watson

watson Jun 25, 2017

Member

@mhdawson I currently don't have any benchmarks as such, but want to add some to our test-suite so that I can easily see how changes I make to our instrumentation code affects the performance of our customers apps. Today I just run one-off tests once in a while.

The degraded performance I've seen on Node.js 8.1.2, is in our general test-suite, where we test all aspects of our code, from the core API, to custom tests verifying that each of the 3rd party modules we instrument still work as expected after our instrumentation have been applied. So the degraded performance might as well be in one of those 3rd party modules and doesn't necessarily have anything to do with our code.

If my numbers can be helpful in any way, I'll be happy to create a proper benchmark test. Either with this issue in mind, or in a more general purpose way for the Benchmarking WG 😃

Member

watson commented Jun 25, 2017

@mhdawson I currently don't have any benchmarks as such, but want to add some to our test-suite so that I can easily see how changes I make to our instrumentation code affects the performance of our customers apps. Today I just run one-off tests once in a while.

The degraded performance I've seen on Node.js 8.1.2, is in our general test-suite, where we test all aspects of our code, from the core API, to custom tests verifying that each of the 3rd party modules we instrument still work as expected after our instrumentation have been applied. So the degraded performance might as well be in one of those 3rd party modules and doesn't necessarily have anything to do with our code.

If my numbers can be helpful in any way, I'll be happy to create a proper benchmark test. Either with this issue in mind, or in a more general purpose way for the Benchmarking WG 😃

@psmarshall

This comment has been minimized.

Show comment
Hide comment
@psmarshall

psmarshall Jun 26, 2017

In http check_invalid_header_char and check_is_http_token, the string passed to the benchmark is is a result of a regex match in Benchmark.prototype._parseArgs, which results in a split string type (basically, a string that is represented as a pointer into an existing string plus a length). These split strings aren't supported in the inlined version of StringCharCodeAt, so we call into the builtin instead. Basically these benchmarks are dominated by the time it takes to perform StringCharCodeAt. They don't seem to be a good measure of performance either, e.g. if you pass a non-split string, they are faster with turbofan.

The path basename and dirname benchmarks suffer the same problem.

events seems to have improved since last measurement, I get the following:

events/ee-listeners-many.js: n=5000000,                46.73%
events/ee-add-remove.js: n=250000,                     20.28%
events/ee-listeners.js: n=5000000,                     80.46%
events/ee-once.js: n=20000000,                         16.28%
events/ee-emit.js: n=2000000,                         -16.64%
events/ee-emit-multi-args.js: n=2000000,              -14.21%
events/ee-listener-count-on-prototype.js: n=50000000, 184.55%

psmarshall commented Jun 26, 2017

In http check_invalid_header_char and check_is_http_token, the string passed to the benchmark is is a result of a regex match in Benchmark.prototype._parseArgs, which results in a split string type (basically, a string that is represented as a pointer into an existing string plus a length). These split strings aren't supported in the inlined version of StringCharCodeAt, so we call into the builtin instead. Basically these benchmarks are dominated by the time it takes to perform StringCharCodeAt. They don't seem to be a good measure of performance either, e.g. if you pass a non-split string, they are faster with turbofan.

The path basename and dirname benchmarks suffer the same problem.

events seems to have improved since last measurement, I get the following:

events/ee-listeners-many.js: n=5000000,                46.73%
events/ee-add-remove.js: n=250000,                     20.28%
events/ee-listeners.js: n=5000000,                     80.46%
events/ee-once.js: n=20000000,                         16.28%
events/ee-emit.js: n=2000000,                         -16.64%
events/ee-emit-multi-args.js: n=2000000,              -14.21%
events/ee-listener-count-on-prototype.js: n=50000000, 184.55%
@mcollina

This comment has been minimized.

Show comment
Hide comment
@mcollina

mcollina Jun 26, 2017

Member
Member

mcollina commented Jun 26, 2017

@targos

This comment has been minimized.

Show comment
Hide comment
@targos

targos Jun 26, 2017

Member

@mcollina do you mean the String(str) function?

Member

targos commented Jun 26, 2017

@mcollina do you mean the String(str) function?

@addaleax

This comment has been minimized.

Show comment
Hide comment
@addaleax

addaleax Jun 26, 2017

Member

@targos I think @mcollina is talking about something like https://github.com/davidmarkclements/flatstr#how-does-it-work (calling Number(str) has the side effect of flattening the string into simple linear storage).

Member

addaleax commented Jun 26, 2017

@targos I think @mcollina is talking about something like https://github.com/davidmarkclements/flatstr#how-does-it-work (calling Number(str) has the side effect of flattening the string into simple linear storage).

@psmarshall

This comment has been minimized.

Show comment
Hide comment
@psmarshall

psmarshall Jun 26, 2017

I think in real apps we would likely see all sorts of different internal V8 string types, meaning the inlined fastpath isn't that important anyway

psmarshall commented Jun 26, 2017

I think in real apps we would likely see all sorts of different internal V8 string types, meaning the inlined fastpath isn't that important anyway

@mhdawson

This comment has been minimized.

Show comment
Hide comment
@mhdawson

mhdawson Jun 26, 2017

Member

@watson I think a benchmark that shows we are not regressing performance of APMs would be useful. It would need run run in a reasonable amount of time (say 30 mins or less) and generate a small number of values (say 2 ?).

Member

mhdawson commented Jun 26, 2017

@watson I think a benchmark that shows we are not regressing performance of APMs would be useful. It would need run run in a reasonable amount of time (say 30 mins or less) and generate a small number of values (say 2 ?).

@mhdawson

This comment has been minimized.

Show comment
Hide comment
@mhdawson

mhdawson Jun 26, 2017

Member

@matthargett thanks for the input. In terms of the SSR benchmarks they look more front end, do they run directly on Node.js as well ?

Member

mhdawson commented Jun 26, 2017

@matthargett thanks for the input. In terms of the SSR benchmarks they look more front end, do they run directly on Node.js as well ?

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jun 29, 2017

Member

Can we get someone to help drive this through to resolution? I can't do it unfortunately but it needs someone, or some people, who are interested enough in seeing an answer come out of this to make sure that the CTC has either enough data, or solid enough recommendations from trusted parties, in order to make a decision. The alternative is to make a implicit decision for the negative by letting this thread go stale while we wait for Node 9, and even though I'd personally be comfortable with that I don't think it's responsible decision making on our part!

Member

rvagg commented Jun 29, 2017

Can we get someone to help drive this through to resolution? I can't do it unfortunately but it needs someone, or some people, who are interested enough in seeing an answer come out of this to make sure that the CTC has either enough data, or solid enough recommendations from trusted parties, in order to make a decision. The alternative is to make a implicit decision for the negative by letting this thread go stale while we wait for Node 9, and even though I'd personally be comfortable with that I don't think it's responsible decision making on our part!

@rvagg

This comment has been minimized.

Show comment
Hide comment
@targos

This comment has been minimized.

Show comment
Hide comment
@targos

targos Jun 29, 2017

Member

I propose that we don't update V8 to 5.9 on v8.x and wait for V8 6.0. It should be stable by the end of July.
It is currently shipped in Chrome beta and the API is frozen. I would be in favor of updating our master branch earlier so that we can focus on performance issues with that version and cherry-pick fixes from 6.1.
@fhinkel @bmeurer what do you think?

Member

targos commented Jun 29, 2017

I propose that we don't update V8 to 5.9 on v8.x and wait for V8 6.0. It should be stable by the end of July.
It is currently shipped in Chrome beta and the API is frozen. I would be in favor of updating our master branch earlier so that we can focus on performance issues with that version and cherry-pick fixes from 6.1.
@fhinkel @bmeurer what do you think?

@addaleax

This comment has been minimized.

Show comment
Hide comment
@addaleax

addaleax Jun 29, 2017

Member

I wouldn’t say that we are in that much of a hurry anyway, at the very least we should wait until after the July security release, and until nodejs/node#13804 is resolved.

Member

addaleax commented Jun 29, 2017

I wouldn’t say that we are in that much of a hurry anyway, at the very least we should wait until after the July security release, and until nodejs/node#13804 is resolved.

@mcollina

This comment has been minimized.

Show comment
Hide comment
@mcollina

mcollina Jun 29, 2017

Member

Can we make V8 6.0 have the same ABI of 5.8?

Member

mcollina commented Jun 29, 2017

Can we make V8 6.0 have the same ABI of 5.8?

@targos

This comment has been minimized.

Show comment
Hide comment
@targos

targos Jun 29, 2017

Member

@mcollina 5.8 was patched on v8.x to have the same ABI as 6.0.

Member

targos commented Jun 29, 2017

@mcollina 5.8 was patched on v8.x to have the same ABI as 6.0.

@mcollina

This comment has been minimized.

Show comment
Hide comment
@mcollina

mcollina Jun 29, 2017

Member

I am +1 on updating early and then cherry-picking fixes from 6.1. I would like to make mid-August as our deadline for a release with turbofan. That will give us a couple of months of testing before 8 become LTS. Any later than that, and we might have to stick with V8 5.8.

I'm also ok in releasing with V8 5.9, and then migrate to 6.0 at the end of July. A lot of issues will not come out unless we do a full release. The sooner we start the better.

I agree with @bmeurer that it is probably better to have V8 6.0 (plus cherry-picks) when node 8 goes LTS.

Member

mcollina commented Jun 29, 2017

I am +1 on updating early and then cherry-picking fixes from 6.1. I would like to make mid-August as our deadline for a release with turbofan. That will give us a couple of months of testing before 8 become LTS. Any later than that, and we might have to stick with V8 5.8.

I'm also ok in releasing with V8 5.9, and then migrate to 6.0 at the end of July. A lot of issues will not come out unless we do a full release. The sooner we start the better.

I agree with @bmeurer that it is probably better to have V8 6.0 (plus cherry-picks) when node 8 goes LTS.

@jasnell

This comment has been minimized.

Show comment
Hide comment
@jasnell

jasnell Jun 29, 2017

Member

I'm good with skipping 5.9 on 8.x and jumping to 6.0 no later than mid august.

Member

jasnell commented Jun 29, 2017

I'm good with skipping 5.9 on 8.x and jumping to 6.0 no later than mid august.

@bmeurer

This comment has been minimized.

Show comment
Hide comment
@bmeurer

bmeurer Jun 30, 2017

Member

I generally support this idea. But it would be nice to get early accessible builds of Node 8 with 6.0 then. Can you maybe do like one or two RCs with 6.0 (which is pretty much frozen at this point), so people can test their apps and we can figure out which cherry-picks we need from 6.1 and what we need to to fix on 6.1 still?

Member

bmeurer commented Jun 30, 2017

I generally support this idea. But it would be nice to get early accessible builds of Node 8 with 6.0 then. Can you maybe do like one or two RCs with 6.0 (which is pretty much frozen at this point), so people can test their apps and we can figure out which cherry-picks we need from 6.1 and what we need to to fix on 6.1 still?

@bmeurer

This comment has been minimized.

Show comment
Hide comment
@bmeurer

bmeurer Jun 30, 2017

Member

Also it'd be awesome to get an agreement on some kind of standard benchmark suite to reduce uncertainty somewhat in these situations. Like "don't significantly regress on AcmeAir, JetStream, ARES-6, TypeScript compiling itself and Webpack bundling some big app"?

Member

bmeurer commented Jun 30, 2017

Also it'd be awesome to get an agreement on some kind of standard benchmark suite to reduce uncertainty somewhat in these situations. Like "don't significantly regress on AcmeAir, JetStream, ARES-6, TypeScript compiling itself and Webpack bundling some big app"?

@targos targos referenced this issue Jun 30, 2017

Closed

deps: update V8 to 6.0 #14004

8 of 8 tasks complete
@targos

This comment has been minimized.

Show comment
Hide comment
@targos

targos Jun 30, 2017

Member

I opened nodejs/node#14004 to track the update to V8 6.0.

Member

targos commented Jun 30, 2017

I opened nodejs/node#14004 to track the update to V8 6.0.

@bmeurer

This comment has been minimized.

Show comment
Hide comment
@bmeurer

bmeurer Jun 30, 2017

Member

Nice, that was quick :-)

Member

bmeurer commented Jun 30, 2017

Nice, that was quick :-)

@MylesBorins

This comment has been minimized.

Show comment
Hide comment
@MylesBorins

MylesBorins Jul 1, 2017

Member

I want to chime in that focusing the decision primarily on performance at this point seems to be missing the point

A large portion of the decision was made due to the backporting and security concerns of sticking with the old pipeline for LTS. It is important that we do not lose sight of those challenges while making the decision.

While performance may not be at 100% of the old pipeline, this can improve over the 30 months of LTS. We will be unable to improve the security story or keep up with backports if we do not upgrade

edit: removed disingenuous as it was harsh

Member

MylesBorins commented Jul 1, 2017

I want to chime in that focusing the decision primarily on performance at this point seems to be missing the point

A large portion of the decision was made due to the backporting and security concerns of sticking with the old pipeline for LTS. It is important that we do not lose sight of those challenges while making the decision.

While performance may not be at 100% of the old pipeline, this can improve over the 30 months of LTS. We will be unable to improve the security story or keep up with backports if we do not upgrade

edit: removed disingenuous as it was harsh

@bmeurer

This comment has been minimized.

Show comment
Hide comment
@bmeurer
Member

bmeurer commented Jul 6, 2017

@mhdawson

This comment has been minimized.

Show comment
Hide comment
@mhdawson

mhdawson Jul 6, 2017

Member

I agree that performance does not necessarily have to be at 100% but I think @rvagg (sorry if I'm mis-interpreting) is saying that we need data to be able to make an informed decision which I agree with.

It is important to have enough data so that we can make an informed decision and be able to set expectations. If we think the right decision is to take a 20% performance hit (just an example not saying this is the case) and then improve over the LTS cycle that may be ok provided we communicate that ahead of time. On the other hand if don't have any idea what that impact is and end users discover a large performance regression in the LTS line that may impact confidence in the project.

Member

mhdawson commented Jul 6, 2017

I agree that performance does not necessarily have to be at 100% but I think @rvagg (sorry if I'm mis-interpreting) is saying that we need data to be able to make an informed decision which I agree with.

It is important to have enough data so that we can make an informed decision and be able to set expectations. If we think the right decision is to take a 20% performance hit (just an example not saying this is the case) and then improve over the LTS cycle that may be ok provided we communicate that ahead of time. On the other hand if don't have any idea what that impact is and end users discover a large performance regression in the LTS line that may impact confidence in the project.

@addaleax

This comment has been minimized.

Show comment
Hide comment
@addaleax

addaleax Jul 6, 2017

Member

@mhdawson Just so we’re on the same page, what I understand Myles as saying, and what I understood to be the outcome #99 and all prior discussion that we had before this issue was opened, is that there are other very important factors that play into this decision that aren’t even related to performance, such as the impact it has on even just our ability to support Node 8 for the next 2 years.

That being said: We have zero indication that real-world applications perform worse with TF+I, and everybody who I have seen give numbers so far has seen something between a 5 % and a 20 % performance increase, which matches the numbers reported by the V8 team (independently of Node) iirc.

Yes, it’s unfortunate that we couldn’t get more feedback so far, and we should keep trying to get more, but if 5 out of 6 applications perform 15 % better, one performs 15 % worse (and to reiterate, that is hypothetical), we have a better support story for the future and the opportunity to backport further performance improvements from future V8 versions, then for me that’s enough to make this decision in favour of TF+I in Node 8 (again).

Member

addaleax commented Jul 6, 2017

@mhdawson Just so we’re on the same page, what I understand Myles as saying, and what I understood to be the outcome #99 and all prior discussion that we had before this issue was opened, is that there are other very important factors that play into this decision that aren’t even related to performance, such as the impact it has on even just our ability to support Node 8 for the next 2 years.

That being said: We have zero indication that real-world applications perform worse with TF+I, and everybody who I have seen give numbers so far has seen something between a 5 % and a 20 % performance increase, which matches the numbers reported by the V8 team (independently of Node) iirc.

Yes, it’s unfortunate that we couldn’t get more feedback so far, and we should keep trying to get more, but if 5 out of 6 applications perform 15 % better, one performs 15 % worse (and to reiterate, that is hypothetical), we have a better support story for the future and the opportunity to backport further performance improvements from future V8 versions, then for me that’s enough to make this decision in favour of TF+I in Node 8 (again).

@mcollina

This comment has been minimized.

Show comment
Hide comment
@mcollina

mcollina Jul 7, 2017

Member

I do not think we will ever had any objective data on this matter. This is unfortunate, but it is the nature of software: applications are mostly closed source. I think each one of us should make their tests on the closed source code they have access on and make an opinion about it.

I am finding very hard to work with Node 8.1, as it is very inconsistent. Some things are crankshaft, some are turbofan, and there are several things that are already been fixed on 8.2-rc.1 (also because crankshaft has been disabled). The sooner we ship the better, but we should have consensus with this change.

Nevertheless, I think we will have to float a significant amount of patches on top of V8 5.9 or 6.0.

Member

mcollina commented Jul 7, 2017

I do not think we will ever had any objective data on this matter. This is unfortunate, but it is the nature of software: applications are mostly closed source. I think each one of us should make their tests on the closed source code they have access on and make an opinion about it.

I am finding very hard to work with Node 8.1, as it is very inconsistent. Some things are crankshaft, some are turbofan, and there are several things that are already been fixed on 8.2-rc.1 (also because crankshaft has been disabled). The sooner we ship the better, but we should have consensus with this change.

Nevertheless, I think we will have to float a significant amount of patches on top of V8 5.9 or 6.0.

@mhdawson

This comment has been minimized.

Show comment
Hide comment
@mhdawson

mhdawson Jul 7, 2017

Member

@addaleax I'm not disagreeing with any of the points above and I'm not trying to say that performance is the only element in the decision. I agree that some results being better, some worse, is just fine. On the other hand I do think it is something we need to acknowledge and do our best to address.

What I think is important (others might disagree) is that we:

  • document/explain the steps we've taken to understand and mitigate the risk.
  • feel comfortable that the explanation makes a good case that we've done the best we can to the larger community.
  • set external expectations for 8.x based on our investigation/understanding.

I think what @rvagg asked for in #146 (comment) is that somebody step up to co-ordinate/psh the work required to generate the data required and to document the case we are going to make that we have done the required due diligence.

A first step might be to write up what we can say today based on the investigation/testing we have done so far and see how comfortable we would be as a group with that as our explanation for what we did to mitigate the risk. We might decide its good enough or that there are some additional things we should try to do between now and the LTS release.

Member

mhdawson commented Jul 7, 2017

@addaleax I'm not disagreeing with any of the points above and I'm not trying to say that performance is the only element in the decision. I agree that some results being better, some worse, is just fine. On the other hand I do think it is something we need to acknowledge and do our best to address.

What I think is important (others might disagree) is that we:

  • document/explain the steps we've taken to understand and mitigate the risk.
  • feel comfortable that the explanation makes a good case that we've done the best we can to the larger community.
  • set external expectations for 8.x based on our investigation/understanding.

I think what @rvagg asked for in #146 (comment) is that somebody step up to co-ordinate/psh the work required to generate the data required and to document the case we are going to make that we have done the required due diligence.

A first step might be to write up what we can say today based on the investigation/testing we have done so far and see how comfortable we would be as a group with that as our explanation for what we did to mitigate the risk. We might decide its good enough or that there are some additional things we should try to do between now and the LTS release.

@evanlucas

This comment has been minimized.

Show comment
Hide comment
@evanlucas

evanlucas Jul 7, 2017

Member

To add in a data point on the perf, I wrote a more real world, slimmed down and basic version of something we are running in production. (https://github.com/evanlucas/node-benchmarks/tree/master/api-gateway)

It's pretty basic, but a lot more realistic than a res.end('hello, world')

evanhlucas_2017-jul-07

I think the sooner we get 5.9+ into node 8.x, the better. Then we can actually identify real world performance problems (if they exist) and fix them before it goes LTS

Member

evanlucas commented Jul 7, 2017

To add in a data point on the perf, I wrote a more real world, slimmed down and basic version of something we are running in production. (https://github.com/evanlucas/node-benchmarks/tree/master/api-gateway)

It's pretty basic, but a lot more realistic than a res.end('hello, world')

evanhlucas_2017-jul-07

I think the sooner we get 5.9+ into node 8.x, the better. Then we can actually identify real world performance problems (if they exist) and fix them before it goes LTS

@MylesBorins

This comment has been minimized.

Show comment
Hide comment
@MylesBorins

MylesBorins Jul 7, 2017

Member

A first step might be to write up what we can say today based on the investigation/testing we have done so far and see how comfortable we would be as a group with that as our explanation for what we did to mitigate the risk.

@mhdawson from my perspective #99 was a breakdown of exactly these concerns. We created a decision matrix, ran early benchmarks, and voted as a committee. While it was discussed that we would be willing to reverse the decision if there were major problems, I was not under the impression that the default would be for us to re-litigate the decision prior to landing. If anything the onus would be on individuals to bring forth problematic benchmarks, no vice versa.

As far as communicating with the community, the original decision was followed up by a blog post which received very positive feedback. We should likely prepare another if / when the new pipeline lands to make clear expectations... but at this point I genuinely believe our engaged community has an idea of what to expect.

from @rvagg's comment

Can we get someone to help drive this through to resolution?

This is somewhat frustrating for me. We had driven through a resolution and made a decision. We have been moving forward and working closely with the V8 team to get things working. At a certain point we are where we are, we can find problems, work towards fixing + improving them. Personally I have invested over 50 hours in various meetings, putting together documents, and driving consensus on this issue. I know there are various members of the Core Team + the V8 team who have put in similar hours, and potentially more.

I would like to humbly request that individuals who would like to see us not ship with V8 6.0 take the time to put together the documentation that is being requested. If individuals do not have the time to do so we should move forward with our original decision, put together a blog post explaining the state of the decision, and spend our time improving the platform.

Member

MylesBorins commented Jul 7, 2017

A first step might be to write up what we can say today based on the investigation/testing we have done so far and see how comfortable we would be as a group with that as our explanation for what we did to mitigate the risk.

@mhdawson from my perspective #99 was a breakdown of exactly these concerns. We created a decision matrix, ran early benchmarks, and voted as a committee. While it was discussed that we would be willing to reverse the decision if there were major problems, I was not under the impression that the default would be for us to re-litigate the decision prior to landing. If anything the onus would be on individuals to bring forth problematic benchmarks, no vice versa.

As far as communicating with the community, the original decision was followed up by a blog post which received very positive feedback. We should likely prepare another if / when the new pipeline lands to make clear expectations... but at this point I genuinely believe our engaged community has an idea of what to expect.

from @rvagg's comment

Can we get someone to help drive this through to resolution?

This is somewhat frustrating for me. We had driven through a resolution and made a decision. We have been moving forward and working closely with the V8 team to get things working. At a certain point we are where we are, we can find problems, work towards fixing + improving them. Personally I have invested over 50 hours in various meetings, putting together documents, and driving consensus on this issue. I know there are various members of the Core Team + the V8 team who have put in similar hours, and potentially more.

I would like to humbly request that individuals who would like to see us not ship with V8 6.0 take the time to put together the documentation that is being requested. If individuals do not have the time to do so we should move forward with our original decision, put together a blog post explaining the state of the decision, and spend our time improving the platform.

@refack

This comment has been minimized.

Show comment
Hide comment
@refack

refack Jul 8, 2017

Member

Ref: for me nodejs/node#14131 is a good example of the low correlation between our micro-benchmarks and real-world impact. Something that should be kept in mind. The micro-benchmark suite has local value (evaluating a small change PR) but IMHO should not be the deciding factor in such big changes as V8 version changes.

[free association, no disrespect regarding ant metaphor] "Is a frame of reference valid for a specific discussion": https://youtu.be/D3GVVkPb3OI?t=3m31s

Member

refack commented Jul 8, 2017

Ref: for me nodejs/node#14131 is a good example of the low correlation between our micro-benchmarks and real-world impact. Something that should be kept in mind. The micro-benchmark suite has local value (evaluating a small change PR) but IMHO should not be the deciding factor in such big changes as V8 version changes.

[free association, no disrespect regarding ant metaphor] "Is a frame of reference valid for a specific discussion": https://youtu.be/D3GVVkPb3OI?t=3m31s

@refack refack referenced this issue Jul 8, 2017

Closed

buffer: remove MAX_SAFE_INTEGER check on length #14131

2 of 2 tasks complete
@jasnell

This comment has been minimized.

Show comment
Hide comment
@jasnell

jasnell Jul 10, 2017

Member

Just catching up on the conversation and no where near through all of the comments... however, I will say that I agree with @MylesBorins that I had assumed the decision had already been made. Yes, we needed to make sure there were no significant regressions but the intention has been to move forward with 6.0 in 8.x -- that's why we delayed the 8.0.0 release and landed all those ABI compatibility patches, and is the expectation that we set with users. At this point, I think the burden is on those who may not want 6.0 to land in 8.x to justify why we shouldn't rather than the other way around.

Member

jasnell commented Jul 10, 2017

Just catching up on the conversation and no where near through all of the comments... however, I will say that I agree with @MylesBorins that I had assumed the decision had already been made. Yes, we needed to make sure there were no significant regressions but the intention has been to move forward with 6.0 in 8.x -- that's why we delayed the 8.0.0 release and landed all those ABI compatibility patches, and is the expectation that we set with users. At this point, I think the burden is on those who may not want 6.0 to land in 8.x to justify why we shouldn't rather than the other way around.

@MylesBorins

This comment has been minimized.

Show comment
Hide comment
@MylesBorins

MylesBorins Jul 11, 2017

Member

I would like to propose that at this time we should close this issue and open a new issue to focus on the communications that will be required when we finally land TF+I.

I believe we are less than two weeks away from a stable branch cut on 6.0. I've synced with the V8 team on the current problems present in nodejs/node#14004 and they will work with us on getting things fixed

Member

MylesBorins commented Jul 11, 2017

I would like to propose that at this time we should close this issue and open a new issue to focus on the communications that will be required when we finally land TF+I.

I believe we are less than two weeks away from a stable branch cut on 6.0. I've synced with the V8 team on the current problems present in nodejs/node#14004 and they will work with us on getting things fixed

@rvagg

This comment has been minimized.

Show comment
Hide comment
@rvagg

rvagg Jul 17, 2017

Member

Sorry to hear there's a difference in expectations at the heart of this discussion. This, from @MylesBorins' blog post is the sentiment that I've been working on (emphasis mine):

We want to give ourselves the option to ship the Node.js 8.x release line with the TurboFan + Ignition pipeline, which will become the default in V8 5.9. This would allow our next LTS release line to run on a more modern compiler + jit pipeline, making backporting easier and giving us a longer support contract from the V8 team.

Reviewing #99 I can see there are both the "give us the option" sentiment and also the "we will upgrade" sentiment represented in there. I suspect that some of us assumed that the 5.8 delay in 8.0.0 was to give us the option to go 5.9+ during 8.x should it make sense (requiring an additional decision point, which is what I've been trying to push for here), but others were assuming that we were voting for the clear path to upgrading to 5.9+ during 8.x and that 5.8 + the delay for 8.0.0 were just steps in that process.

I'm not going to belabor this point as it seems that most people engaging here are just frustrated that we're even having the discussion and want to get on with TF+I, but if someone else wants to make this a voting point then please do so. However I think this whole issue points toward the need for greater clarity when doing this kind of non-trivial planning and ensuring that everyone involved is clear on what we're agreeing on and that our language is consistent.

Member

rvagg commented Jul 17, 2017

Sorry to hear there's a difference in expectations at the heart of this discussion. This, from @MylesBorins' blog post is the sentiment that I've been working on (emphasis mine):

We want to give ourselves the option to ship the Node.js 8.x release line with the TurboFan + Ignition pipeline, which will become the default in V8 5.9. This would allow our next LTS release line to run on a more modern compiler + jit pipeline, making backporting easier and giving us a longer support contract from the V8 team.

Reviewing #99 I can see there are both the "give us the option" sentiment and also the "we will upgrade" sentiment represented in there. I suspect that some of us assumed that the 5.8 delay in 8.0.0 was to give us the option to go 5.9+ during 8.x should it make sense (requiring an additional decision point, which is what I've been trying to push for here), but others were assuming that we were voting for the clear path to upgrading to 5.9+ during 8.x and that 5.8 + the delay for 8.0.0 were just steps in that process.

I'm not going to belabor this point as it seems that most people engaging here are just frustrated that we're even having the discussion and want to get on with TF+I, but if someone else wants to make this a voting point then please do so. However I think this whole issue points toward the need for greater clarity when doing this kind of non-trivial planning and ensuring that everyone involved is clear on what we're agreeing on and that our language is consistent.

@rvagg rvagg closed this Jul 17, 2017

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.