Skip to content

swerver: update to v0.1.0-alpha.8 — H2 flow control, fair scheduling, header fixes#745

Open
justinGrosvenor wants to merge 5 commits into
MDA2AV:mainfrom
justinGrosvenor:swerver-alpha3
Open

swerver: update to v0.1.0-alpha.8 — H2 flow control, fair scheduling, header fixes#745
justinGrosvenor wants to merge 5 commits into
MDA2AV:mainfrom
justinGrosvenor:swerver-alpha3

Conversation

@justinGrosvenor
Copy link
Copy Markdown
Contributor

@justinGrosvenor justinGrosvenor commented May 20, 2026

Summary

  • Pin swerver Dockerfile to v0.1.0-alpha.8 tag
  • v0.1.0-alpha.7 (existing): H2 upload flow control fix, postDiscard body policy, json-tls test
  • v0.1.0-alpha.8 (new): H2 send-side flow control enforcement, per-stream fair scheduling, write coalescing, stream-level error handling for oversized headers, /blob preencoding

Key improvements in alpha.8

  • H2 many-headers: 12.8% error rate → 0% — oversized header blocks now return per-stream RST_STREAM instead of connection-killing GOAWAY
  • H2 large-response: 46K → 72K req/s (+57%) — /blob added to H2 pre-encoded cache
  • H2 flow control: send-side window enforcement prevents protocol violations under multiplexing load
  • H2 fair scheduling: large bodies emit one DATA frame then defer, preventing head-of-line blocking
  • 6 new H2 protocol tests

Config

No config changes needed — all improvements are internal to the H2 protocol stack.

Test plan

  • validate.sh swerver passes all 11 subscribed tests
  • Docker build succeeds with pinned v0.1.0-alpha.8 tag
  • Upload test passes at all sizes (500K, 2M, 10M, 20M)
  • json-tls negotiates HTTP/1.1 on :8081 and returns correct JSON
  • H2 benchmarks: 0% error rate on many-headers, +33% vs nginx on large-response

The upload endpoint now uses postDiscard (body discard mode) —
bytes are counted but never buffered. The 22MB body_buffer_size
and body_buffer_count entries were dead weight.
- Bump to alpha.7 (H2 flow control fix, postDiscard body policy)
- Re-enable upload test: postDiscard counts bytes without buffering,
  so 20MB uploads use ~0 body memory instead of 20MB per connection
- Add json-tls test: third swerver process on :8081 with TLS for
  HTTP/1.1-over-TLS JSON endpoint validation
- Dockerfile: add zlib1g-dev, expose port 8081, copy TLS H1 config
@justinGrosvenor
Copy link
Copy Markdown
Contributor Author

/benchmark -f swerver

@github-actions
Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: swerver | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 3,548,694 6418.3% 1.7GiB +0.2% -82.5%
baseline 4096 3,693,785 6562.2% 1.7GiB -0.8% -82.5%
pipelined 512 12,400,964 3042.6% 1.6GiB +0.2% -83.5%
pipelined 4096 24,976,965 6059.2% 1.7GiB -7.5% -82.5%
limited-conn 512 2,416,298 5804.2% 1.7GiB +4.9% -82.5%
limited-conn 4096 2,587,021 6097.4% 1.7GiB ~0% -82.7%
json 4096 2,363,307 6395.5% 1.7GiB +0.8% -82.7%
json-tls 4096 1,961,117 6406.5% 1.9GiB NEW NEW
upload 32 1 16.4% 1.5GiB NEW NEW
upload 256 61 259.6% 3.0GiB NEW NEW
static 1024 1,005,177 6029.1% 1.7GiB +1.3% -82.5%
static 4096 1,114,845 6440.7% 1.7GiB -2.4% -82.7%
static 6800 1,122,501 6444.6% 1.7GiB -4.4% -82.7%
baseline-h2 256 2,244,736 6316.9% 1.6GiB +64.4% ~0%
baseline-h2 1024 2,293,280 6321.8% 1.9GiB +55.8% +11.8%
static-h2 256 0 39.9% 1.1GiB NEW NEW
static-h2 1024 0 47.3% 1.1GiB NEW NEW
baseline-h3 64 862,324 3809.5% 1.8GiB NEW NEW
static-h3 64 0 4313.1% 1.6GiB NEW NEW
Full log

