Skip to content

Add Cardigan Java io_uring engine - #1095

Merged
MDA2AV merged 7 commits into
MDA2AV:mainfrom
phjeltman:cardigan-submission
Aug 9, 2026
Merged

Add Cardigan Java io_uring engine#1095
MDA2AV merged 7 commits into
MDA2AV:mainfrom
phjeltman:cardigan-submission

Conversation

@phjeltman

Copy link
Copy Markdown
Contributor

Description

First, thank you for picking up the benchmarking torch after TechEmpower.

This PR adds Cardigan, a Java HTTP engine built on io_uring, Panama FFI and virtual threads. The submission uses the published dev.cardigan:cardigan:0.1.0-alpha1 artifact fresh off Maven Central. It covers HTTP/1.1, HTTP/2 over TLS, h2c, JSON over TLS, and unary and server-streaming gRPC. The entries share one implementation and subscribe to non-overlapping profiles.

One caveat: validate.sh currently has no gRPC-specific readiness or endpoint validation, so it fails before exercising gRPC-only entries. I verified Cardigan's unary and server-streaming variants directly with ghz, over both cleartext and TLS. WTX encountered the same validator limitation in #812.


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.

@phjeltman phjeltman changed the title Cardigan: initial HttpArena submission Add Cardigan Java io_uring engine Aug 9, 2026
@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

/benchmark -f cardigan --save

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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

@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

gRPC tooling is currently broken on validation, and tbh ghz as a load generator is also quite odd, grpc stream tests are still wip

@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

