Skip to content

pedestal: add Clojure framework - #1091

Merged
MDA2AV merged 1 commit into
MDA2AV:mainfrom
Ramblurr:pr/clojure-pedestal
Aug 8, 2026
Merged

pedestal: add Clojure framework#1091
MDA2AV merged 1 commit into
MDA2AV:mainfrom
Ramblurr:pr/clojure-pedestal

Conversation

@Ramblurr

@Ramblurr Ramblurr commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Description

Adds the Pedestal 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 pedestal --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: pedestal | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 361,510 6107.6% 5.4GiB ~0% ~0%
baseline 4096 309,937 5671.0% 7.6GiB ~0% ~0%
pipelined 512 405,691 3925.5% 4.8GiB ~0% ~0%
pipelined 4096 388,544 4241.6% 7.5GiB ~0% ~0%
limited-conn 512 317,341 5788.1% 5.5GiB ~0% ~0%
limited-conn 4096 356,953 5980.1% 6.9GiB ~0% ~0%
json 4096 76,509 6332.8% 6.8GiB ~0% ~0%
json-comp 512 42,029 6333.6% 3.4GiB ~0% ~0%
json-comp 4096 42,395 6360.3% 5.4GiB ~0% ~0%
json-comp 16384 44,338 6126.2% 7.3GiB ~0% ~0%
upload 32 2,636 2457.9% 1.3GiB ~0% ~0%
upload 256 2,838 4365.7% 1.4GiB ~0% ~0%
static 1024 160,414 6358.3% 3.7GiB ~0% ~0%
static 4096 156,735 6354.7% 5.5GiB ~0% ~0%
static 6800 157,836 6339.1% 5.3GiB ~0% ~0%
async-db 1024 53,380 6428.4% 5.3GiB ~0% ~0%
Full log
[run 1/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    83.03ms  203.28ms   1.83s    90.39%
    Req/Sec     2.24k     1.21k    8.41k    69.89%
  694327 requests in 5.10s, 41.21GB read
  Socket errors: connect 0, read 0, write 0, timeout 23
Requests/sec: 136146.42
Transfer/sec:      8.08GB
[info] CPU 6153.0% | Mem 3.7GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   110.09ms  238.00ms   1.92s    87.42%
    Req/Sec     2.67k     1.61k   13.27k    69.34%
  796049 requests in 5.10s, 47.25GB read
  Socket errors: connect 0, read 0, write 0, timeout 123
Requests/sec: 156081.86
Transfer/sec:      9.27GB
[info] CPU 6371.8% | Mem 4.7GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    80.27ms  184.49ms   1.86s    89.14%
    Req/Sec     2.52k     1.13k   12.98k    74.25%
  799302 requests in 5.10s, 47.45GB read
  Socket errors: connect 0, read 0, write 0, timeout 126
Requests/sec: 156735.41
Transfer/sec:      9.30GB
[info] CPU 6354.7% | Mem 5.5GiB

=== Best: 156735 req/s (CPU: 6354.7%, Mem: 5.5GiB) ===
[info] saved results/static/4096/pedestal.json
httparena-bench-pedestal
httparena-bench-pedestal

==============================================
=== pedestal / 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    44.87ms  146.63ms   1.73s    94.83%
    Req/Sec     2.68k     2.19k   15.24k    72.15%
  691527 requests in 5.10s, 41.05GB read
  Socket errors: connect 0, read 0, write 0, timeout 92
Requests/sec: 135584.49
Transfer/sec:      8.05GB
[info] CPU 6043.3% | Mem 3.6GiB

[run 2/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    85.65ms  222.27ms   1.97s    90.20%
    Req/Sec     2.51k     1.92k   17.18k    77.28%
  794832 requests in 5.10s, 47.18GB read
  Socket errors: connect 0, read 0, write 0, timeout 214
Requests/sec: 155843.18
Transfer/sec:      9.25GB
[info] CPU 6331.5% | Mem 4.5GiB

[run 3/3]
Running 5s test @ http://localhost:8080
  64 threads and 6800 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   139.55ms  320.76ms   1.81s    87.89%
    Req/Sec     2.57k     1.71k   14.41k    71.07%
  804926 requests in 5.10s, 47.78GB read
  Socket errors: connect 0, read 0, write 0, timeout 116
Requests/sec: 157836.18
Transfer/sec:      9.37GB
[info] CPU 6339.1% | Mem 5.3GiB

=== Best: 157836 req/s (CPU: 6339.1%, Mem: 5.3GiB) ===
[info] saved results/static/6800/pedestal.json
httparena-bench-pedestal
httparena-bench-pedestal
[info] skip: pedestal does not subscribe to static-tls

==============================================
=== pedestal / 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   18.92ms   7.43ms   42.40ms   168.80ms   403.80ms

  491979 requests in 10.00s, 491289 responses
  Throughput: 49.12K req/s
  Bandwidth:  189.32MB/s
  Status codes: 2xx=491289, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 491289 / 491289 responses (100.0%)
  Reconnects: 19168
  Per-template: 97946,98501,98442,98451,97949
  Per-template-ok: 97946,98501,98442,98451,97949
[info] CPU 6000.6% | Mem 5.2GiB

[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   17.64ms   11.00ms   33.80ms   105.60ms   220.60ms

  533062 requests in 10.00s, 532491 responses
  Throughput: 53.24K req/s
  Bandwidth:  205.65MB/s
  Status codes: 2xx=532491, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 532490 / 532491 responses (100.0%)
  Reconnects: 20935
  Per-template: 106052,106049,106643,107075,106671
  Per-template-ok: 106052,106049,106643,107075,106671
[info] CPU 6382.0% | 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   17.38ms   10.70ms   33.40ms   107.10ms   224.50ms

  534441 requests in 10.00s, 533807 responses
  Throughput: 53.37K req/s
  Bandwidth:  205.95MB/s
  Status codes: 2xx=533807, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 533806 / 533807 responses (100.0%)
  Reconnects: 21007
  Per-template: 106066,106743,107183,107318,106496
  Per-template-ok: 106066,106743,107183,107318,106496
[info] CPU 6428.4% | Mem 5.3GiB

=== Best: 53380 req/s (CPU: 6428.4%, Mem: 5.3GiB) ===
[info] input BW: 3.56MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/pedestal.json
httparena-bench-pedestal
httparena-bench-pedestal
[info] skip: pedestal does not subscribe to crud
[info] skip: pedestal does not subscribe to fortunes
[info] skip: pedestal does not subscribe to baseline-h2
[info] skip: pedestal does not subscribe to static-h2
[info] skip: pedestal does not subscribe to baseline-h2c
[info] skip: pedestal does not subscribe to json-h2c
[info] skip: pedestal does not subscribe to baseline-h3
[info] skip: pedestal does not subscribe to static-h3
[info] skip: pedestal does not subscribe to gateway-64
[info] skip: pedestal does not subscribe to gateway-h3
[info] skip: pedestal does not subscribe to production-stack
[info] skip: pedestal does not subscribe to unary-grpc
[info] skip: pedestal does not subscribe to unary-grpc-tls
[info] skip: pedestal does not subscribe to stream-grpc
[info] skip: pedestal does not subscribe to stream-grpc-tls
[info] skip: pedestal does not subscribe to echo-ws
[info] skip: pedestal does not subscribe to echo-ws-pipeline
[info] skip: pedestal 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/pedestal.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 e890a87 into MDA2AV:main Aug 8, 2026
4 checks passed
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