finished in 5.01s, 821652.00 req/s, 31.34MB/s
requests: 4108260 total, 4112356 started, 4108260 done, 4108260 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 4108260 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 156.72MB (164331296) total, 137.13MB (143789100) headers (space savings 46.15%), 3.92MB (4108260) data
UDP datagram: 1808508 sent, 4113637 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      247us     58.18ms      2.08ms     4.57ms     5.28ms     2.29ms      1.93ms    89.05%
connect     :     2.31ms      8.29ms      3.60ms     6.49ms     8.29ms     4.05ms      1.29ms    78.13%
TTFB        :    37.23ms     64.66ms     43.67ms    56.37ms    64.66ms    45.09ms      5.85ms    75.00%
req/s       :    4687.67    25880.36    10994.22   25086.52   25880.36   12837.92     5725.10    56.25%
min RTT     :       33us      2.39ms        69us     1.67ms     2.39ms      450us       645us    79.69%
smoothed RTT:      419us      5.26ms      1.68ms     4.43ms     5.26ms     2.01ms      1.29ms    67.19%
packets sent:       8468       63319       21776      62570      63319   28259.94    16222.93    67.19%
packets recv:      23475      129432       55046     125451     129432   64276.58    28581.25    56.25%
packets lost:          4           6           4          4          6       4.06        0.30    95.31%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3889.5% | Mem 1.7GiB

[run 3/3]
starting benchmark...
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
20.
253 bits
Negotiated Group: 20.
x25519
Resumption: no
Application protocol: h3
38.
46.
.

. Stopping all clients.

finished in 5.01s, 864048.80 req/s, 32.96MB/s
requests: 4320244 total, 4324340 started, 4320244 done, 4320244 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 4320244 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 164.81MB (172810656) total, 144.20MB (151208925) headers (space savings 46.15%), 4.12MB (4320255) data
UDP datagram: 1591861 sent, 4323957 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      208us     56.56ms      2.24ms     3.77ms     3.90ms     2.21ms      1.64ms    96.48%
connect     :     2.13ms      7.45ms      3.32ms     5.23ms     7.45ms     3.55ms      1.00ms    78.13%
TTFB        :    36.33ms     59.75ms     41.23ms    53.38ms    59.75ms    42.74ms      4.73ms    79.69%
req/s       :    4518.36    25839.01    12477.16   25643.86   25839.01   13500.22     5620.76    64.06%
min RTT     :       32us      2.56ms        75us     2.32ms     2.56ms      474us       717us    87.50%
smoothed RTT:      429us      3.91ms      2.06ms     3.78ms     3.91ms     2.03ms       980us    62.50%
packets sent:       6418       65499       19121      51648      65499   24874.83    14365.55    67.19%
packets recv:      22605      129224       62413     128234     129224   67562.83    28084.69    64.06%
packets lost:          4           4           4          4          4       4.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3809.5% | Mem 1.8GiB

=== Best: 862324 req/s (CPU: 3809.5%, Mem: 1.8GiB) ===
[info] saved results/baseline-h3/64/swerver.json
httparena-bench-swerver
httparena-bench-swerver

==============================================
=== swerver / static-h3 / 64c (tool=h2load-h3) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
.
18.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
23. Stopping all clients.

