Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lib: revert primordials in a hot path #38248

Closed
wants to merge 2 commits into from

Conversation

aduh95
Copy link
Contributor

@aduh95 aduh95 commented Apr 15, 2021

Evidence has shown that use of primordials have sometimes an impact of
performance. This commit reverts the changes who are most likely to be
responsible for performance regression in the HTTP response path.

This is an alternative to #38246. My assumption would this PR has the same effect on benchmark results.

  • Using %Function.prototype% instead of () => {} sometimes decrease performance (maybe because V8 doesn't inline %Function.prototype%?).
  • Using primordials.FunctionPrototypeCall or primordials.ReflectApply to call super constructor (rather than accessing .call()) has shown to sometimes decrease performance in previous PRs.
  • Sometimes using primordials.FunctionPrototypeBind is less performant than accessing .bind().
  • Buffer.prototype.slice can be much faster than %TypedArrayPrototype.slice%.

If this PR shows same performance as #38246, I'd like to run several benchmarks to identify what are the changes that actually have an impact on HTTP performance.

EDIT: Added changes:

  • All FunctionPrototypeCall and ReflectApply on hot path have been replaced with .call() or .apply().
  • Array prototype methods that mutate the array (ArrayPrototypePush, ArrayPrototypeSplice, etc.) have been replaced with the non-primordials equivalent.
  • ArrayPrototypeForEach on hot path have been replaced with for(;;) loops (which seems the most performance alternative).
  • StringPrototypeToLowerCase in internal/utils have been replaced with .toLowerCase() based on lib: revert primordials in a hot path #38246 (comment).
  • internal/util/debuglog have been refactored to avoid creating SafeArrayIterator in most cases.

@aduh95 aduh95 added the needs-benchmark-ci PR that need a benchmark CI run. label Apr 15, 2021
@aduh95 aduh95 requested a review from mcollina April 15, 2021 13:16
@nodejs-github-bot nodejs-github-bot added lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. labels Apr 15, 2021
@aduh95
Copy link
Contributor Author

aduh95 commented Apr 16, 2021

Benchmark CI (util & streams): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1000/

Benchmark CI (http/client-request-body): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1001/ (queued, will 404 until it starts)
Benchmark CI (http/cluster): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1002/ (queued, will 404 until it starts)
Benchmark CI (http/end-vs-write-end): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1003/ (queued, will 404 until it starts)
Benchmark CI (http/headers): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1004/ (queued, will 404 until it starts)
Benchmark CI (http/incoming_headers): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1005/ (queued, will 404 until it starts)
Benchmark CI (http/set_header): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1006/ (queued, will 404 until it starts)
Benchmark CI (http/upgrade): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1007/ (queued, will 404 until it starts)
Benchmark CI (http/check*): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1008/ (queued, will 404 until it starts)
Benchmark CI (http/simple): https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1009/ (queued, will 404 until it starts)

@mcollina
Copy link
Member

It would need a benchmark CI run of http as well.

This commit looks a lot cleaner than #38246 and likely along the lines of what you and @targos asked. I'll check this myself as well and report back.

Copy link
Member

@benjamingr benjamingr left a comment

Choose a reason for hiding this comment

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

LGTM if benchmarks look as good as the other one

lib/internal/timers.js Outdated Show resolved Hide resolved
lib/events.js Outdated Show resolved Hide resolved
@aduh95
Copy link
Contributor Author

aduh95 commented Apr 17, 2021

Benchmark CI got stuck on http/cluster.js and http/simple.js, I'm not sure what's happening, but we don't have results for those benchmarks.
Overall the results look better (more extreme) than those in #38246, but also less confident. Both runs were made on different machines, it could be explained by a difference in architecture and/or hardware.

                                                                                               confidence improvement accuracy (*)    (**)   (***)
streams/creation.js kind='duplex' n=50000000                                                                   0.99 %       ±2.65%  ±3.53%  ±4.60%
streams/creation.js kind='readable' n=50000000                                                          *      2.30 %       ±2.02%  ±2.69%  ±3.50%
streams/creation.js kind='transform' n=50000000                                                                0.56 %       ±2.73%  ±3.63%  ±4.73%
streams/creation.js kind='writable' n=50000000                                                                 0.23 %       ±1.19%  ±1.59%  ±2.07%
streams/pipe.js n=5000000                                                                             ***     21.02 %       ±2.39%  ±3.18%  ±4.15%
streams/pipe-object-mode.js n=5000000                                                                 ***     29.90 %       ±5.99%  ±8.00% ±10.49%
streams/readable-async-iterator.js sync='no' n=100000                                                 ***      6.81 %       ±3.16%  ±4.21%  ±5.48%
streams/readable-async-iterator.js sync='yes' n=100000                                                         2.40 %       ±3.77%  ±5.02%  ±6.54%
streams/readable-bigread.js n=1000                                                                     **      8.26 %       ±5.17%  ±6.89%  ±8.98%
streams/readable-bigunevenread.js n=1000                                                               **     10.73 %       ±7.51%  ±9.99% ±13.00%
streams/readable-boundaryread.js type='buffer' n=2000                                                 ***     21.26 %       ±3.04%  ±4.05%  ±5.28%
streams/readable-boundaryread.js type='string' n=2000                                                   *      5.10 %       ±4.19%  ±5.57%  ±7.25%
streams/readable-from.js n=10000000                                                                   ***     18.44 %       ±3.98%  ±5.30%  ±6.89%
streams/readable-readall.js n=5000                                                                    ***     21.45 %      ±10.97% ±14.60% ±19.01%
streams/readable-unevenread.js n=1000                                                                  **      7.70 %       ±4.58%  ±6.09%  ±7.93%
streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='no' n=2000000                         -0.91 %       ±3.09%  ±4.15%  ±5.49%
streams/writable-manywrites.js len=1024 callback='no' writev='no' sync='yes' n=2000000                         1.39 %       ±3.70%  ±4.94%  ±6.45%
streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='no' n=2000000                        -0.43 %       ±2.13%  ±2.83%  ±3.69%
streams/writable-manywrites.js len=1024 callback='no' writev='yes' sync='yes' n=2000000                        1.70 %       ±2.98%  ±3.96%  ±5.15%
streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='no' n=2000000                        -0.35 %       ±1.21%  ±1.61%  ±2.10%
streams/writable-manywrites.js len=1024 callback='yes' writev='no' sync='yes' n=2000000                        2.79 %       ±4.08%  ±5.43%  ±7.07%
streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='no' n=2000000                        2.22 %       ±2.53%  ±3.36%  ±4.38%
streams/writable-manywrites.js len=1024 callback='yes' writev='yes' sync='yes' n=2000000                       0.45 %       ±3.27%  ±4.35%  ±5.67%
streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='no' n=2000000                        -1.16 %       ±1.35%  ±1.80%  ±2.34%
streams/writable-manywrites.js len=32768 callback='no' writev='no' sync='yes' n=2000000                       -0.50 %       ±1.32%  ±1.75%  ±2.28%
streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='no' n=2000000                       -2.06 %       ±2.85%  ±3.81%  ±5.00%
streams/writable-manywrites.js len=32768 callback='no' writev='yes' sync='yes' n=2000000                       0.40 %       ±2.18%  ±2.90%  ±3.77%
streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='no' n=2000000                       -1.06 %       ±1.52%  ±2.03%  ±2.64%
streams/writable-manywrites.js len=32768 callback='yes' writev='no' sync='yes' n=2000000                      -0.02 %       ±0.90%  ±1.20%  ±1.57%
streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='no' n=2000000                      -1.30 %       ±1.43%  ±1.91%  ±2.48%
streams/writable-manywrites.js len=32768 callback='yes' writev='yes' sync='yes' n=2000000                     -0.52 %       ±1.74%  ±2.32%  ±3.02%
util/format.js type='many-%' n=100000                                                                          1.38 %       ±4.87%  ±6.48%  ±8.44%
util/format.js type='no-replace-2' n=100000                                                                    0.92 %       ±6.18%  ±8.22% ±10.69%
util/format.js type='no-replace' n=100000                                                                      0.98 %       ±4.88%  ±6.50%  ±8.46%
util/format.js type='number' n=100000                                                                          5.47 %       ±5.67%  ±7.55%  ±9.83%
util/format.js type='object-%s' n=100000                                                                       1.00 %       ±2.29%  ±3.05%  ±3.98%
util/format.js type='object-to-string' n=100000                                                               -1.36 %       ±5.14%  ±6.85%  ±8.94%
util/format.js type='only-objects' n=100000                                                                    4.16 %       ±4.33%  ±5.82%  ±7.69%
util/format.js type='replace-object' n=100000                                                                 -3.73 %       ±5.00%  ±6.66%  ±8.67%
util/format.js type='string-2' n=100000                                                                        2.87 %       ±4.66%  ±6.21%  ±8.08%
util/format.js type='string' n=100000                                                                         -3.53 %       ±6.92%  ±9.25% ±12.13%
util/format.js type='unknown' n=100000                                                                         2.99 %       ±4.94%  ±6.58%  ±8.58%
util/inspect-array.js type='denseArray' len=100000 n=500                                                *     -4.04 %       ±3.71%  ±4.93%  ±6.42%
util/inspect-array.js type='denseArray' len=100 n=500                                                          1.83 %       ±4.89%  ±6.52%  ±8.49%
util/inspect-array.js type='denseArray_showHidden' len=100000 n=500                                           -0.63 %       ±3.76%  ±5.01%  ±6.53%
util/inspect-array.js type='denseArray_showHidden' len=100 n=500                                              -0.15 %       ±3.63%  ±4.83%  ±6.28%
util/inspect-array.js type='mixedArray' len=100000 n=500                                                      -2.35 %       ±2.38%  ±3.16%  ±4.12%
util/inspect-array.js type='mixedArray' len=100 n=500                                                          0.53 %       ±3.61%  ±4.81%  ±6.26%
util/inspect-array.js type='sparseArray' len=100000 n=500                                                      0.80 %       ±3.71%  ±4.93%  ±6.42%
util/inspect-array.js type='sparseArray' len=100 n=500                                                         1.99 %       ±6.40%  ±8.52% ±11.10%
util/inspect.js option='colors' method='Array' n=20000                                                        -0.56 %       ±3.68%  ±4.92%  ±6.45%
util/inspect.js option='colors' method='Date' n=20000                                                          3.74 %       ±5.61%  ±7.46%  ±9.72%
util/inspect.js option='colors' method='Error' n=20000                                                        -1.35 %       ±4.57%  ±6.08%  ±7.92%
util/inspect.js option='colors' method='Number' n=20000                                                        3.22 %       ±4.20%  ±5.61%  ±7.33%
util/inspect.js option='colors' method='Object_deep_ln' n=20000                                               -1.03 %       ±1.42%  ±1.90%  ±2.47%
util/inspect.js option='colors' method='Object_empty' n=20000                                                 -3.76 %       ±4.50%  ±5.99%  ±7.80%
util/inspect.js option='colors' method='Object' n=20000                                                       -0.59 %       ±3.22%  ±4.29%  ±5.59%
util/inspect.js option='colors' method='Set' n=20000                                                           1.73 %       ±4.88%  ±6.50%  ±8.48%
util/inspect.js option='colors' method='String_boxed' n=20000                                                 -0.21 %       ±4.57%  ±6.08%  ±7.92%
util/inspect.js option='colors' method='String_complex' n=20000                                               -1.85 %       ±4.85%  ±6.46%  ±8.43%
util/inspect.js option='colors' method='String' n=20000                                                       -3.29 %       ±3.94%  ±5.26%  ±6.87%
util/inspect.js option='colors' method='TypedArray_extra' n=20000                                             -1.89 %       ±3.05%  ±4.07%  ±5.32%
util/inspect.js option='colors' method='TypedArray' n=20000                                                    0.25 %       ±2.03%  ±2.71%  ±3.53%
util/inspect.js option='none' method='Array' n=20000                                                           0.51 %       ±3.72%  ±4.99%  ±6.59%
util/inspect.js option='none' method='Date' n=20000                                                            2.74 %       ±5.93%  ±7.89% ±10.27%
util/inspect.js option='none' method='Error' n=20000                                                          -0.71 %       ±4.65%  ±6.19%  ±8.06%
util/inspect.js option='none' method='Number' n=20000                                                          2.01 %       ±3.81%  ±5.07%  ±6.61%
util/inspect.js option='none' method='Object_deep_ln' n=20000                                                 -0.24 %       ±2.75%  ±3.66%  ±4.76%
util/inspect.js option='none' method='Object_empty' n=20000                                             *     -4.40 %       ±4.28%  ±5.72%  ±7.50%
util/inspect.js option='none' method='Object' n=20000                                                          0.11 %       ±4.58%  ±6.09%  ±7.92%
util/inspect.js option='none' method='Set' n=20000                                                             1.83 %       ±6.20%  ±8.25% ±10.74%
util/inspect.js option='none' method='String_boxed' n=20000                                                    2.29 %       ±3.49%  ±4.64%  ±6.04%
util/inspect.js option='none' method='String_complex' n=20000                                                  0.50 %       ±5.52%  ±7.35%  ±9.58%
util/inspect.js option='none' method='String' n=20000                                                          3.23 %       ±5.65%  ±7.52%  ±9.80%
util/inspect.js option='none' method='TypedArray_extra' n=20000                                                0.99 %       ±5.79%  ±7.71% ±10.04%
util/inspect.js option='none' method='TypedArray' n=20000                                                      1.64 %       ±2.26%  ±3.00%  ±3.91%
util/inspect.js option='showHidden' method='Array' n=20000                                                     0.60 %       ±1.21%  ±1.61%  ±2.09%
util/inspect.js option='showHidden' method='Date' n=20000                                                     -2.16 %       ±4.20%  ±5.59%  ±7.30%
util/inspect.js option='showHidden' method='Error' n=20000                                                    -1.02 %       ±2.63%  ±3.50%  ±4.56%
util/inspect.js option='showHidden' method='Number' n=20000                                                    0.99 %       ±3.51%  ±4.67%  ±6.09%
util/inspect.js option='showHidden' method='Object_deep_ln' n=20000                                           -0.11 %       ±2.90%  ±3.86%  ±5.03%
util/inspect.js option='showHidden' method='Object_empty' n=20000                                              0.49 %       ±5.23%  ±6.95%  ±9.05%
util/inspect.js option='showHidden' method='Object' n=20000                                                    3.20 %       ±4.83%  ±6.42%  ±8.36%
util/inspect.js option='showHidden' method='Set' n=20000                                                       0.03 %       ±4.41%  ±5.87%  ±7.66%
util/inspect.js option='showHidden' method='String_boxed' n=20000                                       *      5.68 %       ±4.38%  ±5.83%  ±7.58%
util/inspect.js option='showHidden' method='String_complex' n=20000                                           -1.00 %       ±4.26%  ±5.66%  ±7.37%
util/inspect.js option='showHidden' method='String' n=20000                                                   -0.32 %       ±3.58%  ±4.77%  ±6.21%
util/inspect.js option='showHidden' method='TypedArray_extra' n=20000                                         -0.17 %       ±2.47%  ±3.28%  ±4.28%
util/inspect.js option='showHidden' method='TypedArray' n=20000                                               -0.39 %       ±2.44%  ±3.25%  ±4.23%
util/inspect-proxy.js isProxy=0 showProxy=0 n=100000                                                           0.27 %       ±1.84%  ±2.46%  ±3.20%
util/inspect-proxy.js isProxy=0 showProxy=1 n=100000                                                           0.11 %       ±1.90%  ±2.52%  ±3.28%
util/inspect-proxy.js isProxy=1 showProxy=0 n=100000                                                          -0.36 %       ±1.94%  ±2.58%  ±3.35%
util/inspect-proxy.js isProxy=1 showProxy=1 n=100000                                                           2.90 %       ±3.57%  ±4.75%  ±6.18%
util/normalize-encoding.js n=100000 input=''                                                                  -1.46 %       ±4.61%  ±6.15%  ±8.05%
util/normalize-encoding.js n=100000 input='base64'                                                             1.51 %       ±6.68%  ±8.90% ±11.59%
util/normalize-encoding.js n=100000 input='BASE64'                                                             0.58 %       ±5.25%  ±6.99%  ±9.12%
util/normalize-encoding.js n=100000 input='binary'                                                             4.33 %       ±6.01%  ±8.01% ±10.45%
util/normalize-encoding.js n=100000 input='BINARY'                                                             0.11 %       ±6.82%  ±9.08% ±11.81%
util/normalize-encoding.js n=100000 input='foo'                                                                2.12 %       ±4.81%  ±6.42%  ±8.38%
util/normalize-encoding.js n=100000 input='group_common'                                                       0.23 %       ±4.44%  ±5.91%  ±7.69%
util/normalize-encoding.js n=100000 input='group_misc'                                                         1.84 %       ±4.46%  ±5.94%  ±7.76%
util/normalize-encoding.js n=100000 input='group_uncommon'                                                     3.08 %       ±5.12%  ±6.81%  ±8.86%
util/normalize-encoding.js n=100000 input='group_upper'                                                        0.33 %       ±4.94%  ±6.58%  ±8.57%
util/normalize-encoding.js n=100000 input='hex'                                                               -1.65 %       ±4.85%  ±6.48%  ±8.48%
util/normalize-encoding.js n=100000 input='HEX'                                                                0.45 %       ±5.21%  ±6.94%  ±9.03%
util/normalize-encoding.js n=100000 input='latin1'                                                             4.79 %       ±7.70% ±10.25% ±13.35%
util/normalize-encoding.js n=100000 input='ucs2'                                                               2.78 %       ±4.46%  ±5.94%  ±7.73%
util/normalize-encoding.js n=100000 input='UCS2'                                                               2.59 %       ±5.86%  ±7.82% ±10.20%
util/normalize-encoding.js n=100000 input='undefined'                                                          3.82 %       ±6.65%  ±8.90% ±11.67%
util/normalize-encoding.js n=100000 input='utf16le'                                                            3.13 %       ±6.57%  ±8.75% ±11.39%
util/normalize-encoding.js n=100000 input='UTF16LE'                                                            4.79 %       ±5.32%  ±7.08%  ±9.22%
util/normalize-encoding.js n=100000 input='utf-8'                                                             -2.54 %       ±5.39%  ±7.17%  ±9.34%
util/normalize-encoding.js n=100000 input='utf8'                                                               1.64 %       ±6.35%  ±8.45% ±11.00%
util/normalize-encoding.js n=100000 input='Utf8'                                                               1.80 %       ±4.89%  ±6.52%  ±8.51%
util/normalize-encoding.js n=100000 input='UTF-8'                                                             -0.35 %       ±4.63%  ±6.16%  ±8.04%
util/normalize-encoding.js n=100000 input='UTF8'                                                              -1.57 %       ±4.20%  ±5.58%  ±7.27%
util/priority-queue.js n=100000                                                                               -0.43 %       ±3.51%  ±4.67%  ±6.07%
util/splice-one.js size=100 pos='end' n=100000                                                                 3.17 %       ±5.93%  ±7.91% ±10.33%
util/splice-one.js size=100 pos='middle' n=100000                                                              2.76 %       ±3.78%  ±5.03%  ±6.55%
util/splice-one.js size=100 pos='start' n=100000                                                              -2.66 %       ±3.66%  ±4.88%  ±6.38%
util/splice-one.js size=10 pos='end' n=100000                                                                  1.50 %       ±4.53%  ±6.04%  ±7.88%
util/splice-one.js size=10 pos='middle' n=100000                                                               0.95 %       ±3.17%  ±4.22%  ±5.49%
util/splice-one.js size=10 pos='start' n=100000                                                                3.02 %       ±4.52%  ±6.03%  ±7.88%
util/splice-one.js size=500 pos='end' n=100000                                                                 0.96 %       ±6.13%  ±8.15% ±10.61%
util/splice-one.js size=500 pos='middle' n=100000                                                             -0.51 %       ±4.34%  ±5.79%  ±7.55%
util/splice-one.js size=500 pos='start' n=100000                                                               2.22 %       ±2.75%  ±3.66%  ±4.77%
util/type-check.js n=100000 argument='false-object' version='js' type='ArrayBufferView'                       -5.19 %       ±6.31%  ±8.44% ±11.05%
util/type-check.js n=100000 argument='false-object' version='js' type='TypedArray'                             1.74 %       ±5.61%  ±7.47%  ±9.76%
util/type-check.js n=100000 argument='false-object' version='js' type='Uint8Array'                      *      4.45 %       ±4.37%  ±5.82%  ±7.59%
util/type-check.js n=100000 argument='false-object' version='native' type='ArrayBufferView'                    1.12 %       ±5.04%  ±6.72%  ±8.76%
util/type-check.js n=100000 argument='false-object' version='native' type='TypedArray'                         1.19 %       ±4.45%  ±5.92%  ±7.70%
util/type-check.js n=100000 argument='false-object' version='native' type='Uint8Array'                         1.13 %       ±4.78%  ±6.36%  ±8.27%
util/type-check.js n=100000 argument='false-primitive' version='js' type='ArrayBufferView'                    -0.38 %       ±6.04%  ±8.05% ±10.48%
util/type-check.js n=100000 argument='false-primitive' version='js' type='TypedArray'                          4.11 %       ±5.49%  ±7.31%  ±9.53%
util/type-check.js n=100000 argument='false-primitive' version='js' type='Uint8Array'                          2.89 %       ±5.14%  ±6.85%  ±8.93%
util/type-check.js n=100000 argument='false-primitive' version='native' type='ArrayBufferView'                 2.65 %       ±5.06%  ±6.73%  ±8.76%
util/type-check.js n=100000 argument='false-primitive' version='native' type='TypedArray'                      2.15 %       ±4.85%  ±6.45%  ±8.40%
util/type-check.js n=100000 argument='false-primitive' version='native' type='Uint8Array'                      2.62 %       ±4.99%  ±6.65%  ±8.66%
util/type-check.js n=100000 argument='true' version='js' type='ArrayBufferView'                         *     -5.26 %       ±5.03%  ±6.70%  ±8.73%
util/type-check.js n=100000 argument='true' version='js' type='TypedArray'                                    -1.66 %       ±3.84%  ±5.11%  ±6.65%
util/type-check.js n=100000 argument='true' version='js' type='Uint8Array'                                     0.07 %       ±4.35%  ±5.79%  ±7.54%
util/type-check.js n=100000 argument='true' version='native' type='ArrayBufferView'                            1.86 %       ±5.35%  ±7.13%  ±9.29%
util/type-check.js n=100000 argument='true' version='native' type='TypedArray'                                -0.11 %       ±5.07%  ±6.75%  ±8.79%
util/type-check.js n=100000 argument='true' version='native' type='Uint8Array'                                 0.68 %       ±5.18%  ±6.91%  ±9.01%
                                                                     confidence improvement accuracy (*)   (**)   (***)
http/client-request-body.js method='end' len=1024 type='asc' dur=5            *      8.59 %       ±6.90% ±9.19% ±11.96%
http/client-request-body.js method='end' len=1024 type='buf' dur=5                   1.79 %       ±6.15% ±8.19% ±10.68%
http/client-request-body.js method='end' len=1024 type='utf' dur=5           **     11.23 %       ±7.45% ±9.92% ±12.93%
http/client-request-body.js method='end' len=256 type='asc' dur=5            **     10.94 %       ±6.76% ±9.00% ±11.72%
http/client-request-body.js method='end' len=256 type='buf' dur=5           ***     12.14 %       ±6.03% ±8.03% ±10.45%
http/client-request-body.js method='end' len=256 type='utf' dur=5                    5.86 %       ±6.76% ±9.00% ±11.72%
http/client-request-body.js method='end' len=32 type='asc' dur=5                     1.59 %       ±5.96% ±7.94% ±10.37%
http/client-request-body.js method='end' len=32 type='buf' dur=5              *      8.69 %       ±6.67% ±8.89% ±11.58%
http/client-request-body.js method='end' len=32 type='utf' dur=5              *      9.70 %       ±7.45% ±9.92% ±12.91%
http/client-request-body.js method='write' len=1024 type='asc' dur=5                 1.04 %       ±6.67% ±8.87% ±11.54%
http/client-request-body.js method='write' len=1024 type='buf' dur=5          *      7.64 %       ±7.01% ±9.32% ±12.13%
http/client-request-body.js method='write' len=1024 type='utf' dur=5         **     12.23 %       ±7.09% ±9.43% ±12.28%
http/client-request-body.js method='write' len=256 type='asc' dur=5           *      7.83 %       ±6.83% ±9.09% ±11.83%
http/client-request-body.js method='write' len=256 type='buf' dur=5                  2.07 %       ±5.97% ±7.94% ±10.33%
http/client-request-body.js method='write' len=256 type='utf' dur=5           *      7.24 %       ±7.14% ±9.52% ±12.42%
http/client-request-body.js method='write' len=32 type='asc' dur=5                   1.65 %       ±6.50% ±8.65% ±11.26%
http/client-request-body.js method='write' len=32 type='buf' dur=5                   1.81 %       ±6.82% ±9.08% ±11.82%
http/client-request-body.js method='write' len=32 type='utf' dur=5                   3.50 %       ±6.12% ±8.14% ±10.60%
                                                                                                  confidence improvement accuracy (*)    (**)   (***)
http/end-vs-write-end.js duration=5 method='end' c=100 len=1048576 type='asc' benchmarker='wrk'                   1.26 %       ±3.31%  ±4.41%  ±5.74%
http/end-vs-write-end.js duration=5 method='end' c=100 len=1048576 type='buf' benchmarker='wrk'                  -2.54 %       ±7.35%  ±9.79% ±12.75%
http/end-vs-write-end.js duration=5 method='end' c=100 len=1048576 type='utf' benchmarker='wrk'                   2.58 %       ±2.82%  ±3.77%  ±4.94%
http/end-vs-write-end.js duration=5 method='end' c=100 len=131072 type='asc' benchmarker='wrk'                    0.74 %       ±2.64%  ±3.51%  ±4.57%
http/end-vs-write-end.js duration=5 method='end' c=100 len=131072 type='buf' benchmarker='wrk'                   -0.00 %       ±3.70%  ±4.92%  ±6.41%
http/end-vs-write-end.js duration=5 method='end' c=100 len=131072 type='utf' benchmarker='wrk'                    1.95 %       ±2.31%  ±3.09%  ±4.05%
http/end-vs-write-end.js duration=5 method='end' c=100 len=262144 type='asc' benchmarker='wrk'                    1.97 %       ±2.30%  ±3.06%  ±3.99%
http/end-vs-write-end.js duration=5 method='end' c=100 len=262144 type='buf' benchmarker='wrk'             *      7.73 %       ±6.30%  ±8.39% ±10.92%
http/end-vs-write-end.js duration=5 method='end' c=100 len=262144 type='utf' benchmarker='wrk'                   -0.48 %       ±2.41%  ±3.21%  ±4.18%
http/end-vs-write-end.js duration=5 method='end' c=100 len=65536 type='asc' benchmarker='wrk'                     3.72 %       ±3.98%  ±5.30%  ±6.90%
http/end-vs-write-end.js duration=5 method='end' c=100 len=65536 type='buf' benchmarker='wrk'                     1.64 %       ±3.28%  ±4.36%  ±5.68%
http/end-vs-write-end.js duration=5 method='end' c=100 len=65536 type='utf' benchmarker='wrk'                     0.75 %       ±3.51%  ±4.67%  ±6.09%
http/end-vs-write-end.js duration=5 method='write' c=100 len=1048576 type='asc' benchmarker='wrk'                -2.21 %       ±5.10%  ±6.80%  ±8.86%
http/end-vs-write-end.js duration=5 method='write' c=100 len=1048576 type='buf' benchmarker='wrk'                 2.34 %       ±8.06% ±10.73% ±13.97%
http/end-vs-write-end.js duration=5 method='write' c=100 len=1048576 type='utf' benchmarker='wrk'                -0.26 %       ±5.22%  ±6.95%  ±9.05%
http/end-vs-write-end.js duration=5 method='write' c=100 len=131072 type='asc' benchmarker='wrk'                  0.12 %       ±5.22%  ±6.94%  ±9.04%
http/end-vs-write-end.js duration=5 method='write' c=100 len=131072 type='buf' benchmarker='wrk'           *      4.18 %       ±3.90%  ±5.19%  ±6.76%
http/end-vs-write-end.js duration=5 method='write' c=100 len=131072 type='utf' benchmarker='wrk'                  5.40 %       ±5.69%  ±7.58%  ±9.87%
http/end-vs-write-end.js duration=5 method='write' c=100 len=262144 type='asc' benchmarker='wrk'                 -1.83 %       ±6.39%  ±8.50% ±11.06%
http/end-vs-write-end.js duration=5 method='write' c=100 len=262144 type='buf' benchmarker='wrk'                  3.10 %       ±6.20%  ±8.26% ±10.75%
http/end-vs-write-end.js duration=5 method='write' c=100 len=262144 type='utf' benchmarker='wrk'                  4.63 %       ±5.47%  ±7.29%  ±9.50%
http/end-vs-write-end.js duration=5 method='write' c=100 len=65536 type='asc' benchmarker='wrk'           **      6.58 %       ±4.53%  ±6.04%  ±7.88%
http/end-vs-write-end.js duration=5 method='write' c=100 len=65536 type='buf' benchmarker='wrk'                   2.64 %       ±3.44%  ±4.58%  ±5.96%
http/end-vs-write-end.js duration=5 method='write' c=100 len=65536 type='utf' benchmarker='wrk'                   1.71 %       ±5.06%  ±6.73%  ±8.77%
                                                                                    confidence improvement accuracy (*)   (**)   (***)
http/headers.js duration=5 len=100 n=10 benchmarker='wrk'                                           0.49 %       ±5.49% ±7.31%  ±9.52%
http/headers.js duration=5 len=100 n=600 benchmarker='wrk'                                          0.89 %       ±3.73% ±4.97%  ±6.48%
http/headers.js duration=5 len=1 n=10 benchmarker='wrk'                                             5.74 %       ±6.09% ±8.11% ±10.56%
http/headers.js duration=5 len=1 n=600 benchmarker='wrk'                                            1.86 %       ±3.08% ±4.10%  ±5.34%
                                                                                    confidence improvement accuracy (*)   (**)  (***)
http/incoming_headers.js duration=5 w=0 headers=20 connections=50 benchmarker='wrk'        ***      9.83 %       ±4.22% ±5.58% ±7.20%
http/incoming_headers.js duration=5 w=6 headers=20 connections=50 benchmarker='wrk'          *      4.81 %       ±3.76% ±4.97% ±6.41%
                                                       confidence improvement accuracy (*)   (**)  (***)
http/set_header.js n=1000000 value='Connection'                       -0.88 %       ±1.65% ±2.20% ±2.87%
http/set_header.js n=1000000 value='Content-Length'                   -0.58 %       ±1.45% ±1.94% ±2.53%
http/set_header.js n=1000000 value='Content-Type'                      0.69 %       ±2.27% ±3.02% ±3.94%
http/set_header.js n=1000000 value='Set-Cookie'                       -0.42 %       ±2.63% ±3.50% ±4.56%
http/set_header.js n=1000000 value='Transfer-Encoding'                -0.58 %       ±2.02% ±2.71% ±3.57%
http/set_header.js n=1000000 value='Vary'                             -1.02 %       ±2.46% ±3.27% ±4.26%
http/set_header.js n=1000000 value='X-Powered-By'                     -1.21 %       ±1.90% ±2.53% ±3.29%
                       confidence improvement accuracy (*)   (**)   (***)
http/upgrade.js n=1000          *      6.63 %       ±6.06% ±8.07% ±10.51%
http/upgrade.js n=5                    0.43 %       ±3.43% ±4.57%  ±5.96%
                                                                                              confidence improvement accuracy (*)    (**)   (***)
http/check_invalid_header_char.js n=1000000 input=''                                                          5.09 %       ±5.50%  ±7.35%  ±9.63%
http/check_invalid_header_char.js n=1000000 input='1'                                                         2.18 %       ±3.86%  ±5.14%  ±6.70%
http/check_invalid_header_char.js n=1000000 input='20091'                                                    -1.69 %       ±4.20%  ±5.59%  ±7.27%
http/check_invalid_header_char.js n=1000000 input='close'                                                     1.86 %       ±4.56%  ±6.07%  ±7.90%
http/check_invalid_header_char.js n=1000000 input='en-US'                                                    -0.62 %       ±4.64%  ±6.18%  ±8.05%
http/check_invalid_header_char.js n=1000000 input='foo\\nbar'                                                -0.04 %       ±2.75%  ±3.66%  ±4.77%
http/check_invalid_header_char.js n=1000000 input='group_acmeair'                                             0.03 %       ±3.40%  ±4.53%  ±5.92%
http/check_invalid_header_char.js n=1000000 input='gzip'                                                     -2.37 %       ±4.55%  ±6.06%  ±7.89%
http/check_invalid_header_char.js n=1000000 input='keep-alive'                                               -0.86 %       ±4.04%  ±5.37%  ±7.00%
http/check_invalid_header_char.js n=1000000 input='LONG_AND_INVALID'                                         -1.68 %       ±2.44%  ±3.25%  ±4.25%
http/check_invalid_header_char.js n=1000000 input='private'                                                   4.75 %       ±8.95% ±11.96% ±15.67%
http/check_invalid_header_char.js n=1000000 input='SAMEORIGIN'                                         *      4.98 %       ±4.25%  ±5.68%  ±7.42%
http/check_invalid_header_char.js n=1000000 input='Sat, 07 May 2016 16:54:48 GMT'                            -2.11 %       ±3.59%  ±4.78%  ±6.23%
http/check_invalid_header_char.js n=1000000 input='text/html; charset=utf-8'                                 -1.80 %       ±4.09%  ±5.44%  ±7.08%
http/check_invalid_header_char.js n=1000000 input='text/plain'                                               -0.19 %       ±3.90%  ±5.19%  ±6.75%
http/check_invalid_header_char.js n=1000000 input='\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tFoo bar baz'                -0.37 %       ±3.81%  ±5.07%  ±6.60%
http/check_invalid_header_char.js n=1000000 input='\\x7F'                                                    -3.28 %       ±3.41%  ±4.54%  ±5.93%
http/check_invalid_header_char.js n=1000000 input='中文呢'                                                   -4.10 %       ±4.87%  ±6.48%  ±8.44%
http/check_is_http_token.js n=1000000 key=':'                                                                 2.74 %       ±4.20%  ±5.59%  ±7.27%
http/check_is_http_token.js n=1000000 key='((((())))'                                                        -0.30 %       ±3.98%  ±5.30%  ±6.90%
http/check_is_http_token.js n=1000000 key='@@'                                                               -0.39 %       ±3.54%  ±4.72%  ±6.15%
http/check_is_http_token.js n=1000000 key='Accept-Ranges'                                                     1.52 %       ±4.16%  ±5.54%  ±7.21%
http/check_is_http_token.js n=1000000 key=':alternate-protocol'                                              -1.86 %       ±5.59%  ±7.45%  ±9.72%
http/check_is_http_token.js n=1000000 key='alternate-protocol:'                                               1.96 %       ±3.07%  ±4.09%  ±5.33%
http/check_is_http_token.js n=1000000 key='alternate-protocol'                                                0.31 %       ±3.14%  ±4.18%  ±5.44%
http/check_is_http_token.js n=1000000 key='alt-svc'                                                           2.16 %       ±3.75%  ±4.99%  ±6.52%
http/check_is_http_token.js n=1000000 key='Cache-Control'                                                     1.33 %       ±3.73%  ±4.96%  ±6.46%
http/check_is_http_token.js n=1000000 key='Connection'                                                        1.25 %       ±4.15%  ±5.54%  ±7.26%
http/check_is_http_token.js n=1000000 key='Content-Encoding'                                                 -0.60 %       ±3.75%  ±4.99%  ±6.49%
http/check_is_http_token.js n=1000000 key='content-length'                                                   -1.42 %       ±3.90%  ±5.19%  ±6.75%
http/check_is_http_token.js n=1000000 key='Content-Location'                                                 -1.22 %       ±3.33%  ±4.43%  ±5.77%
http/check_is_http_token.js n=1000000 key='content-type'                                                      0.21 %       ±4.45%  ±5.92%  ±7.71%
http/check_is_http_token.js n=1000000 key='Content-Type'                                                      1.87 %       ±3.88%  ±5.18%  ±6.78%
http/check_is_http_token.js n=1000000 key='date'                                                              3.24 %       ±3.75%  ±4.98%  ±6.49%
http/check_is_http_token.js n=1000000 key='ETag'                                                              2.07 %       ±4.04%  ±5.38%  ±7.02%
http/check_is_http_token.js n=1000000 key='Expires'                                                           0.14 %       ±5.38%  ±7.16%  ±9.32%
http/check_is_http_token.js n=1000000 key='Keep-Alive'                                                       -0.20 %       ±4.89%  ±6.51%  ±8.48%
http/check_is_http_token.js n=1000000 key='Last-Modified'                                                     1.82 %       ±5.32%  ±7.09%  ±9.25%
http/check_is_http_token.js n=1000000 key='location'                                                          1.32 %       ±3.98%  ±5.30%  ±6.92%
http/check_is_http_token.js n=1000000 key='server'                                                            0.23 %       ±4.61%  ±6.13%  ±7.98%
http/check_is_http_token.js n=1000000 key='Server'                                                            0.98 %       ±3.69%  ±4.91%  ±6.40%
http/check_is_http_token.js n=1000000 key='status'                                                            1.01 %       ±3.57%  ±4.76%  ±6.20%
http/check_is_http_token.js n=1000000 key='TCN'                                                               0.34 %       ±4.33%  ±5.77%  ±7.51%
http/check_is_http_token.js n=1000000 key='Transfer-Encoding'                                                -3.09 %       ±3.26%  ±4.35%  ±5.68%
http/check_is_http_token.js n=1000000 key='Vary'                                                             -3.81 %       ±4.75%  ±6.33%  ±8.26%
http/check_is_http_token.js n=1000000 key='version'                                                          -2.26 %       ±4.08%  ±5.43%  ±7.08%
http/check_is_http_token.js n=1000000 key='x-frame-options'                                                  -1.21 %       ±2.91%  ±3.87%  ±5.05%
http/check_is_http_token.js n=1000000 key='x-xss-protection'                                                 -0.63 %       ±4.13%  ±5.50%  ±7.15%
http/check_is_http_token.js n=1000000 key='中文呢'                                                            3.85 %       ±5.15%  ±6.88%  ±9.01%

@mcollina
Copy link
Member

mcollina commented Apr 17, 2021

I have done a direct comparison between the 2 PRs (rebased on top of master) for ~9 hours on my workstation, and after half a day of crunching I got this:

                                                                                                  confidence improvement accuracy (*)   (**)   (***)
http/bench-parser.js n=100000 len=16                                                                              0.44 %       ±0.70% ±0.93%  ±1.21%
http/bench-parser.js n=100000 len=32                                                                       *     -0.91 %       ±0.80% ±1.07%  ±1.39%
http/bench-parser.js n=100000 len=4                                                                              -0.23 %       ±0.87% ±1.16%  ±1.51%
http/bench-parser.js n=100000 len=8                                                                              -0.07 %       ±0.87% ±1.15%  ±1.50%
http/check_invalid_header_char.js n=1000000 input=''                                                              0.03 %       ±0.54% ±0.72%  ±0.93%
http/check_invalid_header_char.js n=1000000 input='\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tFoo bar baz'                     0.07 %       ±0.58% ±0.77%  ±1.01%
http/check_invalid_header_char.js n=1000000 input='\\x7F'                                                         0.24 %       ±0.48% ±0.64%  ±0.83%
http/check_invalid_header_char.js n=1000000 input='1'                                                      *      0.72 %       ±0.71% ±0.94%  ±1.23%
http/check_invalid_header_char.js n=1000000 input='20091'                                                         0.07 %       ±0.50% ±0.67%  ±0.87%
http/check_invalid_header_char.js n=1000000 input='close'                                                        -0.20 %       ±0.52% ±0.69%  ±0.90%
http/check_invalid_header_char.js n=1000000 input='en-US'                                                        -0.10 %       ±0.47% ±0.62%  ±0.81%
http/check_invalid_header_char.js n=1000000 input='foo\\nbar'                                                     0.22 %       ±0.60% ±0.80%  ±1.04%
http/check_invalid_header_char.js n=1000000 input='group_acmeair'                                                -0.11 %       ±0.70% ±0.93%  ±1.21%
http/check_invalid_header_char.js n=1000000 input='gzip'                                                  **      0.66 %       ±0.47% ±0.62%  ±0.81%
http/check_invalid_header_char.js n=1000000 input='keep-alive'                                                    0.16 %       ±0.60% ±0.80%  ±1.04%
http/check_invalid_header_char.js n=1000000 input='LONG_AND_INVALID'                                              0.07 %       ±0.18% ±0.25%  ±0.32%
http/check_invalid_header_char.js n=1000000 input='private'                                               **     -2.91 %       ±2.16% ±2.89%  ±3.79%
http/check_invalid_header_char.js n=1000000 input='SAMEORIGIN'                                                   -0.29 %       ±0.45% ±0.60%  ±0.78%
http/check_invalid_header_char.js n=1000000 input='Sat, 07 May 2016 16:54:48 GMT'                                -0.03 %       ±1.19% ±1.59%  ±2.07%
http/check_invalid_header_char.js n=1000000 input='text/html; charset=utf-8'                                      0.06 %       ±0.41% ±0.55%  ±0.72%
http/check_invalid_header_char.js n=1000000 input='text/plain'                                                   -0.46 %       ±0.58% ±0.77%  ±1.00%
http/check_invalid_header_char.js n=1000000 input='中文呢'                                                       -0.30 %       ±0.47% ±0.62%  ±0.81%
http/check_is_http_token.js n=1000000 key=':'                                                                     0.55 %       ±0.77% ±1.03%  ±1.34%
http/check_is_http_token.js n=1000000 key=':alternate-protocol'                                                  -0.42 %       ±0.48% ±0.64%  ±0.83%
http/check_is_http_token.js n=1000000 key='((((())))'                                                             0.35 %       ±0.80% ±1.07%  ±1.39%
http/check_is_http_token.js n=1000000 key='@@'                                                                    0.02 %       ±0.85% ±1.13%  ±1.47%
http/check_is_http_token.js n=1000000 key='Accept-Ranges'                                                         0.21 %       ±0.28% ±0.37%  ±0.49%
http/check_is_http_token.js n=1000000 key='alt-svc'                                                              -0.32 %       ±0.50% ±0.67%  ±0.87%
http/check_is_http_token.js n=1000000 key='alternate-protocol:'                                                   0.22 %       ±0.28% ±0.37%  ±0.48%
http/check_is_http_token.js n=1000000 key='alternate-protocol'                                                    0.66 %       ±1.96% ±2.64%  ±3.50%
http/check_is_http_token.js n=1000000 key='Cache-Control'                                                        -0.13 %       ±0.31% ±0.42%  ±0.54%
http/check_is_http_token.js n=1000000 key='Connection'                                                            0.07 %       ±0.42% ±0.56%  ±0.73%
http/check_is_http_token.js n=1000000 key='Content-Encoding'                                                      0.17 %       ±0.33% ±0.44%  ±0.57%
http/check_is_http_token.js n=1000000 key='content-length'                                                        0.09 %       ±0.36% ±0.48%  ±0.62%
http/check_is_http_token.js n=1000000 key='Content-Location'                                                      0.21 %       ±0.30% ±0.40%  ±0.52%
http/check_is_http_token.js n=1000000 key='content-type'                                                          0.14 %       ±0.28% ±0.37%  ±0.48%
http/check_is_http_token.js n=1000000 key='Content-Type'                                                          0.04 %       ±0.30% ±0.39%  ±0.51%
http/check_is_http_token.js n=1000000 key='date'                                                                  0.35 %       ±0.53% ±0.70%  ±0.92%
http/check_is_http_token.js n=1000000 key='ETag'                                                                  0.37 %       ±0.48% ±0.64%  ±0.83%
http/check_is_http_token.js n=1000000 key='Expires'                                                              -0.10 %       ±0.42% ±0.56%  ±0.73%
http/check_is_http_token.js n=1000000 key='Keep-Alive'                                                           -0.05 %       ±0.39% ±0.52%  ±0.68%
http/check_is_http_token.js n=1000000 key='Last-Modified'                                                         0.04 %       ±0.34% ±0.45%  ±0.58%
http/check_is_http_token.js n=1000000 key='location'                                                              0.25 %       ±0.39% ±0.52%  ±0.68%
http/check_is_http_token.js n=1000000 key='server'                                                                0.20 %       ±0.57% ±0.76%  ±0.99%
http/check_is_http_token.js n=1000000 key='Server'                                                                0.18 %       ±0.41% ±0.54%  ±0.71%
http/check_is_http_token.js n=1000000 key='status'                                                                0.08 %       ±0.52% ±0.69%  ±0.91%
http/check_is_http_token.js n=1000000 key='TCN'                                                                   0.12 %       ±0.47% ±0.63%  ±0.82%
http/check_is_http_token.js n=1000000 key='Transfer-Encoding'                                                    -1.16 %       ±1.23% ±1.66%  ±2.21%
http/check_is_http_token.js n=1000000 key='Vary'                                                                 -1.28 %       ±2.84% ±3.83%  ±5.08%
http/check_is_http_token.js n=1000000 key='version'                                                              -0.24 %       ±0.38% ±0.50%  ±0.65%
http/check_is_http_token.js n=1000000 key='x-frame-options'                                                       0.02 %       ±0.35% ±0.46%  ±0.60%
http/check_is_http_token.js n=1000000 key='x-xss-protection'                                                     -0.04 %       ±0.34% ±0.46%  ±0.60%
http/check_is_http_token.js n=1000000 key='中文呢'                                                               -0.77 %       ±2.44% ±3.29%  ±4.35%
http/chunked.js duration=5 c=100 len=1 n=1 benchmarker='wrk'                                                     -1.70 %       ±2.27% ±3.02%  ±3.94%
http/chunked.js duration=5 c=100 len=1 n=16 benchmarker='wrk'                                                     0.48 %       ±1.54% ±2.06%  ±2.68%
http/chunked.js duration=5 c=100 len=1 n=4 benchmarker='wrk'                                                      0.52 %       ±1.34% ±1.79%  ±2.33%
http/chunked.js duration=5 c=100 len=1 n=8 benchmarker='wrk'                                                      0.68 %       ±1.25% ±1.66%  ±2.17%
http/chunked.js duration=5 c=100 len=256 n=1 benchmarker='wrk'                                                   -1.07 %       ±2.21% ±2.93%  ±3.82%
http/chunked.js duration=5 c=100 len=256 n=16 benchmarker='wrk'                                                   0.98 %       ±2.07% ±2.76%  ±3.59%
http/chunked.js duration=5 c=100 len=256 n=4 benchmarker='wrk'                                                    0.54 %       ±1.16% ±1.55%  ±2.01%
http/chunked.js duration=5 c=100 len=256 n=8 benchmarker='wrk'                                                    0.99 %       ±1.43% ±1.91%  ±2.49%
http/chunked.js duration=5 c=100 len=64 n=1 benchmarker='wrk'                                                    -1.44 %       ±1.80% ±2.39%  ±3.11%
http/chunked.js duration=5 c=100 len=64 n=16 benchmarker='wrk'                                                   -0.83 %       ±1.65% ±2.20%  ±2.86%
http/chunked.js duration=5 c=100 len=64 n=4 benchmarker='wrk'                                                     0.44 %       ±1.23% ±1.64%  ±2.14%
http/chunked.js duration=5 c=100 len=64 n=8 benchmarker='wrk'                                                    -0.24 %       ±1.10% ±1.46%  ±1.91%
http/client-request-body.js method='end' len=1024 type='asc' dur=5                                               -0.53 %       ±0.75% ±1.00%  ±1.30%
http/client-request-body.js method='end' len=1024 type='buf' dur=5                                        **      0.88 %       ±0.61% ±0.81%  ±1.06%
http/client-request-body.js method='end' len=1024 type='utf' dur=5                                                0.40 %       ±0.67% ±0.89%  ±1.16%
http/client-request-body.js method='end' len=256 type='asc' dur=5                                                -0.41 %       ±0.70% ±0.93%  ±1.21%
http/client-request-body.js method='end' len=256 type='buf' dur=5                                                 0.08 %       ±0.69% ±0.92%  ±1.20%
http/client-request-body.js method='end' len=256 type='utf' dur=5                                                -0.35 %       ±0.67% ±0.90%  ±1.17%
http/client-request-body.js method='end' len=32 type='asc' dur=5                                                 -0.22 %       ±0.72% ±0.96%  ±1.25%
http/client-request-body.js method='end' len=32 type='buf' dur=5                                                 -0.14 %       ±0.81% ±1.08%  ±1.41%
http/client-request-body.js method='end' len=32 type='utf' dur=5                                                 -0.33 %       ±0.66% ±0.88%  ±1.15%
http/client-request-body.js method='write' len=1024 type='asc' dur=5                                              0.45 %       ±0.71% ±0.94%  ±1.23%
http/client-request-body.js method='write' len=1024 type='buf' dur=5                                             -0.39 %       ±0.82% ±1.09%  ±1.42%
http/client-request-body.js method='write' len=1024 type='utf' dur=5                                             -0.28 %       ±0.65% ±0.86%  ±1.12%
http/client-request-body.js method='write' len=256 type='asc' dur=5                                              -0.10 %       ±0.80% ±1.07%  ±1.39%
http/client-request-body.js method='write' len=256 type='buf' dur=5                                              -0.38 %       ±0.79% ±1.05%  ±1.37%
http/client-request-body.js method='write' len=256 type='utf' dur=5                                              -0.24 %       ±0.74% ±0.99%  ±1.29%
http/client-request-body.js method='write' len=32 type='asc' dur=5                                                0.55 %       ±0.65% ±0.86%  ±1.12%
http/client-request-body.js method='write' len=32 type='buf' dur=5                                                0.12 %       ±0.85% ±1.14%  ±1.48%
http/client-request-body.js method='write' len=32 type='utf' dur=5                                                0.19 %       ±0.84% ±1.12%  ±1.46%
http/cluster.js duration=5 c=50 len=1024 type='buffer' benchmarker='wrk'                                         -0.23 %       ±0.73% ±0.96%  ±1.26%
http/cluster.js duration=5 c=50 len=1024 type='bytes' benchmarker='wrk'                                           0.29 %       ±0.89% ±1.19%  ±1.55%
http/cluster.js duration=5 c=50 len=102400 type='buffer' benchmarker='wrk'                                       -0.09 %       ±0.60% ±0.80%  ±1.04%
http/cluster.js duration=5 c=50 len=102400 type='bytes' benchmarker='wrk'                                        -0.21 %       ±0.57% ±0.75%  ±0.98%
http/cluster.js duration=5 c=50 len=4 type='buffer' benchmarker='wrk'                                             0.15 %       ±0.81% ±1.08%  ±1.40%
http/cluster.js duration=5 c=50 len=4 type='bytes' benchmarker='wrk'                                              0.42 %       ±0.88% ±1.17%  ±1.52%
http/cluster.js duration=5 c=500 len=1024 type='buffer' benchmarker='wrk'                                        -0.23 %       ±0.93% ±1.23%  ±1.60%
http/cluster.js duration=5 c=500 len=1024 type='bytes' benchmarker='wrk'                                          0.18 %       ±0.82% ±1.09%  ±1.41%
http/cluster.js duration=5 c=500 len=102400 type='buffer' benchmarker='wrk'                                      -0.41 %       ±0.76% ±1.02%  ±1.32%
http/cluster.js duration=5 c=500 len=102400 type='bytes' benchmarker='wrk'                                        0.17 %       ±0.84% ±1.12%  ±1.46%
http/cluster.js duration=5 c=500 len=4 type='buffer' benchmarker='wrk'                                            0.17 %       ±0.73% ±0.97%  ±1.26%
http/cluster.js duration=5 c=500 len=4 type='bytes' benchmarker='wrk'                                            -0.10 %       ±0.78% ±1.04%  ±1.36%
http/create-clientrequest.js e=1 arg='options' url='idn'                                                          0.94 %       ±0.99% ±1.32%  ±1.72%
http/create-clientrequest.js e=1 arg='options' url='long'                                                         0.37 %       ±1.13% ±1.51%  ±1.96%
http/create-clientrequest.js e=1 arg='options' url='wpt'                                                          0.85 %       ±1.67% ±2.22%  ±2.90%
http/create-clientrequest.js e=1 arg='string' url='idn'                                                           0.85 %       ±0.91% ±1.21%  ±1.57%
http/create-clientrequest.js e=1 arg='string' url='long'                                                   *      0.80 %       ±0.71% ±0.94%  ±1.23%
http/create-clientrequest.js e=1 arg='string' url='wpt'                                                           0.05 %       ±0.82% ±1.09%  ±1.41%
http/create-clientrequest.js e=1 arg='URL' url='idn'                                                              0.33 %       ±0.91% ±1.21%  ±1.57%
http/create-clientrequest.js e=1 arg='URL' url='long'                                                             0.09 %       ±0.99% ±1.31%  ±1.71%
http/create-clientrequest.js e=1 arg='URL' url='wpt'                                                              1.07 %       ±1.31% ±1.74%  ±2.27%
http/end-vs-write-end.js duration=5 method='end' c=100 len=1048576 type='asc' benchmarker='wrk'                  -0.47 %       ±0.60% ±0.81%  ±1.05%
http/end-vs-write-end.js duration=5 method='end' c=100 len=1048576 type='buf' benchmarker='wrk'                  -0.19 %       ±1.28% ±1.71%  ±2.22%
http/end-vs-write-end.js duration=5 method='end' c=100 len=1048576 type='utf' benchmarker='wrk'                   0.11 %       ±0.43% ±0.57%  ±0.75%
http/end-vs-write-end.js duration=5 method='end' c=100 len=131072 type='asc' benchmarker='wrk'                   -0.09 %       ±0.57% ±0.76%  ±0.99%
http/end-vs-write-end.js duration=5 method='end' c=100 len=131072 type='buf' benchmarker='wrk'           ***      2.37 %       ±1.18% ±1.57%  ±2.04%
http/end-vs-write-end.js duration=5 method='end' c=100 len=131072 type='utf' benchmarker='wrk'                   -0.13 %       ±1.83% ±2.44%  ±3.17%
http/end-vs-write-end.js duration=5 method='end' c=100 len=262144 type='asc' benchmarker='wrk'                   -0.20 %       ±0.46% ±0.61%  ±0.79%
http/end-vs-write-end.js duration=5 method='end' c=100 len=262144 type='buf' benchmarker='wrk'                    0.03 %       ±1.23% ±1.64%  ±2.13%
http/end-vs-write-end.js duration=5 method='end' c=100 len=262144 type='utf' benchmarker='wrk'                    0.02 %       ±0.47% ±0.62%  ±0.81%
http/end-vs-write-end.js duration=5 method='end' c=100 len=65536 type='asc' benchmarker='wrk'                     0.06 %       ±0.81% ±1.08%  ±1.41%
http/end-vs-write-end.js duration=5 method='end' c=100 len=65536 type='buf' benchmarker='wrk'                    -0.02 %       ±1.58% ±2.10%  ±2.73%
http/end-vs-write-end.js duration=5 method='end' c=100 len=65536 type='utf' benchmarker='wrk'                    -0.23 %       ±0.73% ±0.97%  ±1.27%
http/end-vs-write-end.js duration=5 method='write' c=100 len=1048576 type='asc' benchmarker='wrk'                 0.05 %       ±0.48% ±0.63%  ±0.83%
http/end-vs-write-end.js duration=5 method='write' c=100 len=1048576 type='buf' benchmarker='wrk'                 0.08 %       ±1.12% ±1.49%  ±1.93%
http/end-vs-write-end.js duration=5 method='write' c=100 len=1048576 type='utf' benchmarker='wrk'                -0.09 %       ±0.39% ±0.52%  ±0.67%
http/end-vs-write-end.js duration=5 method='write' c=100 len=131072 type='asc' benchmarker='wrk'                 -0.17 %       ±1.06% ±1.41%  ±1.84%
http/end-vs-write-end.js duration=5 method='write' c=100 len=131072 type='buf' benchmarker='wrk'                 -1.18 %       ±1.27% ±1.69%  ±2.20%
http/end-vs-write-end.js duration=5 method='write' c=100 len=131072 type='utf' benchmarker='wrk'                  0.25 %       ±1.93% ±2.57%  ±3.34%
http/end-vs-write-end.js duration=5 method='write' c=100 len=262144 type='asc' benchmarker='wrk'                 -0.68 %       ±1.65% ±2.19%  ±2.85%
http/end-vs-write-end.js duration=5 method='write' c=100 len=262144 type='buf' benchmarker='wrk'                 -0.20 %       ±1.28% ±1.71%  ±2.23%
http/end-vs-write-end.js duration=5 method='write' c=100 len=262144 type='utf' benchmarker='wrk'                 -0.18 %       ±0.67% ±0.89%  ±1.15%
http/end-vs-write-end.js duration=5 method='write' c=100 len=65536 type='asc' benchmarker='wrk'                  -0.76 %       ±0.89% ±1.19%  ±1.55%
http/end-vs-write-end.js duration=5 method='write' c=100 len=65536 type='buf' benchmarker='wrk'                  -0.28 %       ±1.54% ±2.05%  ±2.66%
http/end-vs-write-end.js duration=5 method='write' c=100 len=65536 type='utf' benchmarker='wrk'                  -0.33 %       ±0.92% ±1.23%  ±1.60%
http/headers.js duration=5 len=1 n=10 benchmarker='wrk'                                                           1.10 %       ±1.66% ±2.21%  ±2.87%
http/headers.js duration=5 len=1 n=600 benchmarker='wrk'                                                         -0.46 %       ±2.01% ±2.69%  ±3.54%
http/headers.js duration=5 len=100 n=10 benchmarker='wrk'                                                        -0.58 %       ±1.80% ±2.40%  ±3.12%
http/headers.js duration=5 len=100 n=600 benchmarker='wrk'                                                        0.76 %       ±1.49% ±1.98%  ±2.58%
http/http_server_for_chunky_client.js type='send' n=2000 len=1                                                    0.38 %       ±0.60% ±0.81%  ±1.05%
http/http_server_for_chunky_client.js type='send' n=2000 len=128                                                  0.08 %       ±0.74% ±0.98%  ±1.28%
http/http_server_for_chunky_client.js type='send' n=2000 len=16                                            *     -0.74 %       ±0.71% ±0.95%  ±1.24%
http/http_server_for_chunky_client.js type='send' n=2000 len=32                                                   0.43 %       ±0.67% ±0.89%  ±1.15%
http/http_server_for_chunky_client.js type='send' n=2000 len=4                                                    0.15 %       ±0.68% ±0.90%  ±1.18%
http/http_server_for_chunky_client.js type='send' n=2000 len=64                                                  -0.13 %       ±0.82% ±1.09%  ±1.43%
http/http_server_for_chunky_client.js type='send' n=2000 len=8                                                   -0.01 %       ±0.76% ±1.01%  ±1.32%
http/http_server_for_chunky_client.js type='send' n=5 len=1                                                      -2.95 %       ±6.92% ±9.22% ±12.01%
http/http_server_for_chunky_client.js type='send' n=5 len=128                                                    -0.79 %       ±0.81% ±1.07%  ±1.40%
http/http_server_for_chunky_client.js type='send' n=5 len=16                                                     -0.48 %       ±0.65% ±0.86%  ±1.13%
http/http_server_for_chunky_client.js type='send' n=5 len=32                                                     -0.83 %       ±3.49% ±4.65%  ±6.05%
http/http_server_for_chunky_client.js type='send' n=5 len=4                                                      -0.12 %       ±0.86% ±1.14%  ±1.48%
http/http_server_for_chunky_client.js type='send' n=5 len=64                                                      0.42 %       ±3.47% ±4.61%  ±6.00%
http/http_server_for_chunky_client.js type='send' n=5 len=8                                                      -0.29 %       ±0.71% ±0.95%  ±1.23%
http/http_server_for_chunky_client.js type='send' n=50 len=1                                                      0.39 %       ±1.98% ±2.63%  ±3.42%
http/http_server_for_chunky_client.js type='send' n=50 len=128                                                   -0.00 %       ±1.31% ±1.75%  ±2.29%
http/http_server_for_chunky_client.js type='send' n=50 len=16                                                    -0.67 %       ±1.25% ±1.67%  ±2.20%
http/http_server_for_chunky_client.js type='send' n=50 len=32                                                     0.70 %       ±1.30% ±1.74%  ±2.29%
http/http_server_for_chunky_client.js type='send' n=50 len=4                                                      1.10 %       ±1.40% ±1.87%  ±2.44%
http/http_server_for_chunky_client.js type='send' n=50 len=64                                                    -0.53 %       ±1.14% ±1.52%  ±2.00%
http/http_server_for_chunky_client.js type='send' n=50 len=8                                                     -0.52 %       ±1.39% ±1.86%  ±2.44%
http/http_server_for_chunky_client.js type='send' n=500 len=1                                                     0.33 %       ±0.73% ±0.97%  ±1.26%
http/http_server_for_chunky_client.js type='send' n=500 len=128                                                  -0.25 %       ±0.70% ±0.94%  ±1.22%
http/http_server_for_chunky_client.js type='send' n=500 len=16                                                   -0.12 %       ±0.72% ±0.95%  ±1.24%
http/http_server_for_chunky_client.js type='send' n=500 len=32                                                    0.03 %       ±0.76% ±1.02%  ±1.32%
http/http_server_for_chunky_client.js type='send' n=500 len=4                                                     0.03 %       ±0.92% ±1.23%  ±1.60%
http/http_server_for_chunky_client.js type='send' n=500 len=64                                                   -0.09 %       ±0.72% ±0.95%  ±1.24%
http/http_server_for_chunky_client.js type='send' n=500 len=8                                                     0.01 %       ±0.70% ±0.94%  ±1.22%
http/incoming_headers.js duration=5 w=0 headers=20 connections=50 benchmarker='wrk'                               0.56 %       ±1.93% ±2.57%  ±3.34%
http/incoming_headers.js duration=5 w=6 headers=20 connections=50 benchmarker='wrk'                               1.28 %       ±2.18% ±2.90%  ±3.78%
http/set_header.js n=1000000 value='Connection'                                                                  -0.50 %       ±1.63% ±2.18%  ±2.87%
http/set_header.js n=1000000 value='Content-Length'                                                               0.05 %       ±0.73% ±0.97%  ±1.26%
http/set_header.js n=1000000 value='Content-Type'                                                         **      1.03 %       ±0.77% ±1.03%  ±1.34%
http/set_header.js n=1000000 value='Set-Cookie'                                                                   0.36 %       ±1.10% ±1.47%  ±1.91%
http/set_header.js n=1000000 value='Transfer-Encoding'                                                            0.21 %       ±0.93% ±1.23%  ±1.61%
http/set_header.js n=1000000 value='Vary'                                                                  *     -2.27 %       ±2.20% ±2.97%  ±3.93%
http/set_header.js n=1000000 value='X-Powered-By'                                                                 0.33 %       ±1.01% ±1.35%  ±1.75%
http/set-header.js duration=5 res='normal' benchmarker='wrk'                                                      1.02 %       ±2.12% ±2.82%  ±3.67%
http/set-header.js duration=5 res='setHeader' benchmarker='wrk'                                                  -1.68 %       ±1.71% ±2.27%  ±2.95%
http/set-header.js duration=5 res='setHeaderWH' benchmarker='wrk'                                                 0.43 %       ±1.98% ±2.63%  ±3.43%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=1 len=1024 type='buffer' benchmarker='wrk'                    -0.47 %       ±1.76% ±2.35%  ±3.06%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=1 len=1024 type='bytes' benchmarker='wrk'                      1.43 %       ±1.87% ±2.49%  ±3.25%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=1 len=102400 type='buffer' benchmarker='wrk'                   0.73 %       ±1.26% ±1.68%  ±2.19%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=1 len=102400 type='bytes' benchmarker='wrk'                    0.48 %       ±0.69% ±0.92%  ±1.19%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=1 len=4 type='buffer' benchmarker='wrk'                       -1.58 %       ±1.74% ±2.32%  ±3.02%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=1 len=4 type='bytes' benchmarker='wrk'                         0.44 %       ±1.55% ±2.07%  ±2.69%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=4 len=1024 type='buffer' benchmarker='wrk'                     1.13 %       ±1.71% ±2.28%  ±2.96%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=4 len=1024 type='bytes' benchmarker='wrk'                      0.58 %       ±1.87% ±2.49%  ±3.25%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=4 len=102400 type='buffer' benchmarker='wrk'                   0.43 %       ±1.50% ±1.99%  ±2.59%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=4 len=102400 type='bytes' benchmarker='wrk'             *      0.96 %       ±0.95% ±1.27%  ±1.65%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=4 len=4 type='buffer' benchmarker='wrk'                        0.81 %       ±1.54% ±2.05%  ±2.66%
http/simple.js duration=5 chunkedEnc=0 c=50 chunks=4 len=4 type='bytes' benchmarker='wrk'                        -1.02 %       ±1.77% ±2.36%  ±3.07%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=1 len=1024 type='buffer' benchmarker='wrk'                    0.11 %       ±1.34% ±1.79%  ±2.32%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=1 len=1024 type='bytes' benchmarker='wrk'                    -1.14 %       ±1.64% ±2.18%  ±2.84%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=1 len=102400 type='buffer' benchmarker='wrk'                  1.19 %       ±1.62% ±2.16%  ±2.81%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=1 len=102400 type='bytes' benchmarker='wrk'                  -1.23 %       ±1.84% ±2.44%  ±3.18%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=1 len=4 type='buffer' benchmarker='wrk'                      -0.13 %       ±1.40% ±1.87%  ±2.43%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=1 len=4 type='bytes' benchmarker='wrk'                       -0.73 %       ±1.40% ±1.86%  ±2.42%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=4 len=1024 type='buffer' benchmarker='wrk'                   -0.65 %       ±1.49% ±1.99%  ±2.59%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=4 len=1024 type='bytes' benchmarker='wrk'                    -0.76 %       ±1.60% ±2.12%  ±2.77%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=4 len=102400 type='buffer' benchmarker='wrk'                  0.59 %       ±1.63% ±2.17%  ±2.82%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=4 len=102400 type='bytes' benchmarker='wrk'                   0.09 %       ±0.93% ±1.23%  ±1.60%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=4 len=4 type='buffer' benchmarker='wrk'                      -0.68 %       ±1.42% ±1.89%  ±2.46%
http/simple.js duration=5 chunkedEnc=0 c=500 chunks=4 len=4 type='bytes' benchmarker='wrk'                       -0.53 %       ±1.62% ±2.16%  ±2.81%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=1 len=1024 type='buffer' benchmarker='wrk'             **      2.67 %       ±1.94% ±2.58%  ±3.36%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=1 len=1024 type='bytes' benchmarker='wrk'                     -0.11 %       ±1.54% ±2.06%  ±2.68%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=1 len=102400 type='buffer' benchmarker='wrk'                  -0.56 %       ±1.38% ±1.83%  ±2.38%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=1 len=102400 type='bytes' benchmarker='wrk'                    0.20 %       ±0.77% ±1.02%  ±1.33%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=1 len=4 type='buffer' benchmarker='wrk'                       -0.02 %       ±1.73% ±2.30%  ±3.00%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=1 len=4 type='bytes' benchmarker='wrk'                         0.60 %       ±1.66% ±2.21%  ±2.88%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=4 len=1024 type='buffer' benchmarker='wrk'                    -0.39 %       ±1.52% ±2.03%  ±2.65%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=4 len=1024 type='bytes' benchmarker='wrk'                      0.43 %       ±1.56% ±2.07%  ±2.70%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=4 len=102400 type='buffer' benchmarker='wrk'                  -0.55 %       ±1.47% ±1.96%  ±2.55%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=4 len=102400 type='bytes' benchmarker='wrk'                   -0.26 %       ±0.97% ±1.29%  ±1.68%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=4 len=4 type='buffer' benchmarker='wrk'                **      2.51 %       ±1.58% ±2.11%  ±2.75%
http/simple.js duration=5 chunkedEnc=1 c=50 chunks=4 len=4 type='bytes' benchmarker='wrk'                        -0.16 %       ±1.58% ±2.11%  ±2.74%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=1 len=1024 type='buffer' benchmarker='wrk'                    0.19 %       ±1.65% ±2.20%  ±2.86%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=1 len=1024 type='bytes' benchmarker='wrk'                    -1.13 %       ±1.75% ±2.32%  ±3.02%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=1 len=102400 type='buffer' benchmarker='wrk'                  1.16 %       ±1.44% ±1.91%  ±2.49%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=1 len=102400 type='bytes' benchmarker='wrk'                   0.21 %       ±0.81% ±1.08%  ±1.40%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=1 len=4 type='buffer' benchmarker='wrk'                       0.55 %       ±1.51% ±2.01%  ±2.62%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=1 len=4 type='bytes' benchmarker='wrk'                        0.31 %       ±1.63% ±2.17%  ±2.83%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=4 len=1024 type='buffer' benchmarker='wrk'             *     -1.68 %       ±1.42% ±1.89%  ±2.47%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=4 len=1024 type='bytes' benchmarker='wrk'                     0.52 %       ±1.39% ±1.85%  ±2.41%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=4 len=102400 type='buffer' benchmarker='wrk'                 -0.25 %       ±1.30% ±1.73%  ±2.25%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=4 len=102400 type='bytes' benchmarker='wrk'                   0.29 %       ±1.12% ±1.49%  ±1.94%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=4 len=4 type='buffer' benchmarker='wrk'                       0.32 %       ±1.43% ±1.90%  ±2.48%
http/simple.js duration=5 chunkedEnc=1 c=500 chunks=4 len=4 type='bytes' benchmarker='wrk'                       -0.12 %       ±1.47% ±1.96%  ±2.55%
http/upgrade.js n=1000                                                                                   ***      1.11 %       ±0.48% ±0.63%  ±0.82%
http/upgrade.js n=5                                                                                        *      0.42 %       ±0.39% ±0.52%  ±0.67%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 222 comparisons, you can thus
expect the following amount of false-positive results:
  11.10 false positives, when considering a   5% risk acceptance (*, **, ***),
  2.22 false positives, when considering a   1% risk acceptance (**, ***),
  0.22 false positives, when considering a 0.1% risk acceptance (***)

All the other HTTP benchmarks I could do confirm that those two PRs are roughly equivalent.

Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

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

lgtm

@mcollina
Copy link
Member

There are probably more to check/verify/revert in different hot paths, but this matches what I found (so far) for http.

@nodejs-github-bot
Copy link
Collaborator

Evidence has shown that use of primordials have sometimes an impact of
performance. This commit reverts the changes who are most likely to be
responsible for performance regression in the HTTP response path.
@aduh95 aduh95 force-pushed the fewer-primordials branch from 39292b9 to 680ecc4 Compare April 17, 2021 09:31
@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@nodejs-github-bot
Copy link
Collaborator

@aduh95 aduh95 added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Apr 17, 2021
mcollina pushed a commit that referenced this pull request Apr 19, 2021
Evidence has shown that use of primordials have sometimes an impact of
performance. This commit reverts the changes who are most likely to be
responsible for performance regression in the HTTP response path.

PR-URL: #38248
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
@mcollina
Copy link
Member

Landed in ee9e2a2

@mcollina mcollina closed this Apr 19, 2021
@aduh95 aduh95 deleted the fewer-primordials branch April 19, 2021 08:25
aduh95 added a commit to aduh95/node that referenced this pull request Jun 8, 2021
Evidence has shown that use of primordials have sometimes an impact of
performance. This commit reverts the changes who are most likely to be
responsible for performance regression in the HTTP response path.

PR-URL: nodejs#38248
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
targos pushed a commit that referenced this pull request Jun 11, 2021
Evidence has shown that use of primordials have sometimes an impact of
performance. This commit reverts the changes who are most likely to be
responsible for performance regression in the HTTP response path.

PR-URL: #38248
Backport-PR-URL: #38972
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. lib / src Issues and PRs related to general changes in the lib or src directory. needs-benchmark-ci PR that need a benchmark CI run. needs-ci PRs that need a full CI run.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants