Skip to content

make ring-http-exchange async #697

Open
ruroru wants to merge 1 commit intoMDA2AV:mainfrom
ruroru:update-ring-http-exchange
Open

make ring-http-exchange async #697
ruroru wants to merge 1 commit intoMDA2AV:mainfrom
ruroru:update-ring-http-exchange

Conversation

@ruroru
Copy link
Copy Markdown
Contributor

@ruroru ruroru commented May 8, 2026

No description provided.

@ruroru ruroru force-pushed the update-ring-http-exchange branch 5 times, most recently from 12bd044 to 5d16572 Compare May 9, 2026 00:05
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,166,488 6138.0% 13.6GiB -11.6% +7.9%
baseline 4096 1,137,627 6228.9% 13.0GiB -8.1% ~0%
limited-conn 512 835,466 6270.7% 13.4GiB -4.8% ~0%
limited-conn 4096 835,831 5714.1% 12.8GiB -6.7% ~0%
json 4096 432,380 5919.7% 13.0GiB -7.4% -7.1%
json-comp 512 18,836 630.3% 791MiB +0.3% -1.4%
json-comp 4096 139,601 4357.4% 14.2GiB -1.3% +118.5%
json-comp 16384 221,286 6652.4% 15.2GiB +0.1% +1.3%
json-tls 4096 431,062 6390.3% 13.9GiB -6.4% -2.8%
upload 32 2,690 2492.7% 387MiB -0.9% +10.6%
upload 256 2,875 4549.1% 390MiB -0.9% -0.5%
api-4 256 32,025 409.6% 856MiB +1.7% +18.9%
api-16 1024 77,597 1720.1% 3.5GiB +0.8% +133.3%
static 1024 222,263 6671.1% 4.8GiB -5.7% ~0%
static 4096 220,975 6406.6% 4.9GiB -1.9% ~0%
static 6800 213,607 6545.9% 4.9GiB -5.3% ~0%
async-db 1024 109,367 5126.9% 5.1GiB +40.5% +8.5%
crud 4096 209,976 5188.5% 12.9GiB -35.1% +0.8%
Full log
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.86ms   8.87ms   11.70ms   38.70ms   598.80ms

  933584 requests in 10.00s, 933586 responses
  Throughput: 93.34K req/s
  Bandwidth:  358.41MB/s
  Status codes: 2xx=933586, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 933586 / 933586 responses (100.0%)
  Reconnects: 36993
  Per-template: 186556,186908,187105,186719,186298
  Per-template-ok: 186556,186908,187105,186719,186298
[info] CPU 5401.0% | Mem 5.1GiB