finished in 5.01s, 728516.20 req/s, 33.35MB/s
requests: 3642581 total, 3646677 started, 3642581 done, 0 succeeded, 3642581 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 3642581 4xx, 0 5xx
traffic: 166.74MB (174844784) total, 121.58MB (127490335) headers (space savings 46.15%), 31.26MB (32783229) data
UDP datagram: 1690927 sent, 3646509 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      250us     70.42ms      3.09ms     7.71ms     7.84ms     3.13ms      2.52ms    87.56%
connect     :     2.35ms      9.71ms      4.86ms     7.50ms     9.71ms     5.04ms      1.46ms    68.75%
TTFB        :    37.81ms     72.73ms     48.72ms    61.63ms    72.73ms    49.71ms      6.65ms    73.44%
req/s       :    2564.50    19898.74     9161.18   19843.55   19898.74   11382.68     5358.20    65.63%
min RTT     :       31us      3.88ms        55us     1.92ms     3.88ms      524us       858us    78.13%
smoothed RTT:      496us      7.78ms      2.19ms     7.76ms     7.78ms     2.87ms      1.92ms    82.81%
packets sent:       3802       51301       22304      47051      51301   26422.73    13465.40    60.94%
packets recv:      13302       99511       45860      99240      99511   56977.70    26764.33    65.63%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 4313.1% | Mem 1.6GiB

[run 2/3]
starting benchmark...
8.
4.
6Main benchmark duration is started for thread #5.
.
28.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
12. Stopping all clients.

finished in 5.01s, 657071.40 req/s, 30.08MB/s
requests: 3285357 total, 3289453 started, 3285357 done, 0 succeeded, 3285357 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 3285357 4xx, 0 5xx
traffic: 150.39MB (157698032) total, 109.66MB (114987530) headers (space savings 46.15%), 28.20MB (29568222) data
UDP datagram: 1364449 sent, 3291949 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      961us     59.08ms      3.45ms     7.94ms     8.11ms     3.78ms      2.43ms    81.07%
connect     :     2.42ms      6.14ms      3.54ms     5.91ms     6.14ms     3.79ms      1.02ms    62.50%
TTFB        :    37.53ms     57.65ms     42.15ms    53.94ms    57.65ms    44.17ms      5.22ms    67.19%
req/s       :    2983.86    20081.72     8583.88   20068.54   20081.72   10266.32     5300.16    76.56%
min RTT     :       31us      5.05ms        70us     3.45ms     5.05ms      905us      1.27ms    82.81%
smoothed RTT:     1.13ms      8.07ms      3.53ms     7.12ms     8.07ms     3.69ms      1.85ms    62.50%
packets sent:       6024       49204       13942      46787      49204   21321.52    14980.45    68.75%
packets recv:      15195      100448       43019     100389     100448   51437.70    26440.44    75.00%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3654.9% | Mem 1.7GiB

[run 3/3]
starting benchmark...
2.
12Main benchmark duration is started for thread #1.
.

TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
37.

finished in 5.01s, 708433.20 req/s, 32.43MB/s
requests: 3542166 total, 3546262 started, 3542166 done, 0 succeeded, 3542166 failed, 0 errored, 0 timeout
status codes: 0 2xx, 0 3xx, 3542166 4xx, 0 5xx
traffic: 162.15MB (170024864) total, 118.23MB (123975810) headers (space savings 46.15%), 30.40MB (31879494) data
UDP datagram: 1540595 sent, 3544987 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      931us     63.87ms      3.44ms     8.73ms     8.97ms     3.72ms      2.63ms    88.96%
connect     :     1.95ms      7.99ms      3.36ms     6.27ms     7.99ms     3.72ms      1.27ms    82.81%
TTFB        :    37.61ms     65.28ms     42.37ms    55.71ms    65.28ms    43.96ms      5.92ms    79.69%
req/s       :    3362.40    20126.51    10011.50   20004.49   20126.51   11068.82     5346.55    59.38%
min RTT     :       30us      4.69ms        71us     3.30ms     4.69ms      745us      1.16ms    81.25%
smoothed RTT:     1.15ms      9.14ms      3.19ms     8.62ms     9.14ms     3.65ms      2.26ms    67.19%
packets sent:       5690       66760       18171      60039      66760   24073.80    16380.87    76.56%
packets recv:      16852      100651       50108     100045     100651   55391.42    26719.09    59.38%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 4002.9% | Mem 1.8GiB

=== Best: 0 req/s (CPU: 4313.1%, Mem: 1.6GiB) ===
[info] saved results/static-h3/64/swerver.json
httparena-bench-swerver
httparena-bench-swerver
[info] skip: swerver does not subscribe to gateway-64
[info] skip: swerver does not subscribe to gateway-h3
[info] skip: swerver does not subscribe to production-stack
[info] skip: swerver does not subscribe to unary-grpc
[info] skip: swerver does not subscribe to unary-grpc-tls
[info] skip: swerver does not subscribe to stream-grpc
[info] skip: swerver does not subscribe to stream-grpc-tls
[info] skip: swerver does not subscribe to echo-ws
[info] skip: swerver does not subscribe to echo-ws-pipeline
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h3-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-tls-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-6800.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h3-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-32.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

H2 send-side flow control, per-stream fair scheduling, stream-level
error handling for oversized headers, /blob preencoding. Eliminates
12.8% error rate on many-headers test, +57% on large-response.
@justinGrosvenor justinGrosvenor changed the title swerver: update to v0.1.0-alpha.7 — upload + json-tls tests swerver: update to v0.1.0-alpha.8 — H2 flow control, fair scheduling, header fixes May 20, 2026
@justinGrosvenor
Copy link
Copy Markdown
Contributor Author

/benchmark -f swerver

@github-actions
Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: swerver | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 3,537,366 6401.5% 1.8GiB -0.2% -81.4%
baseline 4096 3,682,015 6394.3% 1.8GiB -1.1% -81.4%
pipelined 512 12,714,613 3175.0% 1.8GiB +2.8% -81.4%
pipelined 4096 25,276,482 6044.9% 1.8GiB -6.4% -81.4%
limited-conn 512 2,410,966 5718.0% 1.8GiB +4.7% -81.4%
limited-conn 4096 2,581,267 5984.7% 1.9GiB -0.2% -80.6%
json 4096 2,376,400 6587.2% 1.9GiB +1.4% -80.6%
json-tls 4096 1,939,410 6403.7% 2.1GiB NEW NEW
upload 32 1 25.0% 1.8GiB NEW NEW
upload 256 42 214.1% 3.0GiB NEW NEW
static 1024 1,015,878 6116.4% 1.8GiB +2.4% -81.4%
static 4096 1,118,014 6431.5% 1.8GiB -2.1% -81.6%
static 6800 1,136,905 6439.6% 1.9GiB -3.1% -80.6%
baseline-h2 256 2,258,760 6490.7% 1.9GiB +65.5% +18.7%
baseline-h2 1024 2,275,537 6315.9% 2.1GiB +54.6% +23.5%
static-h2 256 247,398 6479.3% 1.9GiB NEW NEW
static-h2 1024 239,767 6384.5% 2.2GiB NEW NEW
baseline-h3 64 897,408 4417.7% 1.9GiB NEW NEW
static-h3 64 114,595 3896.5% 1.9GiB NEW NEW
Full log
48.

finished in 5.01s, 797895.00 req/s, 30.44MB/s
requests: 3989475 total, 3993571 started, 3989475 done, 3989475 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 3989475 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 152.19MB (159579896) total, 133.16MB (139631835) headers (space savings 46.15%), 3.80MB (3989481) data
UDP datagram: 1720840 sent, 3993864 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      246us     57.16ms      2.41ms     4.74ms     5.04ms     2.60ms      1.97ms    86.82%
connect     :     2.38ms      7.64ms      4.01ms     5.94ms     7.64ms     3.99ms      1.09ms    70.31%
TTFB        :    37.81ms     61.61ms     44.28ms    54.11ms    61.61ms    44.79ms      4.90ms    70.31%
req/s       :    3850.60    25361.44     9837.01   25122.32   25361.44   12466.65     6433.76    67.19%
min RTT     :       31us      3.24ms        70us     2.15ms     3.24ms      570us       827us    81.25%
smoothed RTT:      454us      5.31ms      2.03ms     4.77ms     5.31ms     2.29ms      1.42ms    62.50%
packets sent:       9442       77749       21964      59090      77749   26890.12    17019.53    78.13%
packets recv:      19423      126825       49311     125644     126825   62405.13    32146.53    67.19%
packets lost:          4           4           4          4          4       4.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3669.5% | Mem 1.8GiB

[run 3/3]
starting benchmark...
60.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
51. Stopping all clients.

finished in 5.01s, 899203.60 req/s, 34.30MB/s
requests: 4496018 total, 4500114 started, 4496018 done, 4496018 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 4496018 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 171.51MB (179841616) total, 150.07MB (157360735) headers (space savings 46.15%), 4.29MB (4496021) data
UDP datagram: 1885080 sent, 4499966 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      282us     56.92ms      1.87ms     4.96ms     5.28ms     2.23ms      1.96ms    85.96%
connect     :     2.43ms      7.12ms      3.83ms     5.89ms     7.12ms     3.95ms      1.07ms    70.31%
TTFB        :    38.31ms     58.84ms     43.05ms    54.07ms    58.84ms    44.23ms      4.82ms    70.31%
req/s       :    4766.93    24976.40    10930.48   24798.48   24976.40   14049.45     6425.58    70.31%
min RTT     :       33us      2.54ms        59us     1.93ms     2.54ms      428us       670us    78.13%
smoothed RTT:      429us      5.21ms      1.68ms     4.96ms     5.21ms     2.11ms      1.43ms    73.44%
packets sent:      10386       54449       22916      53221      54449   29456.37    13719.67    64.06%
packets recv:      23882      124922       54778     124012     124922   70312.97    32099.22    70.31%
packets lost:          4           4           4          4          4       4.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 4417.7% | Mem 1.9GiB

=== Best: 897408 req/s (CPU: 4417.7%, Mem: 1.9GiB) ===
[info] saved results/baseline-h3/64/swerver.json
httparena-bench-swerver
httparena-bench-swerver

==============================================
=== swerver / static-h3 / 64c (tool=h2load-h3) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
50.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3

26

finished in 5.01s, 110292.00 req/s, 3.54GB/s
requests: 551460 total, 555556 started, 551460 done, 551460 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 551627 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 17.69GB (18998734483) total, 21.36MB (22394415) headers (space savings 40.30%), 17.67GB (18969314669) data
UDP datagram: 2820302 sent, 18317360 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :       94us     61.52ms       511us     1.67ms     2.15ms      635us       793us    91.67%
connect     :     2.59ms      8.90ms      4.76ms     7.47ms     8.90ms     4.94ms      1.27ms    79.69%
TTFB        :    38.99ms     67.22ms     47.54ms    61.64ms    67.22ms    49.09ms      5.82ms    76.56%
req/s       :     597.36     3061.35     1549.55    2960.94    3061.35    1723.26      791.28    57.81%
min RTT     :       10us       620us        23us      449us      620us       88us       148us    89.06%
smoothed RTT:      102us      2.28ms       355us     1.52ms     2.28ms      553us       551us    82.81%
packets sent:      10155       82409       39468      78360      82409   44069.22    24098.92    59.38%
packets recv:      94222      490243      254056     480705     490243  286209.75   133784.96    48.44%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3698.8% | Mem 1.7GiB

[run 2/3]
starting benchmark...
30.
33.
.
.Main benchmark duration is started for thread #40.


TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3

. Stopping all clients.

finished in 5.01s, 114793.40 req/s, 3.68GB/s
requests: 573967 total, 578063 started, 573967 done, 573967 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 574123 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 18.42GB (19773488242) total, 22.23MB (23307753) headers (space savings 40.30%), 18.39GB (19742826442) data
UDP datagram: 2783582 sent, 18912209 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :       94us     58.16ms       490us     1.39ms     2.08ms      586us       713us    93.66%
connect     :     2.39ms      7.33ms      3.82ms     6.29ms     7.33ms     3.99ms      1.09ms    71.88%
TTFB        :    37.83ms     61.03ms     43.56ms    54.90ms    61.03ms    44.54ms      5.15ms    76.56%
req/s       :     538.51     3121.36     1451.04    2945.22    3121.36    1793.58      812.70    60.94%
min RTT     :       10us       648us        17us      219us      648us       60us        96us    92.19%
smoothed RTT:       97us      1.62ms       267us     1.44ms     1.62ms      439us       400us    90.63%
packets sent:      14822       75402       38478      73562      75402   43495.47    20298.18    57.81%
packets recv:      90540      494856      240433     471513     494856  295504.27   132951.94    59.38%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3896.5% | Mem 1.9GiB

[run 3/3]
starting benchmark...
.Main benchmark duration is started for thread #52.


Cipher: .TLS_AES_128_GCM_SHA256

Server Temp Key: X25519 Warm-up started for thread #253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
18.
.


finished in 5.01s, 111538.60 req/s, 3.58GB/s
requests: 557693 total, 561789 started, 557693 done, 557693 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 557832 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 17.89GB (19212738765) total, 21.60MB (22646486) headers (space savings 40.30%), 17.87GB (19183033439) data
UDP datagram: 2707723 sent, 18379855 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :       92us     57.22ms       533us     1.42ms     1.91ms      609us       665us    92.58%
connect     :     2.24ms      7.45ms      3.28ms     5.12ms     7.45ms     3.56ms       950us    75.00%
TTFB        :    36.34ms     61.09ms     41.54ms    51.79ms    61.09ms    42.72ms      4.52ms    79.69%
req/s       :     611.91     3046.54     1378.70    3040.69    3046.54    1742.73      746.44    64.06%
min RTT     :       10us       507us        18us      168us      507us       54us        91us    92.19%
smoothed RTT:       93us      1.44ms       294us     1.36ms     1.44ms      431us       381us    79.69%
packets sent:       9252       73919       37936      72903      73919   42310.17    19970.46    59.38%
packets recv:      95548      481986      231018     480264     481986  287186.23   122311.23    42.19%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3793.4% | Mem 1.9GiB

=== Best: 114595 req/s (CPU: 3896.5%, Mem: 1.9GiB) ===
[info] saved results/static-h3/64/swerver.json
httparena-bench-swerver
httparena-bench-swerver
[info] skip: swerver does not subscribe to gateway-64
[info] skip: swerver does not subscribe to gateway-h3
[info] skip: swerver does not subscribe to production-stack
[info] skip: swerver does not subscribe to unary-grpc
[info] skip: swerver does not subscribe to unary-grpc-tls
[info] skip: swerver does not subscribe to stream-grpc
[info] skip: swerver does not subscribe to stream-grpc-tls
[info] skip: swerver does not subscribe to echo-ws
[info] skip: swerver does not subscribe to echo-ws-pipeline
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h3-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-tls-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-6800.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h3-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-32.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

Fixes body accumulation overconsume bug that caused upload benchmarks
(multiple POSTs per keep-alive connection) to stall after the first
request.
@justinGrosvenor
Copy link
Copy Markdown
Contributor Author

/benchmark -f swerver

@github-actions
Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: swerver | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 3,536,157 6424.4% 1.8GiB -0.2% -81.4%
baseline 4096 3,724,066 6361.6% 1.8GiB ~0% -81.4%
pipelined 512 11,720,217 3038.5% 1.8GiB -5.3% -81.4%
pipelined 4096 25,362,417 6328.8% 1.8GiB -6.1% -81.4%
limited-conn 512 2,418,629 5751.5% 1.8GiB +5.0% -81.4%
limited-conn 4096 2,580,749 5919.7% 1.9GiB -0.3% -80.6%
json 4096 2,381,532 6355.0% 1.9GiB +1.6% -80.6%
json-tls 4096 1,943,140 6257.5% 2.1GiB NEW NEW
upload 32 2 0.0% 2.0GiB NEW NEW
upload 256 48 268.8% 3.1GiB NEW NEW
static 1024 1,013,421 6073.5% 1.8GiB +2.1% -81.4%
static 4096 1,122,373 6412.4% 1.8GiB -1.7% -81.6%
static 6800 1,135,730 6442.8% 1.9GiB -3.2% -80.6%
baseline-h2 256 2,286,498 6395.1% 1.8GiB +67.5% +12.5%
baseline-h2 1024 2,293,600 6464.7% 2.0GiB +55.8% +17.6%
static-h2 256 250,200 6445.8% 1.8GiB NEW NEW
static-h2 1024 239,862 6360.1% 2.1GiB NEW NEW
baseline-h3 64 878,220 4007.3% 1.9GiB NEW NEW
static-h3 64 116,170 3851.8% 1.7GiB NEW NEW
Full log
request     :      248us     52.85ms      2.25ms     4.51ms     5.03ms     2.11ms      1.85ms    90.52%
connect     :     2.44ms      6.70ms      3.69ms     5.53ms     6.70ms     3.90ms      1.01ms    70.31%
TTFB        :    37.32ms     57.25ms     43.48ms    51.42ms    57.25ms    44.28ms      4.54ms    73.44%
req/s       :    5304.98    25168.48    11964.47   24513.74   25168.48   13541.84     6009.00    70.31%
min RTT     :       31us      1.85ms        69us     1.62ms     1.85ms      367us       555us    79.69%
smoothed RTT:      460us      4.61ms      1.41ms     4.09ms     4.61ms     1.84ms      1.15ms    62.50%
packets sent:       8322       67649       24855      62411      67649   30207.87    17298.59    68.75%
packets recv:      26567      125874       59855     122594     125874   67756.55    30029.01    70.31%
packets lost:          4           4           4          4          4       4.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 4091.4% | Mem 1.8GiB

[run 3/3]
starting benchmark...
18.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: Warm-up started for thread #x25519
Resumption: no
Application protocol: h3
43.
28. Stopping all clients.
3. Stopping all clients.
0

finished in 5.01s, 879977.40 req/s, 33.57MB/s
requests: 4399887 total, 4403983 started, 4399887 done, 4399887 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 4399887 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 167.84MB (175996376) total, 146.86MB (153996115) headers (space savings 46.15%), 4.20MB (4399889) data
UDP datagram: 1641990 sent, 4403562 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :      257us     49.85ms      2.19ms     4.81ms     4.93ms     2.30ms      1.91ms    86.08%
connect     :     2.34ms      5.94ms      3.71ms     5.56ms     5.94ms     3.83ms       882us    64.06%
TTFB        :    37.32ms     53.91ms     42.52ms    51.70ms    53.91ms    43.71ms      4.17ms    65.63%
req/s       :    4858.60    25585.83    11727.48   25494.02   25585.83   13749.16     6666.01    70.31%
min RTT     :       34us      3.06ms        68us     1.85ms     3.06ms      386us       648us    84.38%
smoothed RTT:      432us      4.87ms      1.68ms     4.74ms     4.87ms     2.08ms      1.29ms    65.63%
packets sent:       7600       59608       19584      56920      59608   25658.09    14478.74    70.31%
packets recv:      24381      127961       58665     127518     127961   68806.66    33305.37    70.31%
packets lost:          4           4           4          4          4       4.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 4007.3% | Mem 1.9GiB

=== Best: 878220 req/s (CPU: 4007.3%, Mem: 1.9GiB) ===
[info] saved results/baseline-h3/64/swerver.json
httparena-bench-swerver
httparena-bench-swerver

==============================================
=== swerver / static-h3 / 64c (tool=h2load-h3) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
8.
.

34Main benchmark duration is started for thread #31.
.

TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
.

6Stopped all clients for thread #50
. Stopping all clients.

finished in 5.01s, 116370.20 req/s, 3.73GB/s
requests: 581851 total, 585947 started, 581851 done, 581851 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 582013 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 18.67GB (20044776894) total, 22.53MB (23628283) headers (space savings 40.30%), 18.64GB (20013705386) data
UDP datagram: 2695645 sent, 19045508 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :       91us     65.83ms       494us     1.30ms     1.88ms      568us       743us    95.12%
connect     :     2.51ms      8.93ms      5.01ms     6.68ms     8.93ms     5.01ms      1.15ms    76.56%
TTFB        :    37.87ms     69.04ms     49.16ms    59.42ms    69.04ms    49.26ms      5.70ms    78.13%
req/s       :     671.15     3033.34     1674.76    2900.73    3033.34    1818.22      737.25    60.94%
min RTT     :       10us       306us        15us      210us      306us       46us        71us    87.50%
smoothed RTT:      103us      1.22ms       197us     1.11ms     1.22ms      366us       313us    82.81%
packets sent:      12382       71975       37344      71549      71975   42121.45    20262.24    57.81%
packets recv:     106687      478613      266854     464736     478613  297587.06   122190.74    57.81%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3851.8% | Mem 1.7GiB

