Skip to content

ring-jetty9-adapter: add Clojure framework - #1093

Merged
MDA2AV merged 2 commits into
MDA2AV:mainfrom
Ramblurr:pr/clojure-ring-jetty9-adapter
Aug 8, 2026
Merged

ring-jetty9-adapter: add Clojure framework#1093
MDA2AV merged 2 commits into
MDA2AV:mainfrom
Ramblurr:pr/clojure-ring-jetty9-adapter

Conversation

@Ramblurr

@Ramblurr Ramblurr commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Description

Adds the Ring Jetty 9 Adapter Clojure framework.


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-11 --compare genhttp

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, ghz) are built as self-contained Docker images on first run.

@MDA2AV

MDA2AV commented Aug 8, 2026

Copy link
Copy Markdown
Owner

/benchmark -f ring-jetty9-adapter --save

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: ring-jetty9-adapter | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 622,541 4641.8% 4.7GiB ~0% ~0%
baseline 4096 721,116 4959.7% 8.7GiB ~0% ~0%
pipelined 512 1,884,137 6401.4% 3.3GiB ~0% ~0%
pipelined 4096 1,896,427 6458.8% 4.9GiB ~0% ~0%
limited-conn 512 484,239 4263.8% 6.1GiB ~0% ~0%
limited-conn 4096 500,913 4413.8% 5.5GiB ~0% ~0%
json 4096 84,304 6412.1% 5.6GiB ~0% ~0%
json-comp 512 43,554 6426.7% 3.3GiB ~0% ~0%
json-comp 4096 45,129 6391.2% 4.7GiB ~0% ~0%
json-comp 16384 44,998 6429.7% 5.7GiB ~0% ~0%
upload 32 2,624 2370.7% 1.0GiB ~0% ~0%
upload 256 2,836 4095.2% 1.1GiB ~0% ~0%
static 1024 142,694 6485.1% 2.8GiB ~0% ~0%
static 4096 130,972 6492.9% 3.1GiB ~0% ~0%
static 6800 139,190 6484.3% 3.4GiB ~0% ~0%
async-db 1024 56,973 6478.9% 5.3GiB ~0% ~0%
Full log
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    57.90ms  162.93ms   1.70s    93.16%
    Req/Sec     1.95k     1.10k    5.97k    67.08%
  598283 requests in 5.10s, 35.53GB read
  Socket errors: connect 0, read 0, write 0, timeout 55
Requests/sec: 117294.59
Transfer/sec:      6.97GB
[info] CPU 6389.7% | Mem 2.5GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    96.23ms  239.42ms   1.78s    90.12%
    Req/Sec     2.03k     1.00k   11.60k    70.85%
  653296 requests in 5.10s, 38.80GB read
  Socket errors: connect 0, read 0, write 0, timeout 111
Requests/sec: 128077.34
Transfer/sec:      7.61GB
[info] CPU 6558.3% | Mem 3.1GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    78.86ms  192.68ms   1.76s    90.53%
    Req/Sec     2.12k     1.07k   14.10k    72.76%
  667986 requests in 5.10s, 39.68GB read
  Socket errors: connect 0, read 0, write 0, timeout 75
Requests/sec: 130972.18
Transfer/sec:      7.78GB
[info] CPU 6492.9% | Mem 3.1GiB

=== Best: 130972 req/s (CPU: 6492.9%, Mem: 3.1GiB) ===
[info] saved results/static/4096/ring-jetty9-adapter.json
httparena-bench-ring-jetty9-adapter
httparena-bench-ring-jetty9-adapter

==============================================
=== ring-jetty9-adapter / 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    45.54ms  148.74ms   1.76s    96.49%
    Req/Sec     2.24k     1.65k   11.52k    72.20%
  619182 requests in 5.10s, 36.77GB read
  Socket errors: connect 0, read 0, write 0, timeout 124
Requests/sec: 121405.93
Transfer/sec:      7.21GB
[info] CPU 6428.7% | Mem 2.4GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    56.09ms  171.74ms   1.85s    95.73%
    Req/Sec     2.20k     1.10k   17.52k    77.84%
  696978 requests in 5.10s, 41.40GB read
  Socket errors: connect 0, read 0, write 0, timeout 150
Requests/sec: 136674.06
Transfer/sec:      8.12GB
[info] CPU 6607.0% | Mem 2.9GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    37.51ms  101.14ms   1.78s    97.33%
    Req/Sec     2.29k     1.48k   15.96k    69.36%
  709958 requests in 5.10s, 42.16GB read
  Socket errors: connect 0, read 0, write 0, timeout 16
Requests/sec: 139190.34
Transfer/sec:      8.27GB
[info] CPU 6484.3% | Mem 3.4GiB

=== Best: 139190 req/s (CPU: 6484.3%, Mem: 3.4GiB) ===
[info] saved results/static/6800/ring-jetty9-adapter.json
httparena-bench-ring-jetty9-adapter
httparena-bench-ring-jetty9-adapter
[info] skip: ring-jetty9-adapter does not subscribe to static-tls

==============================================
=== ring-jetty9-adapter / 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   17.30ms   8.34ms   34.00ms   97.50ms   234.20ms

  538282 requests in 10.00s, 537574 responses
  Throughput: 53.74K req/s
  Bandwidth:  207.68MB/s
  Status codes: 2xx=537574, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 537574 / 537574 responses (100.0%)
  Latency overflow (>5s): 100
  Reconnects: 20998
  Per-template: 106838,107402,108064,107931,107339
  Per-template-ok: 106838,107402,108064,107931,107339
[info] CPU 5936.7% | Mem 4.3GiB

[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   16.56ms   11.60ms   33.00ms   78.30ms   154.00ms

  570308 requests in 10.00s, 569736 responses
  Throughput: 56.96K req/s
  Bandwidth:  220.01MB/s
  Status codes: 2xx=569736, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 569736 / 569736 responses (100.0%)
  Reconnects: 22459
  Per-template: 113317,113851,114528,114418,113622
  Per-template-ok: 113317,113851,114528,114418,113622
[info] CPU 6478.9% | Mem 5.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   16.77ms   11.70ms   33.10ms   76.80ms   167.80ms

  564618 requests in 10.00s, 564029 responses
  Throughput: 56.39K req/s
  Bandwidth:  218.04MB/s
  Status codes: 2xx=564029, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 564029 / 564029 responses (100.0%)
  Reconnects: 22184
  Per-template: 112028,112582,113221,113428,112770
  Per-template-ok: 112028,112582,113221,113428,112770
[info] CPU 6474.5% | Mem 5.3GiB

=== Best: 56973 req/s (CPU: 6478.9%, Mem: 5.3GiB) ===
[info] input BW: 3.80MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/ring-jetty9-adapter.json
httparena-bench-ring-jetty9-adapter
httparena-bench-ring-jetty9-adapter
[info] skip: ring-jetty9-adapter does not subscribe to crud
[info] skip: ring-jetty9-adapter does not subscribe to fortunes
[info] skip: ring-jetty9-adapter does not subscribe to baseline-h2
[info] skip: ring-jetty9-adapter does not subscribe to static-h2
[info] skip: ring-jetty9-adapter does not subscribe to baseline-h2c
[info] skip: ring-jetty9-adapter does not subscribe to json-h2c
[info] skip: ring-jetty9-adapter does not subscribe to baseline-h3
[info] skip: ring-jetty9-adapter does not subscribe to static-h3
[info] skip: ring-jetty9-adapter does not subscribe to gateway-64
[info] skip: ring-jetty9-adapter does not subscribe to gateway-h3
[info] skip: ring-jetty9-adapter does not subscribe to production-stack
[info] skip: ring-jetty9-adapter does not subscribe to unary-grpc
[info] skip: ring-jetty9-adapter does not subscribe to unary-grpc-tls
[info] skip: ring-jetty9-adapter does not subscribe to stream-grpc
[info] skip: ring-jetty9-adapter does not subscribe to stream-grpc-tls
[info] skip: ring-jetty9-adapter does not subscribe to echo-ws
[info] skip: ring-jetty9-adapter does not subscribe to echo-ws-pipeline
[info] skip: ring-jetty9-adapter does not subscribe to echo-ws-limited
[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/ring-jetty9-adapter.json - 16 new, 16 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
[info] restoring loopback MTU to 65536

@MDA2AV
MDA2AV merged commit 25fa199 into MDA2AV:main Aug 8, 2026
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