Skip to content

[rack-iodine] Remove request method guard#753

Open
p8 wants to merge 3 commits into
MDA2AV:mainfrom
p8:rack-iodine/allowed-http-methods
Open

[rack-iodine] Remove request method guard#753
p8 wants to merge 3 commits into
MDA2AV:mainfrom
p8:rack-iodine/allowed-http-methods

Conversation

@p8
Copy link
Copy Markdown
Contributor

@p8 p8 commented May 21, 2026

No description provided.

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 21, 2026

/benchmark -f rack-iodine --save

@github-actions
Copy link
Copy Markdown
Contributor

ghost commented May 21, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

ghost commented May 21, 2026

⚠️ /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.

@p8 p8 force-pushed the rack-iodine/allowed-http-methods branch from c6c4372 to 5a3e074 Compare May 21, 2026 20:55
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 21, 2026

/benchmark -f rack-iodine --save

@github-actions
Copy link
Copy Markdown
Contributor

ghost commented May 21, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

ghost commented May 21, 2026

Benchmark Results

Framework: rack-iodine | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 726,768 5370.4% 5.7GiB -16.6% ~0%
baseline 4096 1,670 41.6% 2.2GiB -97.8% -67.6%
limited-conn 512 59,922 4729.8% 5.7GiB +1.0% ~0%
limited-conn 4096 57,338 4801.1% 5.9GiB ~0% ~0%
Full log
  Req/conn:  10
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.36ms   2.82ms   25.70ms   62.20ms   196.40ms

  269171 requests in 5.00s, 268166 responses
  Throughput: 53.62K req/s
  Bandwidth:  6.29MB/s
  Status codes: 2xx=268144, 3xx=0, 4xx=9, 5xx=13
  Latency samples: 268166 / 268166 responses (100.0%)
  Reconnects: 27135
  Per-template: 89566,89797,88803
  Per-template-ok: 89556,89791,88797

  WARNING: 22/268166 responses (0.0%) had unexpected status (expected 2xx)
[info] CPU 5376.4% | Mem 6.1GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.52ms   3.00ms   28.10ms   56.60ms   79.90ms

  299607 requests in 5.00s, 299611 responses
  Throughput: 59.90K req/s
  Bandwidth:  7.03MB/s
  Status codes: 2xx=299611, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 299610 / 299611 responses (100.0%)
  Reconnects: 29847
  Per-template: 99819,99964,99827
  Per-template-ok: 99819,99964,99827
[info] CPU 4729.8% | Mem 5.7GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.55ms   3.00ms   28.20ms   56.50ms   82.10ms

  298402 requests in 5.00s, 298405 responses
  Throughput: 59.66K req/s
  Bandwidth:  7.00MB/s
  Status codes: 2xx=298405, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 298403 / 298405 responses (100.0%)
  Reconnects: 29722
  Per-template: 99441,99523,99439
  Per-template-ok: 99441,99523,99439
[info] CPU 4654.7% | Mem 6.0GiB

=== Best: 59922 req/s (CPU: 4729.8%, Mem: 5.7GiB) ===
[info] input BW: 4.63MB/s (avg template: 81 bytes)
[info] saved results/limited-conn/512/rack-iodine.json
httparena-bench-rack-iodine
httparena-bench-rack-iodine

==============================================
=== rack-iodine / limited-conn / 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:  10
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   70.23ms   52.60ms   140.70ms   323.90ms   514.40ms

  268257 requests in 5.00s, 259468 responses
  Throughput: 51.87K req/s
  Bandwidth:  6.09MB/s
  Status codes: 2xx=259046, 3xx=0, 4xx=4, 5xx=418
  Latency samples: 259468 / 259468 responses (100.0%)
  Reconnects: 27615
  Per-template: 86769,86978,85721
  Per-template-ok: 86601,86828,85617

  WARNING: 422/259468 responses (0.2%) had unexpected status (expected 2xx)
[info] CPU 5262.5% | Mem 6.5GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   67.31ms   58.40ms   130.10ms   205.10ms   264.00ms

  290672 requests in 5.00s, 286692 responses
  Throughput: 57.32K req/s
  Bandwidth:  6.72MB/s
  Status codes: 2xx=286692, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 286692 / 286692 responses (100.0%)
  Reconnects: 26866
  Per-template: 95221,95902,95569
  Per-template-ok: 95221,95902,95569
[info] CPU 4801.1% | Mem 5.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   67.97ms   58.70ms   130.20ms   205.50ms   266.30ms

  289392 requests in 5.00s, 285420 responses
  Throughput: 57.06K req/s
  Bandwidth:  6.69MB/s
  Status codes: 2xx=285420, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 285420 / 285420 responses (100.0%)
  Reconnects: 26779
  Per-template: 94980,95229,95211
  Per-template-ok: 94980,95229,95211