[run 2/3]
starting benchmark...

..

TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3
52.
47. Stopping all clients.


finished in 5.01s, 112122.20 req/s, 3.60GB/s
requests: 560611 total, 564707 started, 560611 done, 560611 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 560757 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 17.99GB (19314780687) total, 21.71MB (22765280) headers (space savings 40.30%), 17.96GB (19284870518) data
UDP datagram: 2686098 sent, 18441087 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :       93us     57.71ms       511us     1.47ms     2.40ms      605us       729us    93.84%
connect     :     2.46ms      7.80ms      3.78ms     6.44ms     7.80ms     4.04ms      1.30ms    75.00%
TTFB        :    37.33ms     64.49ms     43.48ms    57.43ms    64.49ms    45.31ms      6.57ms    71.88%
req/s       :     458.76     3027.31     1665.71    2840.15    3027.31    1751.84      766.97    60.94%
min RTT     :       10us       822us        15us      354us      822us       68us       148us    92.19%
smoothed RTT:      101us      2.00ms       315us     1.75ms     2.00ms      495us       522us    84.38%
packets sent:      12662       73942       36582      72066      73942   41972.28    20365.35    53.13%
packets recv:      77221      480881      267031     456490     480881  288142.98   126697.11    56.25%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3787.0% | Mem 1.9GiB

[run 3/3]
starting benchmark...
61.
15.
.
31.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Certificate: RSA 2048 bits
Negotiated Group: x25519
Resumption: no
Application protocol: h3

. Stopping all clients.

finished in 5.01s, 116128.20 req/s, 3.73GB/s
requests: 580641 total, 584737 started, 580641 done, 580641 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 580793 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 18.63GB (20003805507) total, 22.49MB (23578917) headers (space savings 40.30%), 18.60GB (19972827108) data
UDP datagram: 2612159 sent, 18928210 received
                 min         max         median     p95        p99        mean         sd        +/- sd
request     :       95us     53.54ms       492us     1.19ms     1.55ms      551us       638us    95.11%
connect     :     2.30ms      7.00ms      3.36ms     5.07ms     7.00ms     3.58ms       874us    71.88%
TTFB        :    36.95ms     57.36ms     42.32ms    51.40ms    57.36ms    42.95ms      4.21ms    71.88%
req/s       :     906.57     3039.51     1572.11    3029.33    3039.51    1814.44      726.88    57.81%
min RTT     :       10us       190us        16us      116us      190us       38us        41us    82.81%
smoothed RTT:       98us       927us       234us      823us      927us      325us       224us    81.25%
packets sent:      19419       69679       36390      67788      69679   40816.98    15805.80    51.56%
packets recv:     151608      477878      254067     475425     477878  295754.28   115631.38    53.13%
packets lost:          5           5           5          5          5       5.00        0.00   100.00%
GRO packets :          1           1           1          1          1       1.00        0.00   100.00%
[info] CPU 3850.5% | Mem 1.9GiB

=== Best: 116170 req/s (CPU: 3851.8%, Mem: 1.7GiB) ===
[info] saved results/static-h3/64/swerver.json
httparena-bench-swerver
httparena-bench-swerver
[info] skip: swerver does not subscribe to gateway-64
[info] skip: swerver does not subscribe to gateway-h3
[info] skip: swerver does not subscribe to production-stack
[info] skip: swerver does not subscribe to unary-grpc
[info] skip: swerver does not subscribe to unary-grpc-tls
[info] skip: swerver does not subscribe to stream-grpc
[info] skip: swerver does not subscribe to stream-grpc-tls
[info] skip: swerver does not subscribe to echo-ws
[info] skip: swerver does not subscribe to echo-ws-pipeline
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h2-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-h3-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-tls-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/limited-conn-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-6800.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h2-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/static-h3-64.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/upload-32.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant