Skip to content

[rails] Upgrade Puma to 8#685

Open
p8 wants to merge 2 commits intoMDA2AV:mainfrom
p8:rails/puma-8
Open

[rails] Upgrade Puma to 8#685
p8 wants to merge 2 commits intoMDA2AV:mainfrom
p8:rails/puma-8

Conversation

@p8
Copy link
Copy Markdown
Contributor

@p8 p8 commented May 3, 2026

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

@p8 p8 force-pushed the rails/puma-8 branch 4 times, most recently from 2c893f7 to 09d3376 Compare May 5, 2026 18:20
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 5, 2026

/benchmark -f rails

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

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

@p8 p8 force-pushed the rails/puma-8 branch from 09d3376 to 5658039 Compare May 5, 2026 18:33
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Benchmark Results

Framework: rails | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 60,845 5513.5% 7.1GiB +2.0% +9.2%
baseline 4096 31,304 4906.8% 6.1GiB +0.4% -1.6%
pipelined 512 308,599 6517.7% 2.5GiB -1.9% ~0%
pipelined 4096 310,150 6514.1% 2.7GiB -1.1% +3.8%
limited-conn 512 27,596 4545.2% 5.9GiB -0.5% -1.7%
limited-conn 4096 27,427 4627.6% 6.1GiB -1.0% ~0%
json 4096 120,568 6403.2% 4.2GiB -1.7% -4.5%
json-comp 512 80,852 6400.0% 4.1GiB -4.5% +2.5%
json-comp 4096 83,633 6455.8% 4.1GiB -0.6% ~0%
json-comp 16384 82,941 6499.8% 4.3GiB +0.3% ~0%
json-tls 4096 112,654 6489.4% 5.4GiB -4.0% ~0%
upload 32 931 3066.3% 11.2GiB -0.2% +2.8%
upload 256 883 6351.0% 8.1GiB -1.6% +12.5%
api-4 256 10,138 392.7% 387MiB ~0% +1.6%
api-16 1024 26,149 1679.3% 1.1GiB +0.8% ~0%
static 1024 122,696 6512.8% 9.0GiB +2.9% +26.8%
static 4096 123,339 6449.9% 9.1GiB +2.8% +1.1%
static 6800 119,695 6513.7% 8.7GiB -1.7% -7.4%
async-db 1024 69,889 6406.3% 3.7GiB +2.6% +23.3%
Full log
[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    32.51ms    8.86ms 261.13ms   83.00%
    Req/Sec     1.90k   474.30     9.80k    89.04%
  615598 requests in 5.10s, 9.44GB read
Requests/sec: 120708.45
Transfer/sec:      1.85GB
[info] CPU 6522.2% | Mem 9.0GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    31.61ms    7.78ms 258.77ms   79.19%
    Req/Sec     1.94k   467.29    13.56k    84.97%
  629042 requests in 5.10s, 9.65GB read
Requests/sec: 123339.97
Transfer/sec:      1.89GB
[info] CPU 6449.9% | Mem 9.1GiB

=== Best: 123339 req/s (CPU: 6449.9%, Mem: 9.1GiB) ===
[info] saved results/static/4096/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / 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    55.64ms   29.05ms 566.92ms   85.83%
    Req/Sec     1.72k   783.70     4.87k    78.69%
  547399 requests in 5.10s, 8.39GB read
Requests/sec: 107251.88
Transfer/sec:      1.64GB
[info] CPU 6409.2% | Mem 8.8GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    53.99ms   34.13ms 590.03ms   96.33%
    Req/Sec     1.88k   677.80     8.84k    79.61%
  610788 requests in 5.10s, 9.37GB read
Requests/sec: 119695.02
Transfer/sec:      1.84GB
[info] CPU 6513.7% | Mem 8.7GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    55.06ms   34.36ms 628.63ms   94.93%
    Req/Sec     1.85k   698.56    12.44k    79.93%
  600982 requests in 5.10s, 9.22GB read
Requests/sec: 117822.51
Transfer/sec:      1.81GB
[info] CPU 6458.7% | Mem 8.8GiB

=== Best: 119695 req/s (CPU: 6513.7%, Mem: 8.7GiB) ===
[info] saved results/static/6800/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / 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   14.67ms   13.80ms   21.30ms   37.20ms   206.00ms

  676004 requests in 10.00s, 676005 responses
  Throughput: 67.58K req/s
  Bandwidth:  282.01MB/s
  Status codes: 2xx=676005, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 676005 / 676005 responses (100.0%)
  Reconnects: 26543
  Per-template: 134778,135117,135638,135561,134911
  Per-template-ok: 134778,135117,135638,135561,134911
[info] CPU 6299.7% | Mem 3.8GiB

[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   14.01ms   13.90ms   21.20ms   29.30ms   38.50ms

  698891 requests in 10.00s, 698891 responses
  Throughput: 69.87K req/s
  Bandwidth:  291.57MB/s
  Status codes: 2xx=698891, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 698890 / 698891 responses (100.0%)
  Reconnects: 27661
  Per-template: 139375,139658,140183,140175,139499
  Per-template-ok: 139375,139658,140183,140175,139499
[info] CPU 6406.3% | Mem 3.7GiB

[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   14.05ms   13.90ms   20.90ms   28.50ms   36.10ms

  697358 requests in 10.00s, 697359 responses
  Throughput: 69.72K req/s
  Bandwidth:  291.00MB/s
  Status codes: 2xx=697359, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 697357 / 697359 responses (100.0%)
  Reconnects: 27595
  Per-template: 138941,139420,139775,139999,139222
  Per-template-ok: 138941,139420,139775,139999,139222
[info] CPU 6412.8% | Mem 3.8GiB

=== Best: 69889 req/s (CPU: 6406.3%, Mem: 3.7GiB) ===
[info] input BW: 4.67MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/rails.json
httparena-bench-rails
httparena-bench-rails
[info] skip: rails does not subscribe to crud
[info] skip: rails does not subscribe to fortunes
[info] skip: rails does not subscribe to baseline-h2
[info] skip: rails does not subscribe to static-h2
[info] skip: rails does not subscribe to baseline-h2c
[info] skip: rails does not subscribe to json-h2c
[info] skip: rails does not subscribe to baseline-h3
[info] skip: rails does not subscribe to static-h3
[info] skip: rails does not subscribe to gateway-64
[info] skip: rails does not subscribe to gateway-h3
[info] skip: rails does not subscribe to production-stack
[info] skip: rails does not subscribe to unary-grpc
[info] skip: rails does not subscribe to unary-grpc-tls
[info] skip: rails does not subscribe to stream-grpc
[info] skip: rails does not subscribe to stream-grpc-tls
[info] skip: rails does not subscribe to echo-ws
[info] skip: rails 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/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 p8 force-pushed the rails/puma-8 branch from 5658039 to 61e2b51 Compare May 5, 2026 18:46
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 5, 2026

/benchmark -f rails -t baseline

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Benchmark Results

Framework: rails | Test: baseline

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 79,691 5649.5% 8.2GiB +33.6% +26.2%
baseline 4096 34,297 5127.9% 7.8GiB +9.9% +25.8%
Full log

#12 exporting to image
#12 exporting layers done
#12 exporting manifest sha256:243a67289d524f82b69a72e11cea0575e6d63b9162b6e45d5eaad7438843b44d done
#12 exporting config sha256:4cc091bf6095079cdf418438199c5f27e02361dc5fb8557c42293355e9705f3f done
#12 exporting attestation manifest sha256:26204e9296a3e67dd0fd21d6863efd8c12f8921b6ba5fbdca0213f1f7aeaaf7d 0.0s done
#12 exporting manifest list sha256:b5f6462164eb9a9c599dabb4bcf86f962e1eb6732f95d54e32feba74a5f4c6a9
#12 exporting manifest list sha256:b5f6462164eb9a9c599dabb4bcf86f962e1eb6732f95d54e32feba74a5f4c6a9 0.0s done
#12 naming to docker.io/library/httparena-rails:latest done
#12 unpacking to docker.io/library/httparena-rails:latest 0.0s done
#12 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)

==============================================
=== rails / baseline / 512c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   6.43ms   2.09ms   9.91ms   86.00ms   178.40ms

  398753 requests in 5.00s, 398455 responses
  Throughput: 79.66K req/s
  Bandwidth:  17.93MB/s
  Status codes: 2xx=398455, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 398453 / 398455 responses (100.0%)
  Reconnects: 298
  Per-template: 149313,216358,32782
  Per-template-ok: 149313,216358,32782
[info] CPU 5649.5% | Mem 8.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.46ms   4.47ms   23.00ms   53.80ms   78.80ms

  302851 requests in 5.00s, 302697 responses
  Throughput: 60.52K req/s
  Bandwidth:  13.62MB/s
  Status codes: 2xx=302697, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 302695 / 302697 responses (100.0%)
  Reconnects: 154
  Per-template: 114514,144699,43482
  Per-template-ok: 114514,144699,43482
[info] CPU 5584.1% | Mem 6.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   9.08ms   4.73ms   24.70ms   52.20ms   77.30ms

  281882 requests in 5.00s, 281746 responses
  Throughput: 56.33K req/s
  Bandwidth:  12.68MB/s
  Status codes: 2xx=281746, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 281743 / 281746 responses (100.0%)
  Reconnects: 136
  Per-template: 101452,135874,44417
  Per-template-ok: 101452,135874,44417
[info] CPU 5398.7% | Mem 6.9GiB

=== Best: 79691 req/s (CPU: 5649.5%, Mem: 8.2GiB) ===
[info] input BW: 6.16MB/s (avg template: 81 bytes)
[info] saved results/baseline/512/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / baseline / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   100.05ms   92.80ms   187.80ms   364.10ms   600.80ms

  175453 requests in 5.00s, 171485 responses
  Throughput: 34.28K req/s
  Bandwidth:  7.72MB/s
  Status codes: 2xx=171485, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 171485 / 171485 responses (100.0%)
  Per-template: 62613,68053,40819
  Per-template-ok: 62613,68053,40819
[info] CPU 5127.9% | Mem 7.8GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   116.99ms   118.30ms   172.50ms   230.20ms   398.60ms

  158994 requests in 5.00s, 156422 responses
  Throughput: 31.27K req/s
  Bandwidth:  7.04MB/s
  Status codes: 2xx=156422, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 156422 / 156422 responses (100.0%)
  Per-template: 55144,55695,45583
  Per-template-ok: 55144,55695,45583
[info] CPU 4989.8% | Mem 7.0GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   112.19ms   114.80ms   171.60ms   251.70ms   556.10ms

  160592 requests in 5.00s, 158068 responses
  Throughput: 31.60K req/s
  Bandwidth:  7.11MB/s
  Status codes: 2xx=158068, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 158067 / 158068 responses (100.0%)
  Per-template: 55737,56521,45809
  Per-template-ok: 55737,56521,45809
[info] CPU 4984.8% | Mem 7.0GiB

=== Best: 34297 req/s (CPU: 5127.9%, Mem: 7.8GiB) ===
[info] input BW: 2.65MB/s (avg template: 81 bytes)
[info] saved results/baseline/4096/rails.json
httparena-bench-rails
httparena-bench-rails
[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/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 to allow more threads on the
IO heavy calls.
It seems only the baseline call benefits from this.
@p8 p8 force-pushed the rails/puma-8 branch from 61e2b51 to 66cfa53 Compare May 5, 2026 19:54
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 5, 2026

Tried enabling mark_as_io_bound for all tests.

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 5, 2026

/benchmark -f rails

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Benchmark Results

Framework: rails | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 79,606 5729.5% 8.3GiB +33.4% +27.7%
baseline 4096 34,505 5114.3% 7.8GiB +10.6% +25.8%
pipelined 512 302,763 6451.4% 2.6GiB -3.8% +4.0%
pipelined 4096 301,508 6505.4% 2.6GiB -3.9% ~0%
limited-conn 512 27,716 4619.1% 6.1GiB -0.1% +1.7%
limited-conn 4096 27,274 4700.1% 6.6GiB -1.6% +8.2%
json 4096 119,863 6375.7% 4.3GiB -2.3% -2.3%
json-comp 512 82,514 6417.7% 3.9GiB -2.5% -2.5%
json-comp 4096 83,582 6499.0% 4.1GiB -0.7% ~0%
json-comp 16384 81,588 6475.2% 4.3GiB -1.3% ~0%
json-tls 4096 113,305 6518.6% 5.2GiB -3.5% -3.7%
upload 32 910 3057.4% 9.1GiB -2.5% -16.5%
upload 256 893 6329.4% 8.9GiB -0.4% +23.6%
api-4 256 10,020 392.1% 397MiB -1.3% +4.2%
api-16 1024 26,027 1676.1% 1.1GiB +0.3% ~0%
static 1024 122,557 6513.0% 8.8GiB +2.8% +23.9%
static 4096 120,980 6487.2% 9.6GiB +0.8% +6.7%
static 6800 118,665 6462.2% 9.5GiB -2.6% +1.1%
async-db 1024 70,624 6398.8% 3.7GiB +3.7% +23.3%
Full log
[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    32.47ms    9.72ms 254.71ms   83.59%
    Req/Sec     1.88k   492.22     8.70k    85.33%
  609952 requests in 5.10s, 9.35GB read
Requests/sec: 119545.95
Transfer/sec:      1.83GB
[info] CPU 6515.5% | Mem 9.5GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    32.09ms    8.69ms 267.76ms   80.66%
    Req/Sec     1.91k   481.41     7.80k    85.26%
  617596 requests in 5.10s, 9.47GB read
Requests/sec: 120980.00
Transfer/sec:      1.86GB
[info] CPU 6487.2% | Mem 9.6GiB

=== Best: 120980 req/s (CPU: 6487.2%, Mem: 9.6GiB) ===
[info] saved results/static/4096/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / 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    60.54ms   44.32ms 621.11ms   94.05%
    Req/Sec     1.66k   834.67     5.26k    78.76%
  524862 requests in 5.11s, 8.05GB read
Requests/sec: 102773.48
Transfer/sec:      1.58GB
[info] CPU 6448.2% | Mem 9.9GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    52.18ms   25.36ms 530.99ms   89.29%
    Req/Sec     1.87k   709.11     8.30k    80.01%
  607495 requests in 5.12s, 9.32GB read
Requests/sec: 118593.67
Transfer/sec:      1.82GB
[info] CPU 6520.6% | Mem 9.2GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    54.93ms   40.65ms 616.57ms   97.02%
    Req/Sec     1.87k   724.82    11.09k    77.67%
  605363 requests in 5.10s, 9.28GB read
Requests/sec: 118665.01
Transfer/sec:      1.82GB
[info] CPU 6462.2% | Mem 9.5GiB

=== Best: 118665 req/s (CPU: 6462.2%, Mem: 9.5GiB) ===
[info] saved results/static/6800/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / 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   14.51ms   13.10ms   21.40ms   36.00ms   184.30ms

  684667 requests in 10.00s, 684669 responses
  Throughput: 68.45K req/s
  Bandwidth:  285.35MB/s
  Status codes: 2xx=684669, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 684669 / 684669 responses (100.0%)
  Reconnects: 26911
  Per-template: 136526,137302,137503,136864,136474
  Per-template-ok: 136526,137302,137503,136864,136474
[info] CPU 6368.9% | Mem 3.8GiB

[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   13.91ms   13.10ms   21.10ms   29.60ms   37.00ms

  706244 requests in 10.00s, 706245 responses
  Throughput: 70.61K req/s
  Bandwidth:  294.41MB/s
  Status codes: 2xx=706245, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 706245 / 706245 responses (100.0%)
  Reconnects: 27958
  Per-template: 141045,141513,141522,141191,140974
  Per-template-ok: 141045,141513,141522,141191,140974
[info] CPU 6398.8% | Mem 3.7GiB

[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   14.00ms   13.10ms   21.30ms   31.00ms   41.30ms

  700633 requests in 10.00s, 700633 responses
  Throughput: 70.04K req/s
  Bandwidth:  292.43MB/s
  Status codes: 2xx=700633, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 700632 / 700633 responses (100.0%)
  Reconnects: 27717
  Per-template: 139510,139929,140665,140468,140060
  Per-template-ok: 139510,139929,140665,140468,140060
[info] CPU 6407.4% | Mem 3.7GiB

=== Best: 70624 req/s (CPU: 6398.8%, Mem: 3.7GiB) ===
[info] input BW: 4.71MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/rails.json
httparena-bench-rails
httparena-bench-rails
[info] skip: rails does not subscribe to crud
[info] skip: rails does not subscribe to fortunes
[info] skip: rails does not subscribe to baseline-h2
[info] skip: rails does not subscribe to static-h2
[info] skip: rails does not subscribe to baseline-h2c
[info] skip: rails does not subscribe to json-h2c
[info] skip: rails does not subscribe to baseline-h3
[info] skip: rails does not subscribe to static-h3
[info] skip: rails does not subscribe to gateway-64
[info] skip: rails does not subscribe to gateway-h3
[info] skip: rails does not subscribe to production-stack
[info] skip: rails does not subscribe to unary-grpc
[info] skip: rails does not subscribe to unary-grpc-tls
[info] skip: rails does not subscribe to stream-grpc
[info] skip: rails does not subscribe to stream-grpc-tls
[info] skip: rails does not subscribe to echo-ws
[info] skip: rails 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/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 May 5, 2026

/benchmark -f rails —save

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Benchmark Results

Framework: rails | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 80,682 5770.1% 8.1GiB +35.2% +24.6%
baseline 4096 34,690 5231.1% 7.7GiB +11.2% +24.2%
pipelined 512 310,296 6498.0% 2.6GiB -1.4% +4.0%
pipelined 4096 312,196 6534.6% 2.6GiB -0.5% ~0%
limited-conn 512 27,592 4613.5% 6.2GiB -0.5% +3.3%
limited-conn 4096 27,448 4683.3% 6.9GiB -0.9% +13.1%
json 4096 123,898 6465.5% 4.2GiB +1.0% -4.5%
json-comp 512 83,297 6436.3% 4.1GiB -1.6% +2.5%
json-comp 4096 82,770 6459.8% 3.9GiB -1.7% -4.9%
json-comp 16384 82,499 6253.8% 4.4GiB -0.2% +2.3%
json-tls 4096 115,310 6541.7% 5.4GiB -1.8% ~0%
upload 32 929 3054.5% 10.2GiB -0.4% -6.4%
upload 256 893 6330.0% 9.3GiB -0.4% +29.2%
api-4 256 10,139 395.1% 388MiB ~0% +1.8%
api-16 1024 26,118 1734.2% 1.1GiB +0.6% ~0%
static 1024 118,056 6483.9% 8.4GiB -0.9% +18.3%
static 4096 120,679 6473.9% 8.7GiB +0.6% -3.3%
static 6800 119,726 6505.7% 8.7GiB -1.7% -7.4%
async-db 1024 70,137 6382.1% 3.7GiB +3.0% +23.3%
Full log
[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    33.14ms   10.08ms 261.82ms   83.76%
    Req/Sec     1.86k   447.26     8.06k    87.11%
  604153 requests in 5.11s, 9.26GB read
Requests/sec: 118305.14
Transfer/sec:      1.81GB
[info] CPU 6504.3% | Mem 8.5GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    32.12ms    8.65ms 250.59ms   80.47%
    Req/Sec     1.90k   499.17    13.69k    84.66%
  616306 requests in 5.11s, 9.45GB read
Requests/sec: 120679.08
Transfer/sec:      1.85GB
[info] CPU 6473.9% | Mem 8.7GiB

=== Best: 120679 req/s (CPU: 6473.9%, Mem: 8.7GiB) ===
[info] saved results/static/4096/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / 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    55.31ms   27.34ms 417.27ms   83.58%
    Req/Sec     1.70k   770.00     5.09k    77.83%
  543231 requests in 5.10s, 8.33GB read
Requests/sec: 106453.43
Transfer/sec:      1.63GB
[info] CPU 6379.8% | Mem 8.8GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    50.64ms   18.57ms 363.00ms   81.95%
    Req/Sec     1.89k   742.30    10.09k    79.30%
  611517 requests in 5.11s, 9.38GB read
Requests/sec: 119726.03
Transfer/sec:      1.84GB
[info] CPU 6505.7% | Mem 8.7GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    55.35ms   34.72ms 658.07ms   94.58%
    Req/Sec     1.84k   700.27    11.29k    79.37%
  597189 requests in 5.10s, 9.16GB read
Requests/sec: 117035.12
Transfer/sec:      1.79GB
[info] CPU 6446.6% | Mem 8.7GiB

=== Best: 119726 req/s (CPU: 6505.7%, Mem: 8.7GiB) ===
[info] saved results/static/6800/rails.json
httparena-bench-rails
httparena-bench-rails

==============================================
=== rails / 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   14.45ms   13.60ms   21.10ms   35.00ms   195.70ms

  680843 requests in 10.00s, 680844 responses
  Throughput: 68.06K req/s
  Bandwidth:  283.97MB/s
  Status codes: 2xx=680844, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 680844 / 680844 responses (100.0%)
  Reconnects: 26734
  Per-template: 135649,136327,136593,136256,136019
  Per-template-ok: 135649,136327,136593,136256,136019
[info] CPU 6314.5% | Mem 3.7GiB

[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   13.94ms   13.70ms   21.60ms   30.40ms   40.00ms

  701378 requests in 10.00s, 701379 responses
  Throughput: 70.11K req/s
  Bandwidth:  292.30MB/s
  Status codes: 2xx=701379, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 701379 / 701379 responses (100.0%)
  Reconnects: 27757
  Per-template: 139736,140525,141100,140416,139602
  Per-template-ok: 139736,140525,141100,140416,139602
[info] CPU 6382.1% | Mem 3.7GiB

[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   14.08ms   13.80ms   21.40ms   29.90ms   38.00ms

  697643 requests in 10.00s, 697643 responses
  Throughput: 69.75K req/s
  Bandwidth:  291.23MB/s
  Status codes: 2xx=697643, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 697642 / 697643 responses (100.0%)
  Reconnects: 27612
  Per-template: 139008,139377,139768,139926,139563
  Per-template-ok: 139008,139377,139768,139926,139563
[info] CPU 6400.7% | Mem 3.7GiB

=== Best: 70137 req/s (CPU: 6382.1%, Mem: 3.7GiB) ===
[info] input BW: 4.68MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/rails.json
httparena-bench-rails
httparena-bench-rails
[info] skip: rails does not subscribe to crud
[info] skip: rails does not subscribe to fortunes
[info] skip: rails does not subscribe to baseline-h2
[info] skip: rails does not subscribe to static-h2
[info] skip: rails does not subscribe to baseline-h2c
[info] skip: rails does not subscribe to json-h2c
[info] skip: rails does not subscribe to baseline-h3
[info] skip: rails does not subscribe to static-h3
[info] skip: rails does not subscribe to gateway-64
[info] skip: rails does not subscribe to gateway-h3
[info] skip: rails does not subscribe to production-stack
[info] skip: rails does not subscribe to unary-grpc
[info] skip: rails does not subscribe to unary-grpc-tls
[info] skip: rails does not subscribe to stream-grpc
[info] skip: rails does not subscribe to stream-grpc-tls
[info] skip: rails does not subscribe to echo-ws
[info] skip: rails 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/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