Skip to content

roadrunner: update to v0.13.1 - #1673

Open
williamthome wants to merge 4 commits into
MDA2AV:mainfrom
williamthome:entries/roadrunner-0.13.0
Open

williamthome wants to merge 4 commits into
MDA2AV:mainfrom
williamthome:entries/roadrunner-0.13.0

Conversation

@williamthome

@williamthome williamthome commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Description

Updates roadrunner to v0.13.1, which reads HTTP/2 sockets with {active, N} and HTTP/1.1 and WebSocket sockets with {active, N} on TLS (saving a call into the TLS connection process per read), handles complete WebSocket frames in one step, runs each WebSocket session in its connection process, and makes HTTP/3 sturdier under packet loss. The roadrunner-gateway entry builds from frameworks/roadrunner, so it picks up the new version too.

The entry also adds a vm.args that runs one I/O poll thread, each with its own pollset, per eight schedulers (+IOPt 13 +IOPp 100), as roadrunner's resource limits guide recommends for many-core servers (docs/resource_limits.md). With the single default poll thread, a server with spare capacity on 64 schedulers was capped by that thread; the setting scales with the cpuset, so it gives 8 threads at 64 schedulers and keeps the default single thread below 16. The rest of vm.args is what relx generated before.


PR Commands — comment on this PR to trigger (requires collaborator approval):

Command Description
/benchmark -f <framework> Run every test the framework subscribes to
/benchmark -f <framework> -t <test> Run one test only
/benchmark -f <framework> --save Run and save results (updates the leaderboard on merge)
/benchmark -f <framework> -t <test> --save Run one test and save results
/benchmark -f <framework> --compare <other> Measure the deltas against another framework instead of this one
/benchmark-multiple -f <fw1>,<fw2>,... Benchmark several frameworks in one run — takes -t and --save too; saved results land in a single commit
/benchmark-multiple --save No -f needed: benchmark and save every framework the PR touches
/benchmark-test -t <test> Benchmark all enabled frameworks subscribed to <test> and save the results

For /benchmark, always specify -f <framework>; the flags combine in any order. Results come back as a comment with a per-profile table of RPS, p99, CPU and memory — one table per framework on multi runs. A new benchmark comment while a run is in flight queues behind it (one deep) instead of cancelling it. For multi-framework PRs (dependency bumps, same-language refactors) prefer /benchmark-multiple, which runs everything in a single job and commits all saved results together, so no run overwrites another. --compare works on single-framework runs only.

What the deltas are measured against. By default, this framework's own results published on main - answering "did this change help?". When you are tuning a variant or a successor entry, --compare re-bases them on another entry instead:

/benchmark -f genhttp --compare genhttp-kestrel

The reply states which baseline it used, and profiles the other framework does not run show n/a rather than a delta.


Run benchmarks locally

You can validate and benchmark your framework locally with the lite script — no CPU pinning, fixed connection counts, all load generators run in Docker.

./scripts/validate.sh <framework>
./scripts/benchmark-lite.sh <framework> baseline
./scripts/benchmark-lite.sh --load-threads 4 <framework>

Requirements: Docker Engine on Linux. Load generators (gcannon, h2load, h2load-h3, wrk) are built as self-contained Docker images on first run.

@williamthome

Copy link
Copy Markdown
Contributor Author

/benchmark-multiple -f roadrunner,roadrunner-gateway

@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

Frameworks: 2 | Test: all tests

✅ roadrunner

Test Conn RPS Rate CPU/req p99 p99.9 CPU Mem Δ RPS Δ Mem
baseline 4096 1,148,070 — — — — 6286.4% 331MiB -1.6% -2.9%
pipelined 4096 5,311,003 — — — — 6165.9% 256MiB -13.4% -3.4%
limited-conn 4096 459,258 — — — — 4191.9% 231MiB +1.9% -0.9%
json-comp 4096 111,370 — — — — 6264.0% 659MiB +6.0% +6.1%
json-comp 16384 113,369 — — — — 6448.8% 671MiB +3.1% +12.2%
json-tls 4096 167,736 — — — — 6423.6% 898MiB +1.6% -0.3%
8gbit 512 48,341 0.9668 ⚠️ 278.46us 1297.0us 6114.0us 1273.8% 462MiB -0.2% -4.9%
static-tls 1024 83,237 — — — — 6165.0% 699MiB -5.1% -0.1%
async-db 1024 125,861 — — — — 6432.3% 716MiB -5.9% -5.2%
fortunes 1024 69,440 — — — — 6250.4% 1.2GiB -1.2% +29.5%
baseline-h2 256 602,386 — — — — 6644.6% 354MiB +17.7% +5.7%
baseline-h2 1024 603,819 — — — — 6493.3% 480MiB +15.8% +5.5%
static-h2 256 78,203 — — — — 6050.3% 488MiB +0.5% -7.9%
static-h2 1024 74,228 — — — — 6269.2% 999MiB -1.5% +0.6%
baseline-h2c 256 966,093 — — — — 6620.1% 273MiB +8.0% +23.0%
baseline-h2c 1024 942,458 — — — — 6523.9% 362MiB +8.5% +42.5%
baseline-h2c 4096 873,164 — — — — 6546.3% 585MiB +12.4% +62.5%
json-h2c 1024 113,317 — — — — 3738.2% 932MiB +9.6% +30.5%
json-h2c 4096 113,958 — — — — 4080.1% 1.5GiB -11.4% +15.4%
baseline-h3 64 181,454 — — — — 3754.4% 376MiB -1.2% +4.2%
static-h3 64 47,376 — — — — 4219.0% 1.4GiB +13.9% +7.7%
echo-ws 512 466,495 — — — — 4763.7% 210MiB +24.9% +3.4%
echo-ws 4096 1,256,222 — — — — 5613.5% 387MiB +23.6% -0.3%
echo-ws 16384 321,391 — — — — 4328.5% 1015MiB -79.8% +12.8%
echo-ws-pipeline 512 17,937,465 — — — — 6553.1% 191MiB +41.8% -5.9%
echo-ws-pipeline 4096 16,479,190 — — — — 6343.3% 308MiB +33.3% -1.9%
echo-ws-pipeline 16384 16,572,620 — — — — 6664.9% 329MiB +35.0% -2.7%
echo-ws-limited 512 435,361 — — — — 4504.8% 236MiB +45.0% -17.5%
echo-ws-limited 4096 439,701 — — — — 4301.7% 232MiB +54.5% -55.9%
latency-1m 1024 920,912 0.9209 ⚠️ 64.12us 1837568.0us 2427904.0us 6123.7% 361MiB +2.5% +4.9%
latency-10k 1024 9,979 0.9979 128.67us 147.0us 653.0us 124.6% 216MiB ~0% +5.4%
latency-500k-8cpu 1024 176,100 0.3522 ⚠️ 45.33us 12955648.0us 13217792.0us 771.9% 143MiB +0.3% +0.7%
async 32000 1,142,223 — — — — 6291.6% 875MiB -2.3% +7.6%

Composite score, main against this run, in the board's default view:

Family main this run Δ
HTTP/1.1 2443.0 (#54 of 102) 2466.7 (#54 of 102) +23.7
HTTP/2 260.5 (#30 of 35) 274.6 (#30 of 35) +14.1
HTTP/3 180.1 (#17 of 19) 199.6 (#17 of 19) +19.5
Gateway 2340.9 (#3 of 9) 2337.7 (#3 of 9) -3.2
WebSocket 597.9 (#26 of 35) 664.6 (#25 of 35) +66.8

The results on main were measured in another session, so a few points up or down can be the machine and not the change.

✅ roadrunner-gateway

Test Conn RPS CPU Mem Δ RPS Δ Mem
gateway-64 512 155,994 5929.4% 2.9GiB +0.5% ~0%
gateway-64 1024 151,295 5958.2% 4.4GiB +0.3% +2.3%
gateway-h3 64 81,666 5286.6% 770MiB +0.2% -5.5%
gateway-h3 256 58,978 4517.6% 1.6GiB +0.7% -5.9%
production-stack 256 236,237 5753.8% 1.4GiB +2.1% ~0%
production-stack 1024 185,500 5418.2% 2.1GiB -4.6% -8.7%

@williamthome

Copy link
Copy Markdown
Contributor Author

/benchmark -f roadrunner -t echo-ws

@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: roadrunner | Test: echo-ws

Test Conn RPS CPU Mem Δ RPS Δ Mem
echo-ws 512 386,028 4550.4% 244MiB +3.4% +20.2%
echo-ws 4096 341,058 4240.9% 371MiB -66.5% -4.4%
echo-ws 16384 327,917 4283.2% 1.0GiB -79.4% +13.8%

Composite score, main against this run, in the board's default view:

Family main this run Δ
HTTP/1.1 2443.0 (#54 of 102) 2443.0 (#54 of 102) +0.0
HTTP/2 260.5 (#30 of 35) 260.5 (#30 of 35) +0.0
HTTP/3 180.1 (#17 of 19) 180.1 (#17 of 19) +0.0
Gateway 2340.9 (#3 of 9) 2340.9 (#3 of 9) +0.0
WebSocket 597.9 (#26 of 35) 437.7 (#28 of 35) -160.2

The results on main were measured in another session, so a few points up or down can be the machine and not the change.

Full log


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.36ms   1.61ms   1.78ms   4.22ms   5.23ms

  1875104 frames sent in 5.00s, 1875104 frames received
  Throughput: 374.87K req/s
  Bandwidth:  2.50MB/s
  WS upgrades: 512
  WS frames:   1875104
  Latency samples: 1875099 / 1875104 responses (100.0%)
[info] CPU 4698.9% | Mem 225MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.37ms   1.62ms   1.79ms   3.82ms   5.01ms

  1864359 frames sent in 5.00s, 1864359 frames received
  Throughput: 372.76K req/s
  Bandwidth:  2.49MB/s
  WS upgrades: 512
  WS frames:   1864359
  Latency samples: 1864354 / 1864359 responses (100.0%)
[info] CPU 4693.8% | Mem 220MiB

=== Best: 386028 req/s (CPU: 4550.4%, Mem: 244MiB) ===
[info] saved results/echo-ws/512/roadrunner.json
httparena-bench-roadrunner
httparena-bench-roadrunner

==============================================
=== roadrunner / echo-ws / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   11.80ms   14.60ms   16.40ms   19.20ms   20.80ms

  1709156 frames sent in 5.00s, 1705292 frames received
  Throughput: 340.95K req/s
  Bandwidth:  2.36MB/s
  WS upgrades: 4096
  WS frames:   1705292
  Latency samples: 1705290 / 1705292 responses (100.0%)
[info] CPU 4240.9% | Mem 371MiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   12.01ms   14.60ms   16.60ms   18.70ms   19.80ms

  1695468 frames sent in 5.00s, 1692230 frames received
  Throughput: 338.34K req/s
  Bandwidth:  2.33MB/s
  WS upgrades: 4096
  WS frames:   1692230
  Latency samples: 1692226 / 1692230 responses (100.0%)
[info] CPU 4464.7% | Mem 379MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   12.07ms   14.70ms   16.40ms   18.90ms   20.00ms

  1684640 frames sent in 5.00s, 1681252 frames received
  Throughput: 336.15K req/s
  Bandwidth:  2.32MB/s
  WS upgrades: 4096
  WS frames:   1681252
  Latency samples: 1681246 / 1681252 responses (100.0%)
[info] CPU 4335.4% | Mem 384MiB

=== Best: 341058 req/s (CPU: 4240.9%, Mem: 371MiB) ===
[info] saved results/echo-ws/4096/roadrunner.json
httparena-bench-roadrunner
httparena-bench-roadrunner

==============================================
=== roadrunner / echo-ws / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   46.70ms   63.50ms   68.90ms   72.70ms   75.50ms

  1628721 frames sent in 5.00s, 1612337 frames received
  Throughput: 322.37K req/s
  Bandwidth:  2.50MB/s
  WS upgrades: 16384
  WS frames:   1612337
  Latency samples: 1612337 / 1612337 responses (100.0%)
[info] CPU 4161.5% | Mem 890MiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   48.22ms   63.50ms   69.10ms   73.90ms   75.50ms

  1626435 frames sent in 5.00s, 1610051 frames received
  Throughput: 321.88K req/s
  Bandwidth:  2.49MB/s
  WS upgrades: 16384
  WS frames:   1610051
  Latency samples: 1610051 / 1610051 responses (100.0%)
[info] CPU 4405.0% | Mem 1006MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   47.44ms   63.70ms   68.80ms   75.90ms   88.30ms

  1655971 frames sent in 5.00s, 1639587 frames received
  Throughput: 327.83K req/s
  Bandwidth:  2.53MB/s
  WS upgrades: 16384
  WS frames:   1639587
  Latency samples: 1639587 / 1639587 responses (100.0%)
[info] CPU 4283.2% | Mem 1.0GiB

=== Best: 327917 req/s (CPU: 4283.2%, Mem: 1.0GiB) ===
[info] saved results/echo-ws/16384/roadrunner.json
httparena-bench-roadrunner
httparena-bench-roadrunner
[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/results/roadrunner.json - 3 new, 39 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
[info] restoring loopback MTU to 65536

@williamthome

Copy link
Copy Markdown
Contributor Author

/benchmark -f roadrunner -t echo-ws

@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: roadrunner | Test: echo-ws

Test Conn RPS CPU Mem Δ RPS Δ Mem
echo-ws 512 2,054,368 6580.3% 226MiB +450.1% +11.3%
echo-ws 4096 2,023,956 6739.7% 261MiB +99.1% -32.7%
echo-ws 16384 1,906,088 6548.6% 340MiB +19.8% -62.2%

Composite score, main against this run, in the board's default view:

Family main this run Δ
HTTP/1.1 2443.0 (#54 of 102) 2443.0 (#54 of 102) +0.0
HTTP/2 260.5 (#30 of 35) 260.5 (#30 of 35) +0.0
HTTP/3 180.1 (#17 of 19) 180.1 (#17 of 19) +0.0
Gateway 2340.9 (#3 of 9) 2340.9 (#3 of 9) +0.0
WebSocket 597.9 (#26 of 35) 847.6 (#23 of 35) +249.8

The results on main were measured in another session, so a few points up or down can be the machine and not the change.

Full log


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    249us    251us    308us    388us   1.66ms

  10239376 frames sent in 5.00s, 10239376 frames received
  Throughput: 2.05M req/s
  Bandwidth:  13.67MB/s
  WS upgrades: 512
  WS frames:   10239376
  Latency samples: 10243016 / 10239376 responses (100.0%)
[info] CPU 6753.3% | Mem 210MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    249us    252us    308us    404us    702us

  10225902 frames sent in 5.00s, 10225902 frames received
  Throughput: 2.04M req/s
  Bandwidth:  13.65MB/s
  WS upgrades: 512
  WS frames:   10225902
  Latency samples: 10225861 / 10225902 responses (100.0%)
[info] CPU 6653.1% | Mem 204MiB

=== Best: 2054368 req/s (CPU: 6580.3%, Mem: 226MiB) ===
[info] saved results/echo-ws/512/roadrunner.json
httparena-bench-roadrunner
httparena-bench-roadrunner

==============================================
=== roadrunner / echo-ws / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.83ms   2.00ms   2.12ms   3.25ms   5.15ms

  10094379 frames sent in 5.00s, 10090554 frames received
  Throughput: 2.02M req/s
  Bandwidth:  13.55MB/s
  WS upgrades: 4095
  WS frames:   10090554
  Latency samples: 10090534 / 10090554 responses (100.0%)
[info] CPU 6449.1% | Mem 263MiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.84ms   2.00ms   2.10ms   3.15ms   3.91ms

  10123507 frames sent in 5.00s, 10119782 frames received
  Throughput: 2.02M req/s
  Bandwidth:  13.59MB/s
  WS upgrades: 4096
  WS frames:   10119782
  Latency samples: 10119722 / 10119782 responses (100.0%)
[info] CPU 6739.7% | Mem 261MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.85ms   2.02ms   2.13ms   3.06ms   3.92ms

  10111755 frames sent in 5.00s, 10108273 frames received
  Throughput: 2.02M req/s
  Bandwidth:  13.57MB/s
  WS upgrades: 4096
  WS frames:   10108273
  Latency samples: 10108247 / 10108273 responses (100.0%)
[info] CPU 6538.4% | Mem 258MiB

=== Best: 2023956 req/s (CPU: 6739.7%, Mem: 261MiB) ===
[info] saved results/echo-ws/4096/roadrunner.json
httparena-bench-roadrunner
httparena-bench-roadrunner

==============================================
=== roadrunner / echo-ws / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.99ms   3.11ms   4.72ms   6.03ms   10.30ms

  9538593 frames sent in 5.00s, 9529155 frames received
  Throughput: 1.91M req/s
  Bandwidth:  12.92MB/s
  WS upgrades: 9438
  WS frames:   9529155
  Latency samples: 9529155 / 9529155 responses (100.0%)
[info] CPU 6227.6% | Mem 327MiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   3.25ms   3.35ms   4.83ms   6.14ms   11.00ms

  9540223 frames sent in 5.00s, 9530442 frames received
  Throughput: 1.91M req/s
  Bandwidth:  12.93MB/s
  WS upgrades: 9781
  WS frames:   9530442
  Latency samples: 9530442 / 9530442 responses (100.0%)
[info] CPU 6548.6% | Mem 340MiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   3.19ms   3.33ms   4.89ms   6.16ms   10.20ms

  9514702 frames sent in 5.00s, 9505029 frames received
  Throughput: 1.90M req/s
  Bandwidth:  12.89MB/s
  WS upgrades: 9673
  WS frames:   9505029
  Latency samples: 9505029 / 9505029 responses (100.0%)
[info] CPU 6383.4% | Mem 354MiB

=== Best: 1906088 req/s (CPU: 6548.6%, Mem: 340MiB) ===
[info] saved results/echo-ws/16384/roadrunner.json
httparena-bench-roadrunner
httparena-bench-roadrunner
[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/results/roadrunner.json - 3 new, 39 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
[info] restoring loopback MTU to 65536

@williamthome

Copy link
Copy Markdown
Contributor Author

/benchmark-multiple -f roadrunner,roadrunner-gateway

@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

Frameworks: 2 | Test: all tests

✅ roadrunner

Test Conn RPS Rate CPU/req p99 p99.9 CPU Mem Δ RPS Δ Mem
baseline 4096 1,178,019 — — — — 6399.5% 360MiB +1.0% +5.6%
pipelined 4096 5,427,942 — — — — 6200.7% 268MiB -11.5% +1.1%
limited-conn 4096 517,705 — — — — 3472.3% 224MiB +14.8% -3.9%
json-comp 4096 103,671 — — — — 6445.4% 632MiB -1.3% +1.8%
json-comp 16384 95,801 — — — — 6455.2% 673MiB -12.8% +12.5%
json-tls 4096 184,269 — — — — 6367.7% 980MiB +11.6% +8.8%
8gbit 512 48,449 0.9690 ⚠️ 272.35us 1114.0us 4558.0us 1241.3% 476MiB ~0% -2.1%
static-tls 1024 86,715 — — — — 6050.4% 658MiB -1.2% -6.0%
async-db 1024 132,058 — — — — 6418.6% 724MiB -1.3% -4.1%
fortunes 1024 71,074 — — — — 6409.1% 1.1GiB +1.1% +18.7%
baseline-h2 256 594,451 — — — — 6650.9% 341MiB +16.1% +1.8%
baseline-h2 1024 606,937 — — — — 6479.0% 464MiB +16.4% +2.0%
static-h2 256 76,529 — — — — 6241.7% 501MiB -1.6% -5.5%
static-h2 1024 78,214 — — — — 6004.0% 990MiB +3.8% -0.3%
baseline-h2c 256 945,225 — — — — 6561.3% 251MiB +5.7% +13.1%
baseline-h2c 1024 948,059 — — — — 6521.9% 361MiB +9.1% +42.1%
baseline-h2c 4096 856,788 — — — — 6372.0% 577MiB +10.3% +60.3%
json-h2c 1024 115,659 — — — — 3883.2% 883MiB +11.9% +23.7%
json-h2c 4096 114,631 — — — — 4089.4% 1.5GiB -10.9% +15.4%
baseline-h3 64 182,100 — — — — 3852.6% 353MiB -0.8% -2.2%
static-h3 64 43,903 — — — — 3576.1% 1.3GiB +5.6% ~0%
echo-ws 512 1,982,760 — — — — 6623.8% 217MiB +430.9% +6.9%
echo-ws 4096 1,944,216 — — — — 6519.4% 255MiB +91.2% -34.3%
echo-ws 16384 1,792,260 — — — — 6294.3% 356MiB +12.7% -60.4%
echo-ws-pipeline 512 17,475,308 — — — — 6534.3% 236MiB +38.2% +16.3%
echo-ws-pipeline 4096 16,904,531 — — — — 6523.7% 250MiB +36.8% -20.4%
echo-ws-pipeline 16384 16,453,388 — — — — 6646.6% 333MiB +34.0% -1.5%
echo-ws-limited 512 533,400 — — — — 3137.1% 231MiB +77.7% -19.2%
echo-ws-limited 4096 527,074 — — — — 3277.0% 245MiB +85.2% -53.4%
latency-1m 1024 997,093 0.9971 62.65us 30024.0us 65568.0us 6497.4% 454MiB +11.0% +32.0%
latency-10k 1024 9,982 0.9982 125.80us 135.0us 840.0us 121.0% 204MiB ~0% -0.5%
latency-500k-8cpu 1024 174,265 0.3485 ⚠️ 45.78us 12980224.0us 13275136.0us 769.5% 138MiB -0.7% -2.8%
async 32000 1,146,710 — — — — 6350.8% 882MiB -1.9% +8.5%

Composite score, main against this run, in the board's default view:

Family main this run Δ
HTTP/1.1 2443.0 (#54 of 102) 2580.8 (#54 of 102) +137.8
HTTP/2 260.5 (#30 of 35) 275.3 (#30 of 35) +14.8
HTTP/3 180.1 (#17 of 19) 187.7 (#17 of 19) +7.7
Gateway 2340.9 (#3 of 9) 2341.2 (#3 of 9) +0.3
WebSocket 597.9 (#26 of 35) 1008.8 (#21 of 35) +411.0

The results on main were measured in another session, so a few points up or down can be the machine and not the change.

✅ roadrunner-gateway

Test Conn RPS CPU Mem Δ RPS Δ Mem
gateway-64 512 155,800 5945.3% 2.9GiB +0.4% ~0%
gateway-64 1024 151,071 6014.5% 4.2GiB +0.1% -2.3%
gateway-h3 64 81,717 5362.7% 769MiB +0.3% -5.6%
gateway-h3 256 58,670 4228.3% 1.2GiB +0.2% -29.4%
production-stack 256 227,800 5451.1% 1.4GiB -1.5% ~0%
production-stack 1024 196,642 5495.6% 2.1GiB +1.1% -8.7%

@williamthome

Copy link
Copy Markdown
Contributor Author

/benchmark-multiple -f roadrunner,roadrunner-gateway --save

@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 --save cannot start: main has diverged and cannot be auto-merged into this branch. Please merge or rebase main manually, push, and re-run /benchmark --save.

@williamthome williamthome changed the title roadrunner: update to v0.13.0 roadrunner: update to v0.13.1 Oct 29, 2026
@williamthome
williamthome force-pushed the entries/roadrunner-0.13.0 branch from d54b2db to cba8308 Compare October 29, 2026 12:13
@williamthome

Copy link
Copy Markdown
Contributor Author

/benchmark-multiple -f roadrunner,roadrunner-gateway --save

@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

Frameworks: 2 | Test: all tests

✅ roadrunner

Test Conn RPS Rate CPU/req p99 p99.9 CPU Mem Δ RPS Δ Mem
baseline 4096 1,189,342 — — — — 6435.6% 360MiB +2.0% +5.6%
pipelined 4096 5,821,942 — — — — 6288.5% 242MiB -5.1% -8.7%
limited-conn 4096 518,855 — — — — 3586.0% 232MiB +15.1% -0.4%
json-comp 4096 111,101 — — — — 6250.0% 641MiB +5.8% +3.2%
json-comp 16384 104,738 — — — — 6105.0% 693MiB -4.7% +15.9%
json-tls 4096 165,677 — — — — 6434.0% 863MiB +0.4% -4.2%
8gbit 512 48,479 0.9696 ⚠️ 280.06us 711.0us 7862.0us 1286.8% 475MiB +0.1% -2.3%
static-tls 1024 83,444 — — — — 5770.8% 711MiB -4.9% +1.6%
async-db 1024 122,727 — — — — 6449.3% 724MiB -8.3% -4.1%
fortunes 1024 70,530 — — — — 6470.5% 915MiB +0.3% -3.6%
baseline-h2 256 605,917 — — — — 6565.0% 360MiB +18.4% +7.5%
baseline-h2 1024 607,831 — — — — 6505.6% 479MiB +16.6% +5.3%
static-h2 256 79,399 — — — — 6114.4% 528MiB +2.0% -0.4%
static-h2 1024 75,454 — — — — 6188.5% 1.0GiB +0.1% +3.1%
baseline-h2c 256 962,714 — — — — 6586.5% 263MiB +7.6% +18.5%
baseline-h2c 1024 948,969 — — — — 6553.6% 371MiB +9.2% +46.1%
baseline-h2c 4096 869,082 — — — — 6553.1% 631MiB +11.8% +75.3%
json-h2c 1024 110,208 — — — — 3856.4% 895MiB +6.6% +25.4%
json-h2c 4096 103,104 — — — — 4219.4% 1.3GiB -19.8% ~0%
baseline-h3 64 184,160 — — — — 4100.3% 322MiB +0.3% -10.8%
static-h3 64 37,532 — — — — 3267.3% 1.3GiB -9.8% ~0%
echo-ws 512 1,969,616 — — — — 6600.8% 195MiB +427.4% -3.9%
echo-ws 4096 1,960,375 — — — — 6726.2% 266MiB +92.8% -31.4%
echo-ws 16384 1,863,889 — — — — 6644.8% 342MiB +17.2% -62.0%
echo-ws-pipeline 512 17,792,009 — — — — 6641.0% 190MiB +40.7% -6.4%
echo-ws-pipeline 4096 16,772,992 — — — — 6426.1% 304MiB +35.7% -3.2%
echo-ws-pipeline 16384 16,408,758 — — — — 6579.2% 329MiB +33.6% -2.7%
echo-ws-limited 512 537,168 — — — — 3236.0% 238MiB +78.9% -16.8%
echo-ws-limited 4096 537,818 — — — — 2986.5% 270MiB +89.0% -48.7%
latency-1m 1024 997,824 0.9978 62.58us 23016.0us 39888.0us 6493.2% 482MiB +11.0% +40.1%
latency-10k 1024 9,982 0.9982 133.25us 135.0us 277.0us 129.1% 193MiB ~0% -5.9%
latency-500k-8cpu 1024 175,249 0.3505 ⚠️ 45.54us 12980224.0us 13234176.0us 772.0% 146MiB -0.2% +2.8%
async 32000 1,143,294 — — — — 6357.7% 899MiB -2.2% +10.6%

Composite score, main against this run, in the board's default view:

Family main this run Δ
HTTP/1.1 2443.0 (#54 of 102) 2603.4 (#54 of 102) +160.4
HTTP/2 260.5 (#30 of 35) 273.1 (#30 of 35) +12.6
HTTP/3 180.1 (#17 of 19) 166.1 (#17 of 19) -13.9
Gateway 2340.9 (#3 of 9) 2345.8 (#3 of 9) +4.9
WebSocket 597.9 (#26 of 35) 1019.0 (#21 of 35) +421.1

The results on main were measured in another session, so a few points up or down can be the machine and not the change.

✅ roadrunner-gateway

Test Conn RPS CPU Mem Δ RPS Δ Mem
gateway-64 512 154,234 5983.7% 2.9GiB -0.6% ~0%
gateway-64 1024 150,585 5873.6% 4.6GiB -0.2% +7.0%
gateway-h3 64 81,244 5299.5% 783MiB -0.3% -3.9%
gateway-h3 256 58,118 4536.9% 1.7GiB -0.8% ~0%
production-stack 256 236,088 5765.0% 1.5GiB +2.1% +7.1%
production-stack 1024 195,191 5482.6% 2.1GiB +0.3% -8.7%

@williamthome

Copy link
Copy Markdown
Contributor Author

@MDA2AV ready to merge, thanks!

This branch has not been deployed

No deployments
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