[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   9.17ms   8.93ms   10.70ms   14.10ms   19.10ms

  1087853 requests in 10.00s, 1087854 responses
  Throughput: 108.76K req/s
  Bandwidth:  417.86MB/s
  Status codes: 2xx=1087854, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1087853 / 1087854 responses (100.0%)
  Reconnects: 43055
  Per-template: 217563,217532,217697,217462,217599
  Per-template-ok: 217563,217532,217697,217462,217599
[info] CPU 5131.4% | Mem 5.1GiB

[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   9.10ms   8.85ms   10.70ms   14.00ms   18.20ms

  1093677 requests in 10.00s, 1093678 responses
  Throughput: 109.34K req/s
  Bandwidth:  420.00MB/s
  Status codes: 2xx=1093678, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1093678 / 1093678 responses (100.0%)
  Reconnects: 43571
  Per-template: 219069,218485,218766,218765,218593
  Per-template-ok: 219069,218485,218766,218765,218593
[info] CPU 5126.9% | Mem 5.1GiB

=== Best: 109367 req/s (CPU: 5126.9%, Mem: 5.1GiB) ===
[info] input BW: 7.30MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange

==============================================
=== ring-http-exchange / crud / 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:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   23.27ms   27.00ms   30.50ms   77.50ms   692.60ms

  2634492 requests in 15.00s, 2634048 responses
  Throughput: 175.57K req/s
  Bandwidth:  62.69MB/s
  Status codes: 2xx=2634048, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2634048 / 2634048 responses (100.0%)
  Reconnects: 11120
  Per-template: 94975,102323,122505,125837,146619,146303,146387,145973,146345,146244,146494,146518,146818,146449,146170,146222,135681,107092,94247,94846
  Per-template-ok: 94975,102323,122505,125837,146619,146303,146387,145973,146345,146244,146494,146518,146818,146449,146170,146222,135681,107092,94247,94846
[info] CPU 5059.9% | Mem 14.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.74ms   26.40ms   28.70ms   38.30ms   102.00ms

  3102573 requests in 15.00s, 3102573 responses
  Throughput: 206.80K req/s
  Bandwidth:  73.65MB/s
  Status codes: 2xx=3102573, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3102573 / 3102573 responses (100.0%)
  Reconnects: 14055
  Per-template: 110364,122577,126855,149070,163417,173983,173797,173475,173480,173627,174221,173259,173569,173861,173092,173217,159289,138885,112277,110258
  Per-template-ok: 110364,122577,126855,149070,163417,173983,173797,173475,173480,173627,174221,173259,173569,173861,173092,173217,159289,138885,112277,110258
[info] CPU 5080.3% | Mem 13.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.49ms   26.10ms   28.60ms   38.10ms   103.00ms

  3149646 requests in 15.00s, 3149646 responses
  Throughput: 209.94K req/s
  Bandwidth:  75.03MB/s
  Status codes: 2xx=3149646, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3149646 / 3149646 responses (100.0%)
  Reconnects: 14106
  Per-template: 111645,122600,128420,151838,163874,176482,175933,176060,175904,176338,175870,176401,176486,176782,176400,176231,164563,140668,115533,111618
  Per-template-ok: 111645,122600,128420,151838,163874,176482,175933,176060,175904,176338,175870,176401,176486,176782,176400,176231,164563,140668,115533,111618
[info] CPU 5188.5% | Mem 12.9GiB

=== Best: 209976 req/s (CPU: 5188.5%, Mem: 12.9GiB) ===
[info] input BW: 18.02MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[info] skip: ring-http-exchange does not subscribe to fortunes
[info] skip: ring-http-exchange does not subscribe to baseline-h2
[info] skip: ring-http-exchange does not subscribe to static-h2
[info] skip: ring-http-exchange does not subscribe to baseline-h2c
[info] skip: ring-http-exchange does not subscribe to json-h2c
[info] skip: ring-http-exchange does not subscribe to baseline-h3
[info] skip: ring-http-exchange does not subscribe to static-h3
[info] skip: ring-http-exchange does not subscribe to gateway-64
[info] skip: ring-http-exchange does not subscribe to gateway-h3
[info] skip: ring-http-exchange does not subscribe to production-stack
[info] skip: ring-http-exchange does not subscribe to unary-grpc
[info] skip: ring-http-exchange does not subscribe to unary-grpc-tls
[info] skip: ring-http-exchange does not subscribe to stream-grpc
[info] skip: ring-http-exchange does not subscribe to stream-grpc-tls
[info] skip: ring-http-exchange 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/crud-4096.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/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
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@ruroru ruroru changed the title make ring-http-exchange async make ring-http-exchange async // Dont merge yet May 9, 2026
@ruroru ruroru force-pushed the update-ring-http-exchange branch from 5d16572 to 8184457 Compare May 9, 2026 11:31
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,149,047 6209.7% 12.5GiB -12.9% -0.8%
baseline 4096 1,147,417 6482.7% 13.7GiB -7.3% +5.4%
limited-conn 512 838,674 6061.1% 12.8GiB -4.4% -4.5%
limited-conn 4096 816,727 6053.1% 13.4GiB -8.8% +4.7%
json 4096 430,792 5427.2% 13.7GiB -7.8% -2.1%
json-comp 512 18,822 637.8% 1.8GiB +0.2% +129.8%
json-comp 4096 139,951 4314.7% 14.2GiB -1.0% +118.5%
json-comp 16384 222,616 6591.8% 15.2GiB +0.7% +1.3%
json-tls 4096 431,669 6447.1% 13.9GiB -6.2% -2.8%
upload 32 2,715 2403.3% 389MiB ~0% +11.1%
upload 256 2,875 4432.6% 408MiB -0.9% +4.1%
api-4 256 32,081 410.3% 811MiB +1.9% +12.6%
api-16 1024 76,774 1718.0% 3.4GiB -0.2% +126.7%
static 1024 218,901 6613.1% 4.4GiB -7.1% -8.3%
static 4096 219,171 6526.8% 4.8GiB -2.7% -2.0%
static 6800 217,873 6489.9% 4.9GiB -3.4% ~0%
async-db 1024 108,768 5075.4% 5.0GiB +39.7% +6.4%
crud 4096 207,639 5145.8% 13.0GiB -35.8% +1.6%
Full log
  Expected:  200
  Duration:  10s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.95ms   8.75ms   11.30ms   40.50ms   648.40ms

  918052 requests in 10.00s, 918052 responses
  Throughput: 91.78K req/s
  Bandwidth:  352.34MB/s
  Status codes: 2xx=918052, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 918052 / 918052 responses (100.0%)
  Reconnects: 36111
  Per-template: 183565,184031,183865,183379,183212
  Per-template-ok: 183565,184031,183865,183379,183212
[info] CPU 5506.7% | Mem 5.1GiB

[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   9.26ms   9.01ms   10.90ms   14.20ms   19.10ms

  1080921 requests in 10.00s, 1080922 responses
  Throughput: 108.07K req/s
  Bandwidth:  415.34MB/s
  Status codes: 2xx=1080922, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1080921 / 1080922 responses (100.0%)
  Reconnects: 43028
  Per-template: 216379,215937,215936,216144,216525
  Per-template-ok: 216379,215937,215936,216144,216525
[info] CPU 5075.9% | Mem 5.1GiB

[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   9.19ms   8.95ms   10.80ms   14.10ms   18.10ms

  1087688 requests in 10.00s, 1087688 responses
  Throughput: 108.75K req/s
  Bandwidth:  417.82MB/s
  Status codes: 2xx=1087688, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1087686 / 1087688 responses (100.0%)
  Reconnects: 43098
  Per-template: 217958,217316,217162,217507,217743
  Per-template-ok: 217958,217316,217162,217507,217743
[info] CPU 5075.4% | Mem 5.0GiB

=== Best: 108768 req/s (CPU: 5075.4%, Mem: 5.0GiB) ===
[info] input BW: 7.26MB/s (avg template: 70 bytes)
[info] saved results/async-db/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange

==============================================
=== ring-http-exchange / crud / 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:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   23.14ms   26.90ms   30.50ms   78.30ms   803.80ms

  2650161 requests in 15.00s, 2649965 responses
  Throughput: 176.63K req/s
  Bandwidth:  63.13MB/s
  Status codes: 2xx=2649965, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2649965 / 2649965 responses (100.0%)
  Reconnects: 11144
  Per-template: 95401,103210,122769,126441,146964,147432,147507,147865,146918,147062,146802,146782,146673,147365,147563,147403,137286,108646,94672,95204
  Per-template-ok: 95401,103210,122769,126441,146964,147432,147507,147865,146918,147062,146802,146782,146673,147365,147563,147403,137286,108646,94672,95204
[info] CPU 5062.0% | Mem 14.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.94ms   26.50ms   28.90ms   39.10ms   208.90ms

  3068967 requests in 15.00s, 3068967 responses
  Throughput: 204.56K req/s
  Bandwidth:  72.83MB/s
  Status codes: 2xx=3068967, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3068967 / 3068967 responses (100.0%)
  Reconnects: 13945
  Per-template: 109218,122353,124668,147519,163352,171713,171307,171525,171640,171735,172149,171429,172135,171300,170827,171613,157322,137719,110416,109027
  Per-template-ok: 109218,122353,124668,147519,163352,171713,171307,171525,171640,171735,172149,171429,172135,171300,170827,171613,157322,137719,110416,109027
[info] CPU 4994.1% | Mem 13.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.68ms   26.30ms   28.80ms   39.00ms   92.20ms

  3114596 requests in 15.00s, 3114596 responses
  Throughput: 207.60K req/s
  Bandwidth:  74.06MB/s
  Status codes: 2xx=3114596, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3114596 / 3114596 responses (100.0%)
  Reconnects: 14076
  Per-template: 110965,122777,127288,150835,164000,175146,174002,174684,173940,173306,173151,174287,173673,173679,173480,174439,161323,139674,113170,110777
  Per-template-ok: 110965,122777,127288,150835,164000,175146,174002,174684,173940,173306,173151,174287,173673,173679,173480,174439,161323,139674,113170,110777
[info] CPU 5145.8% | Mem 13.0GiB

=== Best: 207639 req/s (CPU: 5145.8%, Mem: 13.0GiB) ===
[info] input BW: 17.82MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[info] skip: ring-http-exchange does not subscribe to fortunes
[info] skip: ring-http-exchange does not subscribe to baseline-h2
[info] skip: ring-http-exchange does not subscribe to static-h2
[info] skip: ring-http-exchange does not subscribe to baseline-h2c
[info] skip: ring-http-exchange does not subscribe to json-h2c
[info] skip: ring-http-exchange does not subscribe to baseline-h3
[info] skip: ring-http-exchange does not subscribe to static-h3
[info] skip: ring-http-exchange does not subscribe to gateway-64
[info] skip: ring-http-exchange does not subscribe to gateway-h3
[info] skip: ring-http-exchange does not subscribe to production-stack
[info] skip: ring-http-exchange does not subscribe to unary-grpc
[info] skip: ring-http-exchange does not subscribe to unary-grpc-tls
[info] skip: ring-http-exchange does not subscribe to stream-grpc
[info] skip: ring-http-exchange does not subscribe to stream-grpc-tls
[info] skip: ring-http-exchange 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/crud-4096.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/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
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@ruroru ruroru force-pushed the update-ring-http-exchange branch from 8184457 to 44a8f2c Compare May 9, 2026 11:44
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@ruroru ruroru changed the title make ring-http-exchange async // Dont merge yet make ring-http-exchange async May 9, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,147,781 6333.7% 13.6GiB -13.0% +7.9%
baseline 4096 1,152,015 6272.8% 13.0GiB -6.9% ~0%
limited-conn 512 851,966 6194.4% 13.4GiB -2.9% ~0%
limited-conn 4096 822,447 5751.2% 12.8GiB -8.2% ~0%
json 4096 435,456 5535.3% 13.7GiB -6.8% -2.1%
json-comp 512 18,804 693.0% 796MiB +0.1% -0.7%
json-comp 4096 139,597 4718.6% 8.9GiB -1.3% +36.9%
json-comp 16384 221,287 6629.3% 15.5GiB +0.1% +3.3%
json-tls 4096 429,833 6389.3% 13.9GiB -6.6% -2.8%
upload 32 2,686 2408.6% 386MiB -1.1% +10.3%
upload 256 2,871 4568.3% 414MiB -1.0% +5.6%
api-4 256 31,850 409.7% 788MiB +1.1% +9.4%
api-16 1024 75,123 1718.6% 1.9GiB -2.4% +26.7%
static 1024 229,867 6613.1% 4.7GiB -2.5% -2.1%
static 4096 216,994 6592.7% 4.9GiB -3.7% ~0%
static 6800 215,333 6530.5% 4.9GiB -4.5% ~0%
async-db 1024 109,437 5165.8% 5.1GiB +40.6% +8.5%
crud 4096 206,683 5225.3% 13.9GiB -36.1% +8.6%
fortunes 1024 52,599 3384.5% 5.1GiB NEW NEW
Full log
=== ring-http-exchange / crud / 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:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   23.52ms   27.10ms   31.00ms   80.80ms   756.50ms

  2609563 requests in 15.00s, 2607963 responses
  Throughput: 173.83K req/s
  Bandwidth:  62.05MB/s
  Status codes: 2xx=2607963, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2607963 / 2607963 responses (100.0%)
  Reconnects: 11031
  Per-template: 94230,101347,122411,125002,145025,145128,144783,144414,144663,144468,144697,144546,144976,144728,144105,144778,134286,106626,93669,94081
  Per-template-ok: 94230,101347,122411,125002,145025,145128,144783,144414,144663,144468,144697,144546,144976,144728,144105,144778,134286,106626,93669,94081
[info] CPU 5241.7% | Mem 14.3GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.76ms   26.40ms   28.90ms   39.20ms   91.60ms

  3100381 requests in 15.00s, 3100253 responses
  Throughput: 206.65K req/s
  Bandwidth:  73.69MB/s
  Status codes: 2xx=3100253, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3100253 / 3100253 responses (100.0%)
  Reconnects: 14051
  Per-template: 110493,122614,125888,149537,163960,173215,173254,173155,173006,173447,173639,173425,173337,173254,173349,173043,160297,138667,112443,110230
  Per-template-ok: 110493,122614,125888,149537,163960,173215,173254,173155,173006,173447,173639,173425,173337,173254,173349,173043,160297,138667,112443,110230
[info] CPU 5225.3% | Mem 13.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   20.19ms   26.90ms   29.50ms   39.40ms   98.20ms

  3036470 requests in 15.00s, 3036470 responses
  Throughput: 202.39K req/s
  Bandwidth:  72.03MB/s
  Status codes: 2xx=3036470, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3036470 / 3036470 responses (100.0%)
  Reconnects: 13730
  Per-template: 108701,122285,124456,146519,163469,168950,169224,169428,168804,169364,169282,168896,169398,169461,169498,169169,155487,136501,109032,108546
  Per-template-ok: 108701,122285,124456,146519,163469,168950,169224,169428,168804,169364,169282,168896,169398,169461,169498,169169,155487,136501,109032,108546
[info] CPU 5141.8% | Mem 12.7GiB

=== Best: 206683 req/s (CPU: 5225.3%, Mem: 13.9GiB) ===
[info] input BW: 17.74MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange

==============================================
=== ring-http-exchange / fortunes / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   26.78ms   19.60ms   33.20ms   113.80ms   781.20ms

  192126 requests in 5.00s, 192126 responses
  Throughput: 38.41K req/s
  Bandwidth:  96.31MB/s
  Status codes: 2xx=192126, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 192126 / 192126 responses (100.0%)
[info] CPU 3877.7% | Mem 5.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.49ms   18.10ms   27.70ms   40.00ms   58.30ms

  262382 requests in 5.00s, 262382 responses
  Throughput: 52.46K req/s
  Bandwidth:  131.52MB/s
  Status codes: 2xx=262382, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 262379 / 262382 responses (100.0%)
[info] CPU 3417.8% | Mem 5.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.44ms   18.00ms   27.60ms   39.90ms   57.50ms

  262999 requests in 5.00s, 262999 responses
  Throughput: 52.58K req/s
  Bandwidth:  131.83MB/s
  Status codes: 2xx=262999, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 262999 / 262999 responses (100.0%)
[info] CPU 3384.5% | Mem 5.1GiB

=== Best: 52599 req/s (CPU: 3384.5%, Mem: 5.1GiB) ===
[info] saved results/fortunes/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[info] skip: ring-http-exchange does not subscribe to baseline-h2
[info] skip: ring-http-exchange does not subscribe to static-h2
[info] skip: ring-http-exchange does not subscribe to baseline-h2c
[info] skip: ring-http-exchange does not subscribe to json-h2c
[info] skip: ring-http-exchange does not subscribe to baseline-h3
[info] skip: ring-http-exchange does not subscribe to static-h3
[info] skip: ring-http-exchange does not subscribe to gateway-64
[info] skip: ring-http-exchange does not subscribe to gateway-h3
[info] skip: ring-http-exchange does not subscribe to production-stack
[info] skip: ring-http-exchange does not subscribe to unary-grpc
[info] skip: ring-http-exchange does not subscribe to unary-grpc-tls
[info] skip: ring-http-exchange does not subscribe to stream-grpc
[info] skip: ring-http-exchange does not subscribe to stream-grpc-tls
[info] skip: ring-http-exchange 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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/fortunes-1024.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/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
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@ruroru ruroru force-pushed the update-ring-http-exchange branch from 44a8f2c to 9023028 Compare May 9, 2026 12:12
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange -t fortunes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: fortunes

Test Conn RPS CPU Mem Δ RPS Δ Mem
fortunes 1024 49,522 3345.2% 6.3GiB NEW NEW
Full log
[info] available CPUs: 128
[info] framework: ring-http-exchange (ring-http-exchange, Clojure)
[info] subscribed tests: baseline,limited-conn,json,json-comp,upload,short-lived,mixed,json-tls,api-4,api-16,async-db,sync-db,static,tcp-frag,fortunes,crud
[info] building image: httparena-ring-http-exchange
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 409B done
#1 DONE 0.0s

#2 [internal] load metadata for docker.io/library/clojure:temurin-26-lein-trixie
#2 ...

#3 [internal] load metadata for docker.io/library/eclipse-temurin:26-jre
#3 DONE 0.4s

#2 [internal] load metadata for docker.io/library/clojure:temurin-26-lein-trixie
#2 DONE 0.4s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [internal] load build context
#5 DONE 0.0s

#6 [stage-1 1/4] FROM docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c
#6 resolve docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c 0.1s done
#6 DONE 0.1s

#7 [builder 1/7] FROM docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1
#7 resolve docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1 0.1s done
#7 DONE 0.1s

#5 [internal] load build context
#5 transferring context: 526B done
#5 DONE 0.0s

#8 [builder 4/7] COPY resources ./resources
#8 CACHED

#9 [stage-1 2/4] RUN mkdir -p /data/static
#9 CACHED

#10 [builder 2/7] WORKDIR /app
#10 CACHED

#11 [builder 3/7] COPY project.clj ./
#11 CACHED

#12 [builder 6/7] COPY src ./src
#12 CACHED

#13 [builder 7/7] RUN lein with-profile uberjar uberjar
#13 CACHED

#14 [stage-1 3/4] WORKDIR /app
#14 CACHED

#15 [builder 5/7] RUN lein deps
#15 CACHED

#16 [stage-1 4/4] COPY --from=builder /app/target/ring-0.1.0-standalone.jar /app/app.jar
#16 CACHED

#17 exporting to image
#17 exporting layers done
#17 exporting manifest sha256:4a0800c39fc37926923487defa36a9b415400385a8705596b73b48a7e0f70568 done
#17 exporting config sha256:eb6652041fd2e75d7fe7c4da47f655c3a4cb9603975c609d0959ded9dcf5f2c8 done
#17 exporting attestation manifest sha256:5cc2b25bca4875306abb2753aa9db49f973f27494dfd6fd26776e20a79af6510 0.1s done
#17 exporting manifest list sha256:1659f4021bf9ccfcfe4776483aac6981ac2f4abe53319f4c8e014fa8229e8f70
#17 exporting manifest list sha256:1659f4021bf9ccfcfe4776483aac6981ac2f4abe53319f4c8e014fa8229e8f70 0.0s done
#17 naming to docker.io/library/httparena-ring-http-exchange:latest done
#17 unpacking to docker.io/library/httparena-ring-http-exchange:latest done
#17 DONE 0.2s
[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)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== ring-http-exchange / fortunes / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   32.65ms    861us   80.10ms   305.70ms    1.21s

  157073 requests in 5.00s, 157073 responses
  Throughput: 31.40K req/s
  Bandwidth:  78.74MB/s
  Status codes: 2xx=157073, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 157073 / 157073 responses (100.0%)
[info] CPU 3986.3% | Mem 5.3GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.05ms    721us   74.40ms   142.80ms   161.10ms

  241942 requests in 5.00s, 241942 responses
  Throughput: 48.37K req/s
  Bandwidth:  121.28MB/s
  Status codes: 2xx=241942, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 241938 / 241942 responses (100.0%)
[info] CPU 3239.6% | Mem 5.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   20.61ms    722us   76.00ms   144.90ms   164.20ms

  247614 requests in 5.00s, 247614 responses
  Throughput: 49.51K req/s
  Bandwidth:  124.12MB/s
  Status codes: 2xx=247614, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 247613 / 247614 responses (100.0%)
[info] CPU 3345.2% | Mem 6.3GiB

=== Best: 49522 req/s (CPU: 3345.2%, Mem: 6.3GiB) ===
[info] saved results/fortunes/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[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/fortunes-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@ruroru ruroru force-pushed the update-ring-http-exchange branch from 9023028 to 4a59314 Compare May 9, 2026 12:30
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange -t fortunes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@ruroru ruroru force-pushed the update-ring-http-exchange branch from 4a59314 to 9183e1c Compare May 9, 2026 12:33
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange -t fortunes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: fortunes

Test Conn RPS CPU Mem Δ RPS Δ Mem
fortunes 1024 48,119 2964.2% 5.1GiB NEW NEW
Full log
[info] available CPUs: 128
[info] framework: ring-http-exchange (ring-http-exchange, Clojure)
[info] subscribed tests: baseline,limited-conn,json,json-comp,upload,short-lived,mixed,json-tls,api-4,api-16,async-db,sync-db,static,tcp-frag,fortunes,crud
[info] building image: httparena-ring-http-exchange
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 409B done
#1 DONE 0.0s

#2 [internal] load metadata for docker.io/library/eclipse-temurin:26-jre
#2 DONE 0.7s

#3 [internal] load metadata for docker.io/library/clojure:temurin-26-lein-trixie
#3 DONE 0.7s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [internal] load build context
#5 DONE 0.0s

#6 [builder 1/7] FROM docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1
#6 resolve docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1 0.0s done
#6 DONE 0.1s

#7 [stage-1 1/4] FROM docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c
#7 resolve docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c 0.1s done
#7 DONE 0.1s

#5 [internal] load build context
#5 transferring context: 526B done
#5 DONE 0.0s

#8 [builder 3/7] COPY project.clj ./
#8 CACHED

#9 [stage-1 3/4] WORKDIR /app
#9 CACHED

#10 [builder 5/7] RUN lein deps
#10 CACHED

#11 [builder 7/7] RUN lein with-profile uberjar uberjar
#11 CACHED

#12 [builder 6/7] COPY src ./src
#12 CACHED

#13 [stage-1 2/4] RUN mkdir -p /data/static
#13 CACHED

#14 [builder 2/7] WORKDIR /app
#14 CACHED

#15 [builder 4/7] COPY resources ./resources
#15 CACHED

#16 [stage-1 4/4] COPY --from=builder /app/target/ring-0.1.0-standalone.jar /app/app.jar
#16 CACHED

#17 exporting to image
#17 exporting layers done
#17 exporting manifest sha256:02c47825ade7777719c2e229882c6c42e67bd952f14158d9fc20499ba68cc69c done
#17 exporting config sha256:96aba21c0992905db594d92818603e673fa31fbb701151a34caef40ff32f9949 done
#17 exporting attestation manifest sha256:e74f2d1ea656028b61262fc0961d0609e775beeffafe0dd87f45968d8ab9c985 0.0s done
#17 exporting manifest list sha256:3fbe66ba2e16703855298c2221c0c11c6b230c8d32676a5e7050d3784c977e28 0.0s done
#17 naming to docker.io/library/httparena-ring-http-exchange:latest
#17 naming to docker.io/library/httparena-ring-http-exchange:latest done
#17 unpacking to docker.io/library/httparena-ring-http-exchange:latest done
#17 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)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== ring-http-exchange / fortunes / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   36.11ms   26.00ms   62.00ms   178.70ms   769.30ms

  141661 requests in 5.00s, 141661 responses
  Throughput: 28.32K req/s
  Bandwidth:  71.76MB/s
  Status codes: 2xx=141661, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 141661 / 141661 responses (100.0%)
[info] CPU 2982.7% | Mem 5.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   29.11ms   26.60ms   48.30ms   77.00ms   108.20ms

  173672 requests in 5.00s, 173672 responses
  Throughput: 34.72K req/s
  Bandwidth:  87.32MB/s
  Status codes: 2xx=173672, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 173672 / 173672 responses (100.0%)
[info] CPU 1931.3% | Mem 5.1GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   20.87ms   15.00ms   50.90ms   66.00ms   83.50ms

  240595 requests in 5.00s, 240595 responses
  Throughput: 48.10K req/s
  Bandwidth:  121.23MB/s
  Status codes: 2xx=240595, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 240595 / 240595 responses (100.0%)
[info] CPU 2964.2% | Mem 5.1GiB

=== Best: 48119 req/s (CPU: 2964.2%, Mem: 5.1GiB) ===
[info] saved results/fortunes/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[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/fortunes-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: fortunes

Test Conn RPS CPU Mem Δ RPS Δ Mem
fortunes 1024 50,585 2896.6% 5.0GiB NEW NEW
Full log
[info] available CPUs: 128
[info] framework: ring-http-exchange (ring-http-exchange, Clojure)
[info] subscribed tests: baseline,limited-conn,json,json-comp,upload,short-lived,mixed,json-tls,api-4,api-16,async-db,sync-db,static,tcp-frag,fortunes,crud
[info] building image: httparena-ring-http-exchange
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 409B done
#1 DONE 0.1s

#2 [internal] load metadata for docker.io/library/clojure:temurin-26-lein-trixie
#2 ...

#3 [internal] load metadata for docker.io/library/eclipse-temurin:26-jre
#3 DONE 0.8s

#2 [internal] load metadata for docker.io/library/clojure:temurin-26-lein-trixie
#2 DONE 1.0s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.1s

#5 [internal] load build context
#5 DONE 0.0s

#6 [stage-1 1/4] FROM docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c
#6 resolve docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c
#6 resolve docker.io/library/eclipse-temurin:26-jre@sha256:ebb7f006e9e5b8a5267b5910eb907922b99c251d702755e3cf3d9e2a2270090c 0.2s done
#6 DONE 0.2s

#7 [builder 1/7] FROM docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1
#7 resolve docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1
#7 resolve docker.io/library/clojure:temurin-26-lein-trixie@sha256:26e6855f0e20f4674afee2faa58729b1bec779e77bd0726ee0527a15ce2372b1 0.2s done
#7 DONE 0.2s

#5 [internal] load build context
#5 transferring context: 526B 0.0s done
#5 DONE 0.1s

#8 [builder 2/7] WORKDIR /app
#8 CACHED

#9 [builder 5/7] RUN lein deps
#9 CACHED

#10 [builder 6/7] COPY src ./src
#10 CACHED

#11 [stage-1 2/4] RUN mkdir -p /data/static
#11 CACHED

#12 [builder 3/7] COPY project.clj ./
#12 CACHED

#13 [builder 7/7] RUN lein with-profile uberjar uberjar
#13 CACHED

#14 [stage-1 3/4] WORKDIR /app
#14 CACHED

#15 [builder 4/7] COPY resources ./resources
#15 CACHED

#16 [stage-1 4/4] COPY --from=builder /app/target/ring-0.1.0-standalone.jar /app/app.jar
#16 CACHED

#17 exporting to image
#17 exporting layers done
#17 exporting manifest sha256:02c47825ade7777719c2e229882c6c42e67bd952f14158d9fc20499ba68cc69c 0.0s done
#17 exporting config sha256:96aba21c0992905db594d92818603e673fa31fbb701151a34caef40ff32f9949 0.0s done
#17 exporting attestation manifest sha256:08957767f7aa56468ec79613dc3339ddfeb80ea43beeeef721fcad6ee7454b53
#17 exporting attestation manifest sha256:08957767f7aa56468ec79613dc3339ddfeb80ea43beeeef721fcad6ee7454b53 0.2s done
#17 exporting manifest list sha256:9121385095c3d2a56ee975d18b9c9b728205bea49fe6e543ed320f32765c7e6b
#17 exporting manifest list sha256:9121385095c3d2a56ee975d18b9c9b728205bea49fe6e543ed320f32765c7e6b 0.1s done
#17 naming to docker.io/library/httparena-ring-http-exchange:latest 0.0s done
#17 unpacking to docker.io/library/httparena-ring-http-exchange:latest
#17 unpacking to docker.io/library/httparena-ring-http-exchange:latest 0.0s done
#17 DONE 0.4s
[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)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== ring-http-exchange / fortunes / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   27.75ms   16.70ms   50.10ms   136.10ms   759.00ms

  183529 requests in 5.00s, 183529 responses
  Throughput: 36.69K req/s
  Bandwidth:  92.85MB/s
  Status codes: 2xx=183529, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 183529 / 183529 responses (100.0%)
[info] CPU 2887.3% | Mem 5.0GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   19.85ms   13.50ms   49.90ms   63.90ms   79.40ms

  252928 requests in 5.00s, 252928 responses
  Throughput: 50.57K req/s
  Bandwidth:  127.53MB/s
  Status codes: 2xx=252928, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 252927 / 252928 responses (100.0%)
[info] CPU 2896.6% | Mem 5.0GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   20.65ms   14.40ms   50.90ms   65.60ms   82.80ms

  243601 requests in 5.00s, 243601 responses
  Throughput: 48.70K req/s
  Bandwidth:  122.58MB/s
  Status codes: 2xx=243601, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 243600 / 243601 responses (100.0%)
[info] CPU 2696.9% | Mem 4.9GiB

=== Best: 50585 req/s (CPU: 2896.6%, Mem: 5.0GiB) ===
[info] saved results/fortunes/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[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/fortunes-1024.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@ruroru ruroru force-pushed the update-ring-http-exchange branch from 9183e1c to d7ae17f Compare May 9, 2026 13:34
@ruroru
Copy link
Copy Markdown
Contributor Author

ruroru commented May 9, 2026

/benchmark -f ring-http-exchange

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Benchmark Results

Framework: ring-http-exchange | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 833,312 6526.2% 8.1GiB -36.8% -35.7%
baseline 4096 867,760 6464.8% 13.2GiB -29.9% +1.5%
limited-conn 512 732,459 6150.4% 4.7GiB -16.5% -64.9%
limited-conn 4096 797,719 6253.7% 13.6GiB -10.9% +6.2%
json 4096 430,153 5942.4% 12.6GiB -7.9% -10.0%
json-comp 512 18,832 730.4% 844MiB +0.3% +5.2%
json-comp 4096 139,060 5235.8% 5.3GiB -1.6% -18.5%
json-comp 16384 216,389 6621.6% 14.9GiB -2.1% -0.7%
json-tls 4096 438,424 6581.3% 14.4GiB -4.8% +0.7%
upload 32 2,680 2204.4% 440MiB -1.3% +25.7%
upload 256 2,873 3506.9% 415MiB -0.9% +5.9%
api-4 256 30,464 405.1% 817MiB -3.3% +13.5%
api-16 1024 71,094 1739.4% 3.6GiB -7.6% +140.0%
static 1024 213,226 6502.2% 4.4GiB -9.5% -8.3%
static 4096 204,797 6337.0% 2.8GiB -9.1% -42.9%
static 6800 207,342 6307.7% 5.0GiB -8.0% +2.0%
async-db 1024 98,713 4755.4% 4.9GiB +26.8% +4.3%
crud 4096 221,811 5292.0% 12.5GiB -31.5% -2.3%
fortunes 1024 47,975 2785.2% 5.0GiB NEW NEW
Full log
=== ring-http-exchange / crud / 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:  200
  Templates: 20
  Expected:  200
  Duration:  15s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   22.03ms   25.80ms   30.80ms   97.00ms   653.90ms

  2779174 requests in 15.00s, 2777254 responses
  Throughput: 185.12K req/s
  Bandwidth:  65.87MB/s
  Status codes: 2xx=2777254, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 2777254 / 2777254 responses (100.0%)
  Reconnects: 11278
  Per-template: 99019,109408,122865,133212,155133,155418,155552,155200,154740,155637,154773,154462,155037,154784,155348,154849,140539,114371,98194,98713
  Per-template-ok: 99019,109408,122865,133212,155133,155418,155552,155200,154740,155637,154773,154462,155037,154784,155348,154849,140539,114371,98194,98713
[info] CPU 5179.7% | Mem 13.9GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.52ms   25.10ms   27.80ms   36.10ms   41.50ms

  3306156 requests in 15.00s, 3305836 responses
  Throughput: 220.35K req/s
  Bandwidth:  78.97MB/s
  Status codes: 2xx=3305836, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3305834 / 3305836 responses (100.0%)
  Reconnects: 14212
  Per-template: 115995,122367,136227,160200,164070,186103,185704,186087,185917,186433,186102,185833,185770,185771,185410,186373,175004,146469,124058,115941
  Per-template-ok: 115995,122367,136227,160200,164070,186103,185704,186087,185917,186433,186102,185833,185770,185771,185410,186373,175004,146469,124058,115941
[info] CPU 5253.3% | Mem 13.6GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   18.41ms   25.00ms   27.50ms   36.90ms   40.60ms

  3327208 requests in 15.00s, 3327172 responses
  Throughput: 221.77K req/s
  Bandwidth:  79.47MB/s
  Status codes: 2xx=3327172, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 3327170 / 3327172 responses (100.0%)
  Reconnects: 14289
  Per-template: 116812,122475,137202,160677,164392,186984,186353,187140,187002,188421,186767,187432,186231,186722,187257,187281,176329,148509,126512,116672
  Per-template-ok: 116812,122475,137202,160677,164392,186984,186353,187140,187002,188421,186767,187432,186231,186722,187257,187281,176329,148509,126512,116672
[info] CPU 5292.0% | Mem 12.5GiB

=== Best: 221811 req/s (CPU: 5292.0%, Mem: 12.5GiB) ===
[info] input BW: 19.04MB/s (avg template: 90 bytes)
[info] saved results/crud/4096/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange

==============================================
=== ring-http-exchange / fortunes / 1024c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   29.89ms   19.60ms   53.80ms   153.90ms   685.20ms

  170840 requests in 5.00s, 170840 responses
  Throughput: 34.15K req/s
  Bandwidth:  86.44MB/s
  Status codes: 2xx=170840, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 170840 / 170840 responses (100.0%)
[info] CPU 2870.2% | Mem 5.1GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.06ms   15.50ms   51.00ms   65.10ms   80.40ms

  239875 requests in 5.00s, 239875 responses
  Throughput: 47.96K req/s
  Bandwidth:  121.00MB/s
  Status codes: 2xx=239875, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 239874 / 239875 responses (100.0%)
[info] CPU 2785.2% | Mem 5.0GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   24.47ms   20.30ms   49.00ms   70.00ms   86.00ms

  205370 requests in 5.00s, 205370 responses
  Throughput: 41.06K req/s
  Bandwidth:  103.37MB/s
  Status codes: 2xx=205370, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 205370 / 205370 responses (100.0%)
[info] CPU 2441.4% | Mem 5.0GiB

=== Best: 47975 req/s (CPU: 2785.2%, Mem: 5.0GiB) ===
[info] saved results/fortunes/1024/ring-http-exchange.json
httparena-bench-ring-http-exchange
httparena-bench-ring-http-exchange
[info] skip: ring-http-exchange does not subscribe to baseline-h2
[info] skip: ring-http-exchange does not subscribe to static-h2
[info] skip: ring-http-exchange does not subscribe to baseline-h2c
[info] skip: ring-http-exchange does not subscribe to json-h2c
[info] skip: ring-http-exchange does not subscribe to baseline-h3
[info] skip: ring-http-exchange does not subscribe to static-h3
[info] skip: ring-http-exchange does not subscribe to gateway-64
[info] skip: ring-http-exchange does not subscribe to gateway-h3
[info] skip: ring-http-exchange does not subscribe to production-stack
[info] skip: ring-http-exchange does not subscribe to unary-grpc
[info] skip: ring-http-exchange does not subscribe to unary-grpc-tls
[info] skip: ring-http-exchange does not subscribe to stream-grpc
[info] skip: ring-http-exchange does not subscribe to stream-grpc-tls
[info] skip: ring-http-exchange 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/crud-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/fortunes-1024.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/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
httparena-redis
[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