[info] CPU 4862.0% | Mem 6.2GiB

=== Best: 57338 req/s (CPU: 4801.1%, Mem: 5.9GiB) ===
[info] input BW: 4.43MB/s (avg template: 81 bytes)
[info] saved results/limited-conn/4096/rack-iodine.json
httparena-bench-rack-iodine
httparena-bench-rack-iodine
[info] skip: rack-iodine does not subscribe to json
[info] skip: rack-iodine does not subscribe to json-comp
[info] skip: rack-iodine does not subscribe to json-tls
[info] skip: rack-iodine does not subscribe to upload
[info] skip: rack-iodine does not subscribe to api-4
[info] skip: rack-iodine does not subscribe to api-16
[info] skip: rack-iodine does not subscribe to static
[info] skip: rack-iodine does not subscribe to async-db
[info] skip: rack-iodine does not subscribe to crud
[info] skip: rack-iodine does not subscribe to fortunes
[info] skip: rack-iodine does not subscribe to baseline-h2
[info] skip: rack-iodine does not subscribe to static-h2
[info] skip: rack-iodine does not subscribe to baseline-h2c
[info] skip: rack-iodine does not subscribe to json-h2c
[info] skip: rack-iodine does not subscribe to baseline-h3
[info] skip: rack-iodine does not subscribe to static-h3
[info] skip: rack-iodine does not subscribe to gateway-64
[info] skip: rack-iodine does not subscribe to gateway-h3
[info] skip: rack-iodine does not subscribe to production-stack
[info] skip: rack-iodine does not subscribe to unary-grpc
[info] skip: rack-iodine does not subscribe to unary-grpc-tls
[info] skip: rack-iodine does not subscribe to stream-grpc
[info] skip: rack-iodine does not subscribe to stream-grpc-tls
[info] skip: rack-iodine does not subscribe to echo-ws
[info] skip: rack-iodine does not subscribe to echo-ws-pipeline
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/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/current.json
[info] done
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented May 25, 2026

Do you want to merge this?
baseline 4096 1,670 41.6% 2.2GiB -97.8% -67.6%

@p8 p8 force-pushed the rack-iodine/allowed-http-methods branch from 985e454 to 5cc91fc Compare May 25, 2026 12:48
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 25, 2026

/benchmark -f rack-iodine --save

@github-actions
Copy link
Copy Markdown
Contributor

ghost commented May 25, 2026

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

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 25, 2026

Do you want to merge this? baseline 4096 1,670 41.6% 2.2GiB -97.8% -67.6%

I think there is a problem when Iodine runs with too many threads. I've rebased this PR on a branch that also reduces to number of threads to 1 for now. Hopefully the benchmark run shows better numbers.

@github-actions
Copy link
Copy Markdown
Contributor

ghost commented May 25, 2026

Benchmark Results

Framework: rack-iodine | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 730,114 5395.2% 4.9GiB -16.2% -14.0%
baseline 4096 65,472 4803.4% 5.3GiB -14.8% -22.1%
pipelined 512 2,037,298 6652.7% 4.4GiB +1016.9% +109.5%
pipelined 4096 2,054,716 6595.0% 4.6GiB -13.5% -9.8%
limited-conn 512 60,162 4844.6% 5.1GiB +1.4% -10.5%
limited-conn 4096 59,205 4693.3% 5.2GiB +3.3% -11.9%
Full log
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.55ms   2.77ms   33.10ms   71.00ms   163.20ms

  300811 requests in 5.00s, 300814 responses
  Throughput: 60.14K req/s
  Bandwidth:  7.05MB/s
  Status codes: 2xx=300814, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 300814 / 300814 responses (100.0%)
  Reconnects: 29869
  Per-template: 100106,100445,100263
  Per-template-ok: 100105,100445,100263
[info] CPU 4844.6% | Mem 5.1GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.73ms   2.88ms   34.00ms   68.80ms   100.30ms

  291649 requests in 5.00s, 291334 responses
  Throughput: 58.24K req/s
  Bandwidth:  6.83MB/s
  Status codes: 2xx=291334, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 291332 / 291334 responses (100.0%)
  Reconnects: 28985
  Per-template: 97089,97140,97103
  Per-template-ok: 97089,97140,97103
[info] CPU 4761.2% | Mem 5.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   8.73ms   2.93ms   34.40ms   67.10ms   98.70ms

  292381 requests in 5.00s, 292380 responses
  Throughput: 58.45K req/s
  Bandwidth:  6.86MB/s
  Status codes: 2xx=292380, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 292377 / 292380 responses (100.0%)
  Reconnects: 29122
  Per-template: 97337,97472,97568
  Per-template-ok: 97337,97472,97568
