Skip to content

[roda] Use Puma's "mark_as_io_bound" option#672

Open
p8 wants to merge 3 commits intoMDA2AV:mainfrom
p8:roda/puma-8-mark-io-bound
Open

[roda] Use Puma's "mark_as_io_bound" option#672
p8 wants to merge 3 commits intoMDA2AV:mainfrom
p8:roda/puma-8-mark-io-bound

Conversation

@p8
Copy link
Copy Markdown
Contributor

@p8 p8 commented Apr 29, 2026

Use Puma 8's new 'mark_as_io_bound' option allow more threads on the IO heavy upload call.
puma/puma#3816

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented Apr 29, 2026

/benchmark -f roda

@github-actions
Copy link
Copy Markdown
Contributor

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

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented Apr 29, 2026

Enabled it for all calls to see the impact.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: roda | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 103,762 4938.2% 10.2GiB +38.0% +43.7%
baseline 4096 57,379 4092.2% 8.9GiB +53.1% +48.3%
pipelined 512 565,924 6517.1% 1.7GiB -14.6% -10.5%
pipelined 4096 548,129 6413.7% 2.0GiB -16.4% -4.8%
limited-conn 512 28,662 3767.3% 5.6GiB -5.3% +5.7%
limited-conn 4096 28,806 3548.4% 6.5GiB -1.6% +22.6%
json 4096 230,980 6328.1% 4.7GiB -9.2% -14.5%
json-comp 512 123,348 6447.6% 3.5GiB -6.9% -14.6%
json-comp 4096 131,084 6508.4% 3.7GiB -2.2% -7.5%
json-comp 16384 129,825 6280.0% 4.3GiB -2.5% +10.3%
json-tls 4096 201,924 6498.8% 5.0GiB -9.5% -3.8%
upload 32 961 3150.3% 7.8GiB -0.8% -9.3%
upload 256 900 6532.3% 6.8GiB +4.5% -20.9%
api-4 256 18,413 395.8% 496MiB -2.0% +30.2%
api-16 1024 45,106 1639.4% 1.2GiB -7.6% -14.3%
static 1024 140,836 6526.6% 6.0GiB -44.0% -17.8%
static 4096 136,155 6530.6% 6.4GiB -44.0% -17.9%
static 6800 137,830 6546.6% 6.4GiB -42.8% -13.5%
async-db 1024 109,209 6375.1% 2.6GiB -7.6% -3.7%
Full log
[info] CPU 6523.9% | Mem 6.3GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.52ms   10.11ms 257.40ms   80.57%
    Req/Sec     2.14k   587.44    10.81k    83.86%
  695607 requests in 5.11s, 10.65GB read
Requests/sec: 136155.31
Transfer/sec:      2.08GB
[info] CPU 6530.6% | Mem 6.4GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.64ms    9.77ms 250.05ms   80.69%
    Req/Sec     2.14k   548.00    11.80k    82.72%
  694497 requests in 5.11s, 10.63GB read
Requests/sec: 136038.72
Transfer/sec:      2.08GB
[info] CPU 6493.0% | Mem 7.1GiB

=== Best: 136155 req/s (CPU: 6530.6%, Mem: 6.4GiB) ===
[info] saved results/static/4096/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / static / 6800c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    51.44ms   39.63ms 594.28ms   95.67%
    Req/Sec     1.93k     0.92k    5.64k    77.01%
  614904 requests in 5.10s, 9.41GB read
Requests/sec: 120471.95
Transfer/sec:      1.84GB
[info] CPU 6476.9% | Mem 6.5GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    48.07ms   40.67ms 918.47ms   97.31%
    Req/Sec     2.17k   834.28    12.98k    79.52%
  703055 requests in 5.10s, 10.76GB read
Requests/sec: 137830.68
Transfer/sec:      2.11GB
[info] CPU 6546.6% | Mem 6.4GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    48.30ms   40.97ms 910.05ms   97.37%
    Req/Sec     2.16k   816.87    13.03k    78.70%
  700079 requests in 5.10s, 10.72GB read