/benchmark -f cardigan-h2 --save

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: cardigan | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 3,612,505 6362.6% 5.3GiB ~0% ~0%
baseline 4096 3,644,808 6400.4% 5.8GiB ~0% ~0%
pipelined 512 41,904,988 6383.8% 5.3GiB ~0% ~0%
pipelined 4096 39,349,212 6406.3% 5.8GiB ~0% ~0%
limited-conn 512 2,478,558 5626.4% 5.2GiB ~0% ~0%
limited-conn 4096 2,625,469 6020.7% 5.9GiB ~0% ~0%
Full log
[run 1/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    219us    164us    334us    796us   7.04ms

  11026998 requests in 5.00s, 11027032 responses
  Throughput: 2.20M req/s
  Bandwidth:  189.21MB/s
  Status codes: 2xx=11027032, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 11027032 / 11027032 responses (100.0%)
  Reconnects: 1102571
  Per-template: 3675799,3675584,3675649
  Per-template-ok: 3675799,3675584,3675649
[info] CPU 5785.3% | Mem 5.2GiB

[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    192us    163us    325us    638us   2.09ms

  12391290 requests in 5.00s, 12391282 responses
  Throughput: 2.48M req/s
  Bandwidth:  212.62MB/s
  Status codes: 2xx=12391282, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12391227 / 12391282 responses (100.0%)
  Reconnects: 1239108
  Per-template: 4130369,4130417,4130441
  Per-template-ok: 4130369,4130417,4130440
[info] CPU 5707.1% | 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    192us    164us    324us    628us   2.07ms

  12392785 requests in 5.00s, 12392793 responses
  Throughput: 2.48M req/s
  Bandwidth:  212.62MB/s
  Status codes: 2xx=12392793, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12392741 / 12392793 responses (100.0%)
  Reconnects: 1239275
  Per-template: 4130844,4130975,4130922
  Per-template-ok: 4130844,4130975,4130921
[info] CPU 5626.4% | Mem 5.2GiB

=== Best: 2478558 req/s (CPU: 5626.4%, Mem: 5.2GiB) ===
[info] input BW: 191.46MB/s (avg template: 81 bytes)
[info] saved results/limited-conn/512/cardigan.json
httparena-bench-cardigan
httparena-bench-cardigan

==============================================
=== cardigan / 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   1.94ms   1.43ms   2.88ms   8.78ms   60.00ms

  10083265 requests in 5.00s, 10083614 responses
  Throughput: 2.02M req/s
  Bandwidth:  173.03MB/s
  Status codes: 2xx=10083614, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 10083614 / 10083614 responses (100.0%)
  Reconnects: 1006760
  Per-template: 3360855,3361239,3361520
  Per-template-ok: 3360855,3361239,3361520
[info] CPU 6023.7% | Mem 5.9GiB

[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   1.43ms   1.35ms   1.71ms   2.50ms   5.57ms

  13128384 requests in 5.00s, 13127349 responses
  Throughput: 2.62M req/s
  Bandwidth:  225.27MB/s
  Status codes: 2xx=13127349, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 13127294 / 13127349 responses (100.0%)
  Reconnects: 1312390
  Per-template: 4375847,4375845,4375602
  Per-template-ok: 4375847,4375845,4375602
[info] CPU 6020.7% | 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   1.43ms   1.35ms   1.70ms   2.54ms   5.82ms

  13102881 requests in 5.00s, 13101922 responses
  Throughput: 2.62M req/s
  Bandwidth:  224.72MB/s
  Status codes: 2xx=13101922, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 13101882 / 13101922 responses (100.0%)
  Reconnects: 1310263
  Per-template: 4367646,4366962,4367272
  Per-template-ok: 4367646,4366962,4367271
[info] CPU 5814.5% | Mem 5.8GiB

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

@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

/benchmark -f cardigan-h2c --save

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: cardigan-h2 | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline-h2 256 14,527,331 2017.8% 5.6GiB NEW NEW
baseline-h2 1024 13,897,916 1767.2% 5.6GiB NEW NEW
static-h2 256 735,295 2915.3% 6.0GiB NEW NEW
static-h2 1024 710,171 2909.9% 7.0GiB NEW NEW
Full log
14
16Stopped all clients for thread #8
. Stopping all clients.
40. Stopping all clients.

finished in 5.02s, 585378.60 req/s, 8.91GB/s
requests: 2926893 total, 2935085 started, 2926893 done, 2926893 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 2926945 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 44.57GB (47856809036) total, 158.01MB (165681564) headers (space savings 30.21%), 44.35GB (47622630428) data
                     min         max         mean         sd        +/- sd
time for request:      108us    690.56ms     15.58ms     37.86ms    92.45%
time for connect:     5.10ms    568.86ms     92.89ms    144.29ms    84.38%
time to 1st byte:    85.30ms    618.39ms    440.66ms     94.50ms    77.73%
req/s           :    1345.66     4378.91     2286.39      449.45    72.66%
[info] CPU 4007.5% | Mem 6.0GiB

[run 2/3]
starting benchmark...
4.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2
51Main benchmark duration is started for thread #55.
50.
.
44. Stopping all clients.
62. Stopping all clients.

finished in 5.03s, 739697.00 req/s, 11.26GB/s
requests: 3698485 total, 3706677 started, 3698485 done, 3698485 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 3698536 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 56.32GB (60472252776) total, 199.66MB (209353631) headers (space savings 30.21%), 56.04GB (60176346904) data
                     min         max         mean         sd        +/- sd
time for request:      108us    192.15ms     10.92ms     19.44ms    82.82%
time for connect:     2.88ms     30.18ms     15.03ms      6.47ms    60.55%
time to 1st byte:     4.20ms     42.25ms     25.80ms      6.88ms    67.97%
req/s           :    2085.57     4403.81     2889.13      450.27    67.58%
[info] CPU 2915.3% | Mem 6.0GiB

[run 3/3]
starting benchmark...
.Main benchmark duration is started for thread #30.

59.Main benchmark duration is started for thread #17.

.
38.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2
12. Stopping all clients.Stopped all clients for thread #3

16

finished in 5.04s, 688885.00 req/s, 10.49GB/s
requests: 3444425 total, 3452617 started, 3444425 done, 3444425 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 3444466 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 52.45GB (56318230756) total, 185.94MB (194972739) headers (space savings 30.21%), 52.19GB (56042650996) data
                     min         max         mean         sd        +/- sd
time for request:      115us    215.05ms     12.12ms     20.43ms    79.53%
time for connect:     2.05ms     28.70ms     15.37ms      6.59ms    60.55%
time to 1st byte:    10.61ms     52.18ms     25.72ms      6.43ms    66.41%
req/s           :    1648.06     4468.41     2690.65      482.50    71.48%
[info] CPU 2781.7% | Mem 6.0GiB

=== Best: 735295 req/s (CPU: 2915.3%, Mem: 6.0GiB) ===
[info] saved results/static-h2/256/cardigan-h2.json
httparena-bench-cardigan-h2
httparena-bench-cardigan-h2

==============================================
=== cardigan-h2 / static-h2 / 1024c (tool=h2load) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
19.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2
33.
42.
61. Stopping all clients.

. Stopping all clients.

finished in 5.06s, 493057.20 req/s, 7.51GB/s
requests: 2465286 total, 2498054 started, 2465286 done, 2465286 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 2465323 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 37.54GB (40309378590) total, 133.13MB (139599171) headers (space savings 30.20%), 37.36GB (40112064240) data
                     min         max         mean         sd        +/- sd
time for request:      101us       1.79s     71.32ms    145.30ms    82.87%
time for connect:     3.06ms       1.20s    235.74ms    171.75ms    75.78%
time to 1st byte:    98.86ms       1.23s    652.84ms    168.42ms    85.55%
req/s           :     132.57     1818.94      481.41      219.92    79.39%
[info] CPU 3882.2% | Mem 6.7GiB

[run 2/3]
starting benchmark...
.
1961.Warm-up phase is over for thread #49.
42.




35.
20.
40.
40.

.
43.
43Main benchmark duration is started for thread #46.
14.
58.
30.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2

3615. Stopping all clients.. Stopping all clients.
. Stopping all clients.
52. Stopping all clients.
52

34. Stopping all clients.
59. Stopping all clients.

43Stopped all clients for thread #53
. Stopping all clients.

finished in 5.05s, 717264.80 req/s, 10.92GB/s
requests: 3586324 total, 3619092 started, 3586324 done, 3586324 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 3586365 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 54.61GB (58636420779) total, 193.64MB (203050064) headers (space savings 30.20%), 54.34GB (58349424262) data
                     min         max         mean         sd        +/- sd
time for request:      103us       1.19s     42.42ms     97.08ms    85.76%
time for connect:     3.88ms    123.09ms     57.45ms     33.41ms    56.84%
time to 1st byte:    27.99ms    348.54ms    123.50ms     35.44ms    77.93%
req/s           :     283.51     1375.86      700.32      183.84    68.36%
[info] CPU 2909.9% | Mem 7.0GiB

[run 3/3]
starting benchmark...


42.
.
.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2


18.
31.

finished in 5.05s, 588082.60 req/s, 8.96GB/s
requests: 2940413 total, 2973181 started, 2940413 done, 2940413 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 2940484 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 44.78GB (48078035679) total, 158.78MB (166493203) headers (space savings 30.20%), 44.56GB (47842708886) data
                     min         max         mean         sd        +/- sd
time for request:      127us       1.15s     53.56ms    102.55ms    78.49%
time for connect:     4.36ms    126.00ms     58.16ms     33.33ms    57.42%
time to 1st byte:    13.16ms    294.24ms    113.26ms     32.70ms    83.50%
req/s           :     210.94     2054.46      574.18      238.20    79.98%
[info] CPU 2661.1% | Mem 7.0GiB

=== Best: 710171 req/s (CPU: 2909.9%, Mem: 7.0GiB) ===
[info] saved results/static-h2/1024/cardigan-h2.json
httparena-bench-cardigan-h2
httparena-bench-cardigan-h2
[info] skip: cardigan-h2 does not subscribe to baseline-h2c
[info] skip: cardigan-h2 does not subscribe to json-h2c
[info] skip: cardigan-h2 does not subscribe to baseline-h3
[info] skip: cardigan-h2 does not subscribe to static-h3
[info] skip: cardigan-h2 does not subscribe to gateway-64
[info] skip: cardigan-h2 does not subscribe to gateway-h3
[info] skip: cardigan-h2 does not subscribe to production-stack
[info] skip: cardigan-h2 does not subscribe to unary-grpc
[info] skip: cardigan-h2 does not subscribe to unary-grpc-tls
[info] skip: cardigan-h2 does not subscribe to stream-grpc
[info] skip: cardigan-h2 does not subscribe to stream-grpc-tls
[info] skip: cardigan-h2 does not subscribe to echo-ws
[info] skip: cardigan-h2 does not subscribe to echo-ws-pipeline
[info] skip: cardigan-h2 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/cardigan.json - 4 new, 10 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: cardigan-h2c | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline-h2c 256 14,534,155 1487.5% 5.3GiB NEW NEW
baseline-h2c 1024 14,518,361 1516.9% 5.4GiB NEW NEW
baseline-h2c 4096 13,673,578 1308.0% 6.3GiB NEW NEW
Full log


17Main benchmark duration is started for thread #50.

.
.
52.
.Main benchmark duration is started for thread #33.

. Stopping all clients.
. Stopping all clients.
. Stopping all clients.

41
25
. Stopping all clients.

finished in 5.06s, 14692581.60 req/s, 518.45MB/s
requests: 73462908 total, 73565308 started, 73462908 done, 73462908 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 73462908 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.53GB (2718152172) total, 1.23GB (1322332344) headers (space savings 61.70%), 70.06MB (73462908) data
                     min         max         mean         sd        +/- sd
time for request:      161us     48.47ms      4.20ms      2.85ms    88.49%
time for connect:       17us      4.23ms       963us       649us    67.48%
time to 1st byte:     2.65ms     51.57ms     19.32ms      9.00ms    67.19%
req/s           :   13715.96    15563.53    14343.64      267.82    69.82%
[info] CPU 1516.9% | Mem 5.4GiB

[run 3/3]
starting benchmark...
.
Application protocol: h2c
23.Main benchmark duration is started for thread #53.


60Warm-up phase is over for thread #Main benchmark duration is started for thread #
8Main benchmark duration is started for thread #1.
.
.

58.
.
29.

17.
.
.
49Stopped all clients for thread #58
. Stopping all clients.
54Stopped all clients for thread #60
. Stopping all clients.
57Main benchmark duration is over for thread #37. Stopping all clients.

9. Stopping all clients.Main benchmark duration is over for thread #35. Stopping all clients.


12Stopped all clients for thread #42. Stopping all clients.



finished in 5.05s, 7218597.60 req/s, 254.72MB/s
requests: 36092988 total, 36195388 started, 36092988 done, 36092988 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 36092988 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 1.24GB (1335465132) total, 619.58MB (649673784) headers (space savings 61.70%), 34.42MB (36092988) data
                     min         max         mean         sd        +/- sd
time for request:       99us    204.92ms     27.06ms     31.59ms    83.24%
time for connect:       23us      2.49ms       902us       552us    63.28%
time to 1st byte:     4.35ms    196.99ms     89.89ms     44.59ms    62.79%
req/s           :     976.72    72596.08     7047.95    10641.43    91.50%
[info] CPU 6140.3% | Mem 5.4GiB

=== Best: 14518361 req/s (CPU: 1516.9%, Mem: 5.4GiB) ===
[info] saved results/baseline-h2c/1024/cardigan-h2c.json
httparena-bench-cardigan-h2c
httparena-bench-cardigan-h2c

==============================================
=== cardigan-h2c / baseline-h2c / 4096c (tool=h2load) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
starting benchmark...
41.
65Main benchmark duration is started for thread #32% of clients started.

.
43.
.
Application protocol: Warm-up phase is over for thread #h2c62
.
.Warm-up phase is over for thread #28.

.
53.
46.

.
27. Stopping all clients.
. Stopping all clients.Stopped all clients for thread #47

24. Stopping all clients.
34. Stopping all clients.Main benchmark duration is over for thread #
5. Stopping all clients.
. Stopping all clients.
4

. Stopping all clients.

finished in 5.10s, 1347786.60 req/s, 47.58MB/s
requests: 6738933 total, 7148533 started, 6738933 done, 6738933 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 6739107 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 237.89MB (249443523) total, 115.68MB (121303926) headers (space savings 61.70%), 6.43MB (6738933) data
                     min         max         mean         sd        +/- sd
time for request:    16.55ms       4.97s    373.53ms    295.87ms    83.62%
time for connect:       16us     17.73ms      7.23ms      4.96ms    53.34%
time to 1st byte:   172.11ms       1.22s    914.45ms    148.47ms    75.27%
req/s           :      83.95      953.84      328.90       98.84    89.99%
[info] CPU 6043.1% | Mem 6.1GiB

[run 2/3]
starting benchmark...

57.
50.
62Warm-up phase is over for thread #.
40Main benchmark duration is started for thread #62.
.
49Main benchmark duration is started for thread #10.
.
.
35.
6.
61.
2.
Application protocol: h2c
62

finished in 5.09s, 13919703.00 req/s, 491.19MB/s
requests: 69598515 total, 70008115 started, 69598515 done, 69598515 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 69598515 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.40GB (2575243359) total, 1.17GB (1252773270) headers (space savings 61.70%), 66.37MB (69598515) data
                     min         max         mean         sd        +/- sd
time for request:     1.29ms    260.95ms     18.27ms     10.72ms    87.24%
time for connect:       18us     18.32ms      5.69ms      3.80ms    57.42%
time to 1st byte:     7.47ms    283.37ms     56.74ms     35.17ms    85.35%
req/s           :    3175.33     3573.13     3392.63       49.01    73.71%
[info] CPU 1308.0% | Mem 6.3GiB

[run 3/3]
starting benchmark...
53Main benchmark duration is started for thread #.5.

.Warm-up phase is over for thread #Warm-up phase is over for thread #
2.22.


21.
progress: .65
9.

Application protocol: h2c
7.


finished in 5.09s, 1569320.80 req/s, 55.40MB/s
requests: 7846604 total, 8256204 started, 7846604 done, 7846604 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 7846975 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 276.98MB (290432669) total, 134.70MB (141245550) headers (space savings 61.70%), 7.48MB (7846604) data
                     min         max         mean         sd        +/- sd
time for request:     2.42ms       4.92s    263.50ms    104.68ms    75.65%
time for connect:       17us     18.72ms      6.14ms      4.65ms    59.57%
time to 1st byte:     7.41ms    773.79ms    379.93ms    139.71ms    75.93%
req/s           :     103.57      639.66      382.97       65.71    73.51%
[info] CPU 6275.5% | Mem 6.4GiB

=== Best: 13673578 req/s (CPU: 1308.0%, Mem: 6.3GiB) ===
[info] saved results/baseline-h2c/4096/cardigan-h2c.json
httparena-bench-cardigan-h2c
httparena-bench-cardigan-h2c
[info] skip: cardigan-h2c does not subscribe to json-h2c
[info] skip: cardigan-h2c does not subscribe to baseline-h3
[info] skip: cardigan-h2c does not subscribe to static-h3
[info] skip: cardigan-h2c does not subscribe to gateway-64
[info] skip: cardigan-h2c does not subscribe to gateway-h3
[info] skip: cardigan-h2c does not subscribe to production-stack
[info] skip: cardigan-h2c does not subscribe to unary-grpc
[info] skip: cardigan-h2c does not subscribe to unary-grpc-tls
[info] skip: cardigan-h2c does not subscribe to stream-grpc
[info] skip: cardigan-h2c does not subscribe to stream-grpc-tls
[info] skip: cardigan-h2c does not subscribe to echo-ws
[info] skip: cardigan-h2c does not subscribe to echo-ws-pipeline
[info] skip: cardigan-h2c 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/cardigan.json - 3 new, 13 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

/benchmark -f cardigan-json-tls --save

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: cardigan-json-tls | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
json-tls 4096 994,112 6454.2% 6.8GiB NEW NEW
Full log
[info] available CPUs: 128
[info] framework: cardigan-json-tls (Cardigan, Java)
[info] subscribed tests: json-tls
[info] building image: httparena-cardigan-json-tls
#0 building with "default" instance using docker driver

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

#2 [internal] load metadata for docker.io/library/maven:3.9-eclipse-temurin-26
#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/maven:3.9-eclipse-temurin-26
#2 DONE 0.8s

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

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

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

#7 [build 1/7] FROM docker.io/library/maven:3.9-eclipse-temurin-26@sha256:6206ae5e460fbc803743b53addc31c5caca04582cf6a99f0f91df29c54954b52
#7 resolve docker.io/library/maven:3.9-eclipse-temurin-26@sha256:6206ae5e460fbc803743b53addc31c5caca04582cf6a99f0f91df29c54954b52 0.1s done
#7 DONE 0.1s

#5 [internal] load build context
#5 transferring context: 60.23kB done
#5 DONE 0.0s

#8 [build 7/7] RUN mvn -q -DskipTests package dependency:copy-dependencies     -DincludeScope=runtime -DoutputDirectory=/deps
#8 CACHED

#9 [stage-1 2/5] RUN apt-get update     && apt-get install -y --no-install-recommends libssl3     && rm -rf /var/lib/apt/lists/*
#9 CACHED

#10 [build 3/7] COPY pom.xml ./
#10 CACHED

#11 [stage-1 3/5] WORKDIR /app
#11 CACHED

#12 [build 5/7] COPY LICENSE ./
#12 CACHED

#13 [build 2/7] WORKDIR /src
#13 CACHED

#14 [build 4/7] RUN mvn -q -DskipTests dependency:go-offline
#14 CACHED

#15 [build 6/7] COPY src ./src
#15 CACHED

#16 [stage-1 4/5] COPY --from=build /src/target/cardigan-httparena.jar ./cardigan-httparena.jar
#16 CACHED

#17 [stage-1 5/5] COPY --from=build /deps ./lib
#17 CACHED

#18 exporting to image
#18 exporting layers done
#18 exporting manifest sha256:066c27e25c73eb0342a662991a07043ca576a0dbb269b43ac2e287ec5e5020a2 0.0s done
#18 exporting config sha256:2be6250ad9eec27c5048095612807ab54a79769d69cb18ddc8323d5d4a2d220b 0.0s done
#18 exporting attestation manifest sha256:484a57605d6d6c490b67d76defddb654689227b594ca03799c6d778e2a5e91b3 0.0s done
#18 exporting manifest list sha256:94ce3c903a7eb7e1278042946c7a229c5c7d4a2d072a57d88a5d748566f74362 0.0s done
#18 naming to docker.io/library/httparena-cardigan-json-tls:latest done
#18 unpacking to docker.io/library/httparena-cardigan-json-tls:latest done
#18 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] skip: cardigan-json-tls does not subscribe to baseline
[info] skip: cardigan-json-tls does not subscribe to pipelined
[info] skip: cardigan-json-tls does not subscribe to limited-conn
[info] skip: cardigan-json-tls does not subscribe to json
[info] skip: cardigan-json-tls does not subscribe to json-comp

==============================================
=== cardigan-json-tls / json-tls / 4096c (tool=wrk) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
Running 5s test @ https://localhost:8081
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    10.90ms   45.42ms   1.01s    97.09%
    Req/Sec    13.04k     4.80k   22.94k    84.78%
  4188449 requests in 5.10s, 21.71GB read
Requests/sec: 822028.67
Transfer/sec:      4.26GB
[info] CPU 6116.8% | Mem 6.7GiB

[run 2/3]
Running 5s test @ https://localhost:8081
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.80ms   11.05ms 434.17ms   98.69%
    Req/Sec    15.58k     2.51k   29.08k    94.43%
  5065982 requests in 5.10s, 26.25GB read
Requests/sec: 994112.81
Transfer/sec:      5.15GB
[info] CPU 6454.2% | Mem 6.8GiB

[run 3/3]
Running 5s test @ https://localhost:8081
  64 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.50ms    2.52ms 140.96ms   93.81%
    Req/Sec    14.50k     1.87k   26.01k    94.93%
  4729568 requests in 5.10s, 24.51GB read
Requests/sec: 927302.09
Transfer/sec:      4.81GB
[info] CPU 6304.8% | Mem 6.8GiB

=== Best: 994112 req/s (CPU: 6454.2%, Mem: 6.8GiB) ===
[info] saved results/json-tls/4096/cardigan-json-tls.json
httparena-bench-cardigan-json-tls
httparena-bench-cardigan-json-tls
[info] skip: cardigan-json-tls does not subscribe to upload
[info] skip: cardigan-json-tls does not subscribe to api-4
[info] skip: cardigan-json-tls does not subscribe to api-16
[info] skip: cardigan-json-tls does not subscribe to static
[info] skip: cardigan-json-tls does not subscribe to static-tls
[info] skip: cardigan-json-tls does not subscribe to async-db
[info] skip: cardigan-json-tls does not subscribe to crud
[info] skip: cardigan-json-tls does not subscribe to fortunes
[info] skip: cardigan-json-tls does not subscribe to baseline-h2
[info] skip: cardigan-json-tls does not subscribe to static-h2
[info] skip: cardigan-json-tls does not subscribe to baseline-h2c
[info] skip: cardigan-json-tls does not subscribe to json-h2c
[info] skip: cardigan-json-tls does not subscribe to baseline-h3
[info] skip: cardigan-json-tls does not subscribe to static-h3
[info] skip: cardigan-json-tls does not subscribe to gateway-64
[info] skip: cardigan-json-tls does not subscribe to gateway-h3
[info] skip: cardigan-json-tls does not subscribe to production-stack
[info] skip: cardigan-json-tls does not subscribe to unary-grpc
[info] skip: cardigan-json-tls does not subscribe to unary-grpc-tls
[info] skip: cardigan-json-tls does not subscribe to stream-grpc
[info] skip: cardigan-json-tls does not subscribe to stream-grpc-tls
[info] skip: cardigan-json-tls does not subscribe to echo-ws
[info] skip: cardigan-json-tls does not subscribe to echo-ws-pipeline
[info] skip: cardigan-json-tls 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/cardigan.json - 1 new, 14 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

/benchmark -f cardigan-grpc --save

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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

@MDA2AV

MDA2AV commented Aug 9, 2026

Copy link
Copy Markdown
Owner

/benchmark -f cardigan-grpc-tls --save

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: cardigan-grpc | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
unary-grpc 256 5,953,600 3208.0% 5.9GiB NEW NEW
unary-grpc 1024 2,391,774 6426.5% 6.2GiB NEW NEW
stream-grpc 64 9,550,000 41.5% 4.9GiB NEW NEW
Full log
32. Stopping all clients.
21Stopped all clients for thread #7
. Stopping all clients.
50. Stopping all clients.
50
28. Stopping all clients.

finished in 5.06s, 2051579.20 req/s, 142.84MB/s
requests: 10257896 total, 10360296 started, 10257896 done, 10257896 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 10257896 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 714.19MB (748880429) total, 381.52MB (400057944) headers (space savings 40.00%), 68.48MB (71805272) data
                     min         max         mean         sd        +/- sd
time for request:      231us       3.12s     96.14ms    176.84ms    95.86%
time for connect:       18us      2.92ms      1.04ms       642us    62.50%
time to 1st byte:   246.47ms       3.09s    884.33ms    460.20ms    83.79%
req/s           :     320.76    23826.20     2003.24     3302.65    89.45%
[info] CPU 6208.3% | Mem 5.8GiB

[run 3/3]
starting benchmark...
Application protocol: h2c
62.
35.
63Warm-up phase is over for thread #.
38Main benchmark duration is started for thread #63.

46Warm-up phase is over for thread #.
16Warm-up phase is over for thread #.
19Warm-up phase is over for thread #.
31Main benchmark duration is started for thread #19.
.
40.


12. Stopping all clients.
57. Stopping all clients.
57
. Stopping all clients.
30

finished in 5.05s, 2415692.00 req/s, 168.19MB/s
requests: 12078460 total, 12180860 started, 12078460 done, 12078460 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 12078460 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 840.94MB (881788894) total, 449.24MB (471059940) headers (space savings 40.00%), 80.63MB (84549220) data
                     min         max         mean         sd        +/- sd
time for request:      202us    481.65ms     74.38ms     72.98ms    79.88%
time for connect:       19us      4.54ms      1.30ms       824us    63.18%
time to 1st byte:     8.26ms    485.46ms    214.37ms     98.89ms    67.38%
req/s           :     471.13    21127.64     2358.65     3481.15    89.75%
[info] CPU 6426.5% | Mem 6.2GiB

=== Best: 2391774 req/s (CPU: 6426.5%, Mem: 6.2GiB) ===
[info] saved results/unary-grpc/1024/cardigan-grpc.json
httparena-bench-cardigan-grpc
httparena-bench-cardigan-grpc
[info] skip: cardigan-grpc does not subscribe to unary-grpc-tls

==============================================
=== cardigan-grpc / stream-grpc / 64c (tool=ghz) ===
==============================================
[info] waiting for server...
[info] gRPC server ready
[info] ghz warm-up 2s

[run 1/3]

Summary:
  Count:	549108
  Total:	5.03 s
  Slowest:	218.96 ms
  Fastest:	19.72 ms
  Average:	0.14 ms
  Requests/sec:	109226.19

Response time histogram:
  19.715  [1]   |
  39.640  [135] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  59.564  [209] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  79.489  [168] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  99.414  [144] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  119.338 [80]  |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  139.263 [42]  |∎∎∎∎∎∎∎∎
  159.188 [22]  |∎∎∎∎
  179.112 [14]  |∎∎∎
  199.037 [2]   |
  218.962 [1]   |

Latency distribution:
  10 % in 29.47 ms 
  25 % in 48.04 ms 
  50 % in 67.46 ms 
  75 % in 92.63 ms 
  90 % in 119.29 ms 
  95 % in 135.87 ms 
  99 % in 170.78 ms 

Status code distribution:
  [OK]            818 responses      
  [Canceled]      105 responses      
  [Unavailable]   548185 responses   

Error distribution:
  [548185]   rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:8080: connect: connection refused"   
  [105]      rpc error: code = Canceled desc = grpc: the client connection is closing                                                                               
[info] CPU 148.5% | Mem 4.9GiB

[run 2/3]

Summary:
  Count:	9696
  Total:	5.05 s
  Slowest:	774.02 ms
  Fastest:	17.51 ms
  Average:	128.34 ms
  Requests/sec:	1919.94

Response time histogram:
  17.510  [1]    |
  93.161  [4306] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  168.812 [2453] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  244.462 [1538] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  320.113 [722]  |∎∎∎∎∎∎∎
  395.764 [262]  |∎∎
  471.414 [125]  |∎
  547.065 [50]   |
  622.715 [14]   |
  698.366 [5]    |
  774.017 [2]    |

Latency distribution:
  10 % in 30.41 ms 
  25 % in 55.94 ms 
  50 % in 101.28 ms 
  75 % in 183.29 ms 
  90 % in 263.32 ms 
  95 % in 317.72 ms 
  99 % in 445.95 ms 

Status code distribution:
  [OK]         9478 responses   
  [Canceled]   218 responses    

Error distribution:
  [218]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 90.5% | Mem 4.9GiB

[run 3/3]

Summary:
  Count:	9756
  Total:	5.07 s
  Slowest:	926.12 ms
  Fastest:	17.06 ms
  Average:	128.03 ms
  Requests/sec:	1922.83

Response time histogram:
  17.057  [1]    |
  107.963 [5439] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  198.869 [1939] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  289.775 [1350] |∎∎∎∎∎∎∎∎∎∎
  380.681 [484]  |∎∎∎∎
  471.587 [203]  |∎
  562.493 [80]   |∎
  653.400 [26]   |
  744.306 [21]   |
  835.212 [5]    |
  926.118 [2]    |

Latency distribution:
  10 % in 29.04 ms 
  25 % in 39.16 ms 
  50 % in 89.19 ms 
  75 % in 187.74 ms 
  90 % in 275.73 ms 
  95 % in 339.55 ms 
  99 % in 503.99 ms 

Status code distribution:
  [OK]         9550 responses   
  [Canceled]   206 responses    

Error distribution:
  [206]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 41.5% | Mem 4.9GiB

=== Best: 9550000 req/s (CPU: 41.5%, Mem: 4.9GiB) ===
[info] saved results/stream-grpc/64/cardigan-grpc.json
httparena-bench-cardigan-grpc
httparena-bench-cardigan-grpc
[info] skip: cardigan-grpc does not subscribe to stream-grpc-tls
[info] skip: cardigan-grpc does not subscribe to echo-ws
[info] skip: cardigan-grpc does not subscribe to echo-ws-pipeline
[info] skip: cardigan-grpc 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/cardigan.json - 3 new, 17 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: cardigan-grpc-tls | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
unary-grpc-tls 256 6,974,014 1689.6% 5.8GiB NEW NEW
unary-grpc-tls 1024 6,561,844 1878.5% 6.1GiB NEW NEW
stream-grpc-tls 64 9,697,000 63.6% 5.0GiB NEW NEW
Full log
20. Stopping all clients.

finished in 5.07s, 1158869.60 req/s, 80.69MB/s
requests: 5794348 total, 5896748 started, 5794348 done, 5794348 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 5794348 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 403.43MB (423025773) total, 215.51MB (225979572) headers (space savings 40.00%), 38.68MB (40560436) data
                     min         max         mean         sd        +/- sd
time for request:      412us    935.23ms    125.28ms    134.31ms    94.38%
time for connect:     4.60ms    763.08ms    205.51ms    237.40ms    82.91%
time to 1st byte:   316.42ms       1.07s    846.68ms     81.65ms    83.20%
req/s           :     394.26    12367.35     1131.48     1378.78    92.48%
[info] CPU 6163.6% | Mem 5.9GiB

[run 3/3]
starting benchmark...
63.
progress: Main benchmark duration is started for thread #30.
62% of clients started

75% of clients startedWarm-up phase is over for thread #1Main benchmark duration is started for thread #Warm-up phase is over for thread #Main benchmark duration is started for thread #4315.
.Warm-up phase is over for thread #
5844Main benchmark duration is started for thread #43.
59.

.Warm-up phase is over for thread #Main benchmark duration is started for thread #28
.33.
.
.


.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2
8. Stopping all clients.



finished in 5.06s, 6640586.40 req/s, 462.33MB/s
requests: 33202932 total, 33305332 started, 33202932 done, 33202932 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 33202932 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.26GB (2423949255) total, 1.21GB (1294914348) headers (space savings 40.00%), 221.65MB (232420524) data
                     min         max         mean         sd        +/- sd
time for request:      174us     83.97ms      8.40ms      4.34ms    92.44%
time for connect:     4.01ms    121.35ms     55.20ms     32.57ms    56.64%
time to 1st byte:     6.46ms    173.95ms    120.46ms     32.86ms    64.36%
req/s           :    6178.33     7092.59     6482.42      150.87    68.65%
[info] CPU 1878.5% | Mem 6.1GiB

=== Best: 6561844 req/s (CPU: 1878.5%, Mem: 6.1GiB) ===
[info] saved results/unary-grpc-tls/1024/cardigan-grpc-tls.json
httparena-bench-cardigan-grpc-tls
httparena-bench-cardigan-grpc-tls
[info] skip: cardigan-grpc-tls does not subscribe to stream-grpc

==============================================
=== cardigan-grpc-tls / stream-grpc-tls / 64c (tool=ghz) ===
==============================================
[info] waiting for server...
[info] gRPC server ready
[info] ghz warm-up 2s

[run 1/3]

Summary:
  Count:	559038
  Total:	5.02 s
  Slowest:	260.34 ms
  Fastest:	18.70 ms
  Average:	0.15 ms
  Requests/sec:	111263.99

Response time histogram:
  18.702  [1]   |
  42.866  [136] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  67.030  [217] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  91.193  [201] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  115.357 [143] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  139.520 [61]  |∎∎∎∎∎∎∎∎∎∎∎
  163.684 [40]  |∎∎∎∎∎∎∎
  187.847 [14]  |∎∎∎
  212.011 [8]   |∎
  236.175 [1]   |
  260.338 [2]   |

Latency distribution:
  10 % in 29.04 ms 
  25 % in 51.87 ms 
  50 % in 73.44 ms 
  75 % in 100.36 ms 
  90 % in 130.65 ms 
  95 % in 150.77 ms 
  99 % in 193.51 ms 

Status code distribution:
  [Unavailable]   558120 responses   
  [OK]            824 responses      
  [Canceled]      94 responses       

Error distribution:
  [558120]   rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:8443: connect: connection refused"   
  [94]       rpc error: code = Canceled desc = grpc: the client connection is closing                                                                               
[info] CPU 169.4% | Mem 4.9GiB

[run 2/3]

Summary:
  Count:	9816
  Total:	5.05 s
  Slowest:	782.18 ms
  Fastest:	16.31 ms
  Average:	127.74 ms
  Requests/sec:	1943.63

Response time histogram:
  16.310  [1]    |
  92.897  [4294] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  169.483 [2599] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  246.070 [1609] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  322.657 [643]  |∎∎∎∎∎∎
  399.243 [269]  |∎∎∎
  475.830 [118]  |∎
  552.416 [39]   |
  629.003 [19]   |
  705.590 [3]    |
  782.176 [1]    |

Latency distribution:
  10 % in 29.86 ms 
  25 % in 52.33 ms 
  50 % in 102.98 ms 
  75 % in 181.58 ms 
  90 % in 256.87 ms 
  95 % in 317.20 ms 
  99 % in 448.66 ms 

Status code distribution:
  [OK]         9595 responses   
  [Canceled]   221 responses    

Error distribution:
  [221]   rpc error: code = Canceled desc = grpc: the client connection is closing   
[info] CPU 108.3% | Mem 5.0GiB

[run 3/3]

Summary:
  Count:	9876
  Total:	5.06 s
  Slowest:	798.08 ms
  Fastest:	17.98 ms
  Average:	126.73 ms
  Requests/sec:	1951.65

Response time histogram:
  17.978  [1]    |
  95.988  [4823] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  173.998 [2242] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  252.008 [1520] |∎∎∎∎∎∎∎∎∎∎∎∎∎
  330.018 [655]  |∎∎∎∎∎
  408.028 [267]  |∎∎
  486.038 [103]  |∎
  564.048 [50]   |
  642.059 [21]   |
  720.069 [12]   |
  798.079 [3]    |

Latency distribution:
  10 % in 29.85 ms 
  25 % in 51.08 ms 
  50 % in 96.50 ms 
  75 % in 181.97 ms 
  90 % in 263.54 ms 
  95 % in 325.05 ms 
  99 % in 475.19 ms 

Status code distribution:
  [OK]            9697 responses   
  [Canceled]      178 responses    
  [Unavailable]   1 responses      

Error distribution:
  [178]   rpc error: code = Canceled desc = grpc: the client connection is closing                                                                     
  [1]     rpc error: code = Unavailable desc = error reading from server: read tcp 127.0.0.1:47988->127.0.0.1:8443: use of closed network connection   
[info] CPU 63.6% | Mem 5.0GiB

=== Best: 9697000 req/s (CPU: 63.6%, Mem: 5.0GiB) ===
[info] saved results/stream-grpc-tls/64/cardigan-grpc-tls.json
httparena-bench-cardigan-grpc-tls
httparena-bench-cardigan-grpc-tls
[info] skip: cardigan-grpc-tls does not subscribe to echo-ws
[info] skip: cardigan-grpc-tls does not subscribe to echo-ws-pipeline
[info] skip: cardigan-grpc-tls 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/cardigan.json - 3 new, 20 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

@MDA2AV
MDA2AV merged commit c036849 into MDA2AV:main Aug 9, 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