[info] CPU 4706.8% | Mem 5.5GiB

=== Best: 60162 req/s (CPU: 4844.6%, Mem: 5.1GiB) ===
[info] input BW: 4.65MB/s (avg template: 81 bytes)
[info] saved results/limited-conn/512/rack-iodine.json
httparena-bench-rack-iodine
httparena-bench-rack-iodine

==============================================
=== rack-iodine / limited-conn / 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:  10
  Templates: 3
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   66.55ms   44.40ms   150.00ms   266.30ms   378.50ms

  299925 requests in 5.00s, 296026 responses
  Throughput: 59.18K req/s
  Bandwidth:  6.94MB/s
  Status codes: 2xx=296026, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 296026 / 296026 responses (100.0%)
  Reconnects: 27812
  Per-template: 98619,98840,98567
  Per-template-ok: 98619,98840,98567
[info] CPU 4693.3% | Mem 5.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   68.22ms   54.90ms   144.70ms   244.10ms   336.30ms

  289862 requests in 5.00s, 285953 responses
  Throughput: 57.17K req/s
  Bandwidth:  6.71MB/s
  Status codes: 2xx=285953, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 285948 / 285953 responses (100.0%)
  Reconnects: 26782
  Per-template: 95279,95418,95251
  Per-template-ok: 95279,95418,95251
[info] CPU 4701.4% | Mem 5.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   68.08ms   55.50ms   142.40ms   241.30ms   323.70ms

  285446 requests in 5.00s, 281466 responses
  Throughput: 56.27K req/s
  Bandwidth:  6.60MB/s
  Status codes: 2xx=281466, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 281466 / 281466 responses (100.0%)
  Reconnects: 26371
  Per-template: 93757,94133,93576
  Per-template-ok: 93757,94133,93576
[info] CPU 4639.4% | Mem 5.6GiB

=== Best: 59205 req/s (CPU: 4693.3%, Mem: 5.2GiB) ===
[info] input BW: 4.57MB/s (avg template: 81 bytes)
[info] saved results/limited-conn/4096/rack-iodine.json
httparena-bench-rack-iodine
httparena-bench-rack-iodine
[info] skip: rack-iodine does not subscribe to json
[info] skip: rack-iodine does not subscribe to json-comp
[info] skip: rack-iodine does not subscribe to json-tls
[info] skip: rack-iodine does not subscribe to upload
[info] skip: rack-iodine does not subscribe to api-4
[info] skip: rack-iodine does not subscribe to api-16
[info] skip: rack-iodine does not subscribe to static
[info] skip: rack-iodine does not subscribe to async-db
[info] skip: rack-iodine does not subscribe to crud
[info] skip: rack-iodine does not subscribe to fortunes
[info] skip: rack-iodine does not subscribe to baseline-h2
[info] skip: rack-iodine does not subscribe to static-h2
[info] skip: rack-iodine does not subscribe to baseline-h2c
[info] skip: rack-iodine does not subscribe to json-h2c
[info] skip: rack-iodine does not subscribe to baseline-h3
[info] skip: rack-iodine does not subscribe to static-h3
[info] skip: rack-iodine does not subscribe to gateway-64
[info] skip: rack-iodine does not subscribe to gateway-h3
[info] skip: rack-iodine does not subscribe to production-stack
[info] skip: rack-iodine does not subscribe to unary-grpc
[info] skip: rack-iodine does not subscribe to unary-grpc-tls
[info] skip: rack-iodine does not subscribe to stream-grpc
[info] skip: rack-iodine does not subscribe to stream-grpc-tls
[info] skip: rack-iodine does not subscribe to echo-ws
[info] skip: rack-iodine does not subscribe to echo-ws-pipeline
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/baseline-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/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/current.json
[info] done
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@p8
Copy link
Copy Markdown
Contributor Author

p8 commented May 26, 2026

@MDA2AV This performs better than #733 (comment)
So I'd like to see this merged.

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 717,216 5397.0% 4.8GiB -17.7% -15.8%
baseline 4096 65,019 4750.0% 5.1GiB -15.4% -25.0%
pipelined 512 2,012,637 6587.4% 4.4GiB +1003.4% +109.5%
pipelined 4096 1,976,042 6574.9% 4.6GiB -16.8% -9.8%
limited-conn 512 59,864 4821.0% 5.1GiB +0.9% -10.5%
limited-conn 4096 59,214 4710.9% 5.2GiB +3.3% -11.9%

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.

2 participants