Requests/sec: 137254.73
Transfer/sec:      2.10GB
[info] CPU 6459.2% | Mem 7.2GiB

=== Best: 137830 req/s (CPU: 6546.6%, Mem: 6.4GiB) ===
[info] saved results/static/6800/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / async-db / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.95ms   7.93ms   15.20ms   25.60ms   82.50ms

  1060373 requests in 10.00s, 1060376 responses
  Throughput: 106.01K req/s
  Bandwidth:  429.89MB/s
  Status codes: 2xx=1060376, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1060376 / 1060376 responses (100.0%)
  Reconnects: 41941
  Per-template: 211477,212330,212779,212541,211249
  Per-template-ok: 211477,212330,212779,212541,211249
[info] CPU 6087.9% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.71ms   8.06ms   14.50ms   21.70ms   30.40ms

  1076890 requests in 10.00s, 1076893 responses
  Throughput: 107.67K req/s
  Bandwidth:  436.46MB/s
  Status codes: 2xx=1076893, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1076890 / 1076893 responses (100.0%)
  Reconnects: 42841
  Per-template: 214763,215861,216205,215561,214500
  Per-template-ok: 214763,215861,216205,215561,214500
[info] CPU 6367.0% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.61ms   7.90ms   14.40ms   21.90ms   31.40ms

  1092092 requests in 10.00s, 1092093 responses
  Throughput: 109.18K req/s
  Bandwidth:  442.74MB/s
  Status codes: 2xx=1092093, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1092091 / 1092093 responses (100.0%)
  Reconnects: 43388
  Per-template: 218168,218635,218917,218366,218005
  Per-template-ok: 218168,218635,218917,218366,218005
[info] CPU 6375.1% | Mem 2.6GiB

=== Best: 109209 req/s (CPU: 6375.1%, Mem: 2.6GiB) ===
[info] input BW: 7.29MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/roda.json
httparena-bench-roda
httparena-bench-roda
[info] skip: roda does not subscribe to crud
[info] skip: roda does not subscribe to baseline-h2
[info] skip: roda does not subscribe to static-h2
[info] skip: roda does not subscribe to baseline-h2c
[info] skip: roda does not subscribe to json-h2c
[info] skip: roda does not subscribe to baseline-h3
[info] skip: roda does not subscribe to static-h3
[info] skip: roda does not subscribe to gateway-64
[info] skip: roda does not subscribe to gateway-h3
[info] skip: roda does not subscribe to production-stack
[info] skip: roda does not subscribe to unary-grpc
[info] skip: roda does not subscribe to unary-grpc-tls
[info] skip: roda does not subscribe to stream-grpc
[info] skip: roda does not subscribe to stream-grpc-tls
[info] skip: roda does not subscribe to echo-ws
[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/api-16-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/api-4-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/async-db-1024.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/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-512.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/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
httparena-postgres
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

Use Puma 8's new 'mark_as_io_bound' option allow more threads on the IO
heavy upload call.
It seems only the baseline call benefits from this.

Before
------

| Test | Conn | RPS | CPU | Mem | Δ RPS | Δ Mem |
|------|------|-----|-----|-----|-------|-------|
| baseline | 512 | 75,252 | 4506.6% | 7.1GiB | +0.1% | ~0% |
| baseline | 4096 | 37,996 | 3896.3% | 5.4GiB | +1.4% | -10.0% |
| pipelined | 512 | 583,729 | 6455.6% | 1.7GiB | -12.0% | -10.5% |
| pipelined | 4096 | 562,005 | 6432.4% | 2.1GiB | -14.3% | ~0% |
| limited-conn | 512 | 28,537 | 3693.9% | 4.9GiB | -5.8% | -7.5% |
| limited-conn | 4096 | 28,977 | 3489.3% | 5.1GiB | -1.0% | -3.8% |
| json | 4096 | 231,255 | 6362.4% | 4.3GiB | -9.0% | -21.8% |
| json-comp | 512 | 128,684 | 6473.1% | 4.0GiB | -2.9% | -2.4% |
| json-comp | 4096 | 131,000 | 6500.5% | 3.6GiB | -2.2% | -10.0% |
| json-comp | 16384 | 130,762 | 6515.4% | 4.1GiB | -1.8% | +5.1% |
| json-tls | 4096 | 205,209 | 6514.8% | 5.1GiB | -8.0% | -1.9% |
| upload | 32 | 965 | 3102.4% | 8.3GiB | -0.4% | -3.5% |
| upload | 256 | 895 | 6517.6% | 6.9GiB | +3.9% | -19.8% |
| api-4 | 256 | 18,551 | 396.5% | 489MiB | -1.3% | +28.3% |
| api-16 | 1024 | 46,029 | 1676.7% | 1.5GiB | -5.7% | +7.1% |
| static | 1024 | 142,223 | 6539.9% | 6.3GiB | -43.4% | -13.7% |
| static | 4096 | 140,111 | 6528.3% | 6.7GiB | -42.4% | -14.1% |
| static | 6800 | 138,172 | 6484.5% | 7.1GiB | -42.7% | -4.1% |
| async-db | 1024 | 108,099 | 6396.5% | 2.5GiB | -8.6% | -7.4% |

After when enabled for all tests
--------------------------------

| Test | Conn | RPS | CPU | Mem | Δ RPS | Δ Mem |
|------|------|-----|-----|-----|-------|-------|
| baseline | 512 | 103,762 | 4938.2% | 10.2GiB | +38.0% | +43.7% |
| baseline | 4096 | 57,379 | 4092.2% | 8.9GiB | +53.1% | +48.3% |
| pipelined | 512 | 565,924 | 6517.1% | 1.7GiB | -14.6% | -10.5% |
| pipelined | 4096 | 548,129 | 6413.7% | 2.0GiB | -16.4% | -4.8% |
| limited-conn | 512 | 28,662 | 3767.3% | 5.6GiB | -5.3% | +5.7% |
| limited-conn | 4096 | 28,806 | 3548.4% | 6.5GiB | -1.6% | +22.6% |
| json | 4096 | 230,980 | 6328.1% | 4.7GiB | -9.2% | -14.5% |
| json-comp | 512 | 123,348 | 6447.6% | 3.5GiB | -6.9% | -14.6% |
| json-comp | 4096 | 131,084 | 6508.4% | 3.7GiB | -2.2% | -7.5% |
| json-comp | 16384 | 129,825 | 6280.0% | 4.3GiB | -2.5% | +10.3% |
| json-tls | 4096 | 201,924 | 6498.8% | 5.0GiB | -9.5% | -3.8% |
| upload | 32 | 961 | 3150.3% | 7.8GiB | -0.8% | -9.3% |
| upload | 256 | 900 | 6532.3% | 6.8GiB | +4.5% | -20.9% |
| api-4 | 256 | 18,413 | 395.8% | 496MiB | -2.0% | +30.2% |
| api-16 | 1024 | 45,106 | 1639.4% | 1.2GiB | -7.6% | -14.3% |
| static | 1024 | 140,836 | 6526.6% | 6.0GiB | -44.0% | -17.8% |
| static | 4096 | 136,155 | 6530.6% | 6.4GiB | -44.0% | -17.9% |
| static | 6800 | 137,830 | 6546.6% | 6.4GiB | -42.8% | -13.5% |
| async-db | 1024 | 109,209 | 6375.1% | 2.6GiB | -7.6% | -3.7% |
@p8 p8 force-pushed the roda/puma-8-mark-io-bound branch from bec8f74 to eb4eac9 Compare April 29, 2026 20:43
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented Apr 29, 2026

/benchmark -f roda

@github-actions
Copy link
Copy Markdown
Contributor

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

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented Apr 29, 2026

I've only turned it on for "/baseline" as that seems to have a real improvement.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: roda | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 73,571 4559.8% 7.0GiB -2.1% -1.4%
baseline 4096 37,582 3921.3% 5.5GiB +0.3% -8.3%
pipelined 512 584,825 6538.1% 1.7GiB -11.8% -10.5%
pipelined 4096 559,626 6486.0% 2.0GiB -14.6% -4.8%
limited-conn 512 28,723 3704.7% 4.9GiB -5.1% -7.5%
limited-conn 4096 28,950 3572.8% 5.1GiB -1.1% -3.8%
json 4096 233,220 6389.0% 4.3GiB -8.3% -21.8%
json-comp 512 128,900 6507.9% 3.6GiB -2.7% -12.2%
json-comp 4096 130,088 6474.9% 3.9GiB -2.9% -2.5%
json-comp 16384 132,116 6290.7% 4.9GiB -0.8% +25.6%
json-tls 4096 211,535 6536.9% 5.5GiB -5.1% +5.8%
upload 32 967 3073.7% 8.0GiB -0.2% -7.0%
upload 256 891 6505.8% 6.9GiB +3.5% -19.8%
api-4 256 18,482 396.1% 476MiB -1.7% +24.9%
api-16 1024 46,258 1688.7% 1.5GiB -5.3% +7.1%
static 1024 141,408 6531.7% 6.7GiB -43.8% -8.2%
static 4096 138,485 6530.7% 6.7GiB -43.1% -14.1%
static 6800 138,353 6479.9% 7.1GiB -42.6% -4.1%
async-db 1024 108,585 6377.3% 2.5GiB -8.2% -7.4%
Full log
[info] CPU 6493.6% | Mem 6.2GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.57ms    8.92ms 252.96ms   79.58%
    Req/Sec     2.18k   506.70    11.23k    93.53%
  706959 requests in 5.10s, 10.82GB read
Requests/sec: 138485.90
Transfer/sec:      2.12GB
[info] CPU 6530.7% | Mem 6.7GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.66ms    9.84ms 259.20ms   81.27%
    Req/Sec     2.14k   560.31    12.88k    83.34%
  695716 requests in 5.11s, 10.65GB read
Requests/sec: 136171.66
Transfer/sec:      2.08GB
[info] CPU 6481.4% | Mem 7.3GiB

=== Best: 138485 req/s (CPU: 6530.7%, Mem: 6.7GiB) ===
[info] saved results/static/4096/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / static / 6800c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    46.43ms   23.30ms 386.46ms   85.89%
    Req/Sec     2.07k     0.86k    5.33k    79.58%
  663417 requests in 5.11s, 10.16GB read
Requests/sec: 129945.93
Transfer/sec:      1.99GB
[info] CPU 6495.9% | Mem 6.3GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    47.31ms   31.26ms 591.35ms   96.61%
    Req/Sec     2.17k   728.20    10.83k    79.53%
  702609 requests in 5.10s, 10.75GB read
Requests/sec: 137748.32
Transfer/sec:      2.11GB
[info] CPU 6528.2% | Mem 6.6GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    45.11ms   17.09ms 359.44ms   85.20%
    Req/Sec     2.18k   730.72    12.87k    81.24%
  705801 requests in 5.10s, 10.80GB read
Requests/sec: 138353.91
Transfer/sec:      2.12GB
[info] CPU 6479.9% | Mem 7.1GiB

=== Best: 138353 req/s (CPU: 6479.9%, Mem: 7.1GiB) ===
[info] saved results/static/6800/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / async-db / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.78ms   8.35ms   14.60ms   22.60ms   87.60ms

  1080793 requests in 10.00s, 1080795 responses
  Throughput: 108.05K req/s
  Bandwidth:  438.09MB/s
  Status codes: 2xx=1080795, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1080795 / 1080795 responses (100.0%)
  Reconnects: 42757
  Per-template: 215764,216495,216767,216281,215488
  Per-template-ok: 215764,216495,216767,216281,215488
[info] CPU 6147.6% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.96ms   8.68ms   15.40ms   21.60ms   29.80ms

  1073993 requests in 10.00s, 1073992 responses
  Throughput: 107.37K req/s
  Bandwidth:  435.25MB/s
  Status codes: 2xx=1073992, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1073991 / 1073992 responses (100.0%)
  Reconnects: 42722
  Per-template: 214531,215248,215315,214650,214247
  Per-template-ok: 214531,215248,215315,214650,214247
[info] CPU 6331.0% | Mem 2.3GiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.74ms   8.35ms   15.10ms   21.60ms   31.20ms

  1085853 requests in 10.00s, 1085857 responses
  Throughput: 108.56K req/s
  Bandwidth:  440.11MB/s
  Status codes: 2xx=1085857, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1085856 / 1085857 responses (100.0%)
  Reconnects: 43174
  Per-template: 217177,217347,217399,217379,216554
  Per-template-ok: 217177,217347,217399,217379,216554
[info] CPU 6377.3% | Mem 2.5GiB

=== Best: 108585 req/s (CPU: 6377.3%, Mem: 2.5GiB) ===
[info] input BW: 7.25MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/roda.json
httparena-bench-roda
httparena-bench-roda
[info] skip: roda does not subscribe to crud
[info] skip: roda does not subscribe to baseline-h2
[info] skip: roda does not subscribe to static-h2
[info] skip: roda does not subscribe to baseline-h2c
[info] skip: roda does not subscribe to json-h2c
[info] skip: roda does not subscribe to baseline-h3
[info] skip: roda does not subscribe to static-h3
[info] skip: roda does not subscribe to gateway-64
[info] skip: roda does not subscribe to gateway-h3
[info] skip: roda does not subscribe to production-stack
[info] skip: roda does not subscribe to unary-grpc
[info] skip: roda does not subscribe to unary-grpc-tls
[info] skip: roda does not subscribe to stream-grpc
[info] skip: roda does not subscribe to stream-grpc-tls
[info] skip: roda does not subscribe to echo-ws
[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/api-16-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/api-4-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/async-db-1024.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/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-512.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/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
httparena-postgres
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented Apr 29, 2026

/benchmark -f roda

@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: roda | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 101,519 4955.5% 9.7GiB +35.1% +36.6%
baseline 4096 58,291 4080.3% 8.9GiB +55.6% +48.3%
pipelined 512 577,792 6451.8% 1.7GiB -12.9% -10.5%
pipelined 4096 564,899 6339.6% 2.1GiB -13.8% ~0%
limited-conn 512 28,524 3732.0% 5.7GiB -5.8% +7.5%
limited-conn 4096 28,752 3548.8% 6.4GiB -1.8% +20.8%
json 4096 233,092 6350.9% 4.3GiB -8.3% -21.8%
json-comp 512 124,808 6439.1% 3.8GiB -5.8% -7.3%
json-comp 4096 132,722 6524.6% 3.6GiB -0.9% -10.0%
json-comp 16384 129,568 6237.1% 4.5GiB -2.7% +15.4%
json-tls 4096 205,131 6513.6% 5.0GiB -8.0% -3.8%
upload 32 959 3099.5% 8.1GiB -1.0% -5.8%
upload 256 921 6364.9% 8.5GiB +7.0% -1.2%
api-4 256 18,504 395.7% 480MiB -1.6% +26.0%
api-16 1024 46,172 1679.6% 1.5GiB -5.5% +7.1%
static 1024 141,877 6534.1% 6.3GiB -43.6% -13.7%
static 4096 138,239 6524.7% 6.7GiB -43.2% -14.1%
static 6800 138,674 6472.2% 7.1GiB -42.5% -4.1%
async-db 1024 107,033 6367.9% 2.4GiB -9.5% -11.1%
Full log
[info] CPU 6511.4% | Mem 6.3GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.58ms    9.28ms 257.02ms   80.77%
    Req/Sec     2.18k   500.85    10.93k    92.97%
  705577 requests in 5.10s, 10.80GB read
Requests/sec: 138239.09
Transfer/sec:      2.12GB
[info] CPU 6524.7% | Mem 6.7GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.89ms    9.52ms 266.01ms   82.24%
    Req/Sec     2.14k   441.97     5.28k    82.81%
  695170 requests in 5.10s, 10.64GB read
Requests/sec: 136213.80
Transfer/sec:      2.08GB
[info] CPU 6439.8% | Mem 7.1GiB

=== Best: 138239 req/s (CPU: 6524.7%, Mem: 6.7GiB) ===
[info] saved results/static/4096/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / static / 6800c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    46.82ms   28.37ms 544.18ms   91.60%
    Req/Sec     2.07k     0.90k    5.39k    79.20%
  663815 requests in 5.11s, 10.16GB read
Requests/sec: 130024.35
Transfer/sec:      1.99GB
[info] CPU 6447.8% | Mem 6.2GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    46.59ms   18.85ms 365.14ms   86.37%
    Req/Sec     2.13k   700.14    10.60k    81.18%
  691792 requests in 5.11s, 10.59GB read
Requests/sec: 135369.12
Transfer/sec:      2.07GB
[info] CPU 6528.7% | Mem 6.5GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    46.81ms   27.71ms 530.78ms   96.41%
    Req/Sec     2.18k   680.18    10.94k    80.24%
  707727 requests in 5.10s, 10.83GB read
Requests/sec: 138674.61
Transfer/sec:      2.12GB
[info] CPU 6472.2% | Mem 7.1GiB

=== Best: 138674 req/s (CPU: 6472.2%, Mem: 7.1GiB) ===
[info] saved results/static/6800/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / async-db / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.99ms   8.62ms   15.00ms   23.40ms   85.70ms

  1068959 requests in 10.00s, 1068959 responses
  Throughput: 106.87K req/s
  Bandwidth:  433.44MB/s
  Status codes: 2xx=1068959, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1068959 / 1068959 responses (100.0%)
  Reconnects: 42280
  Per-template: 213360,214071,214195,213989,213344
  Per-template-ok: 213360,214071,214195,213989,213344
[info] CPU 6075.6% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.87ms   8.60ms   15.30ms   20.80ms   28.40ms

  1070334 requests in 10.00s, 1070335 responses
  Throughput: 107.01K req/s
  Bandwidth:  434.03MB/s
  Status codes: 2xx=1070335, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1070335 / 1070335 responses (100.0%)
  Reconnects: 42548
  Per-template: 213379,214387,214643,214417,213509
  Per-template-ok: 213379,214387,214643,214417,213509
[info] CPU 6367.9% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     1024 (16/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 5
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.83ms   8.39ms   15.40ms   22.20ms   34.20ms

  1069809 requests in 10.00s, 1069811 responses
  Throughput: 106.96K req/s
  Bandwidth:  433.71MB/s
  Status codes: 2xx=1069811, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1069808 / 1069811 responses (100.0%)
  Reconnects: 42536
  Per-template: 213668,214331,214220,214107,213482
  Per-template-ok: 213668,214331,214220,214107,213482
[info] CPU 6349.6% | Mem 2.6GiB

=== Best: 107033 req/s (CPU: 6367.9%, Mem: 2.4GiB) ===
[info] input BW: 7.15MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/roda.json
httparena-bench-roda
httparena-bench-roda
[info] skip: roda does not subscribe to crud
[info] skip: roda does not subscribe to baseline-h2
[info] skip: roda does not subscribe to static-h2
[info] skip: roda does not subscribe to baseline-h2c
[info] skip: roda does not subscribe to json-h2c
[info] skip: roda does not subscribe to baseline-h3
[info] skip: roda does not subscribe to static-h3
[info] skip: roda does not subscribe to gateway-64
[info] skip: roda does not subscribe to gateway-h3
[info] skip: roda does not subscribe to production-stack
[info] skip: roda does not subscribe to unary-grpc
[info] skip: roda does not subscribe to unary-grpc-tls
[info] skip: roda does not subscribe to stream-grpc
[info] skip: roda does not subscribe to stream-grpc-tls
[info] skip: roda does not subscribe to echo-ws
[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/api-16-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/api-4-256.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/async-db-1024.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/json-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-512.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/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
httparena-postgres
[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