Skip to content

feat(genhttp-11-kestrel): Enable limited ws - #1083

Merged
MDA2AV merged 2 commits into
MDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-11-kestrel-limited-ws
Aug 7, 2026
Merged

feat(genhttp-11-kestrel): Enable limited ws#1083
MDA2AV merged 2 commits into
MDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-11-kestrel-limited-ws

Conversation

@Kaliumhexacyanoferrat

Copy link
Copy Markdown
Collaborator

Description


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

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.

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.

@Kaliumhexacyanoferrat

Copy link
Copy Markdown
Collaborator Author

/benchmark -f genhttp-11-kestrel -t echo-ws-limited --save

1 similar comment
@MDA2AV

MDA2AV commented Aug 7, 2026

Copy link
Copy Markdown
Owner

/benchmark -f genhttp-11-kestrel -t echo-ws-limited --save

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp-11-kestrel | Test: echo-ws-limited

Test Conn RPS CPU Mem Δ RPS Δ Mem
echo-ws-limited 512 433,788 3446.9% 328MiB NEW NEW
echo-ws-limited 4096 434,620 3393.0% 258MiB NEW NEW
Full log
#14 CACHED

#15 [build 4/6] RUN dotnet restore
#15 CACHED

#16 [build 3/6] COPY genhttp.csproj ./
#16 CACHED

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

#18 exporting to image
#18 exporting layers done
#18 exporting manifest sha256:88656425edbbae1fba5e2f79dbda6096ebaf08214872752e5681f95284cfbe2c done
#18 exporting config sha256:81a52862fa222fb0868e4a6bfff497edd44571684513a0a90d5b37e4db428bc0 done
#18 exporting attestation manifest sha256:1ab303565cf06c951d75a8fddfae412e9b1fe5d4983203c9862b47438e0e7d68 0.0s done
#18 exporting manifest list sha256:64c2bc303ff997f53017fe68cabb18e396d209d7be990a00c1bf192efe95120c 0.0s done
#18 naming to docker.io/library/httparena-genhttp-11-kestrel:latest
#18 naming to docker.io/library/httparena-genhttp-11-kestrel:latest done
#18 unpacking to docker.io/library/httparena-genhttp-11-kestrel:latest 0.0s done
#18 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

==============================================
=== genhttp-11-kestrel / echo-ws-limited / 512c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     81us     67us     99us    192us   3.27ms

  1479477 frames sent in 5.00s, 1479447 frames received
  Throughput: 295.79K req/s
  Bandwidth:  7.62MB/s
  WS upgrades: 149196
  WS frames:   1479447
  Latency samples: 1479447 / 1479447 responses (100.0%)
  Reconnects: 147939
[info] CPU 3772.0% | Mem 307MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     72us     55us     91us    256us   3.54ms

  2161282 frames sent in 5.00s, 2161266 frames received
  Throughput: 432.10K req/s
  Bandwidth:  11.13MB/s
  WS upgrades: 220671
  WS frames:   2161266
  Latency samples: 2161263 / 2161266 responses (100.0%)
  Reconnects: 216122
[info] CPU 3422.4% | Mem 315MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     73us     55us     90us    287us   3.62ms

  2168934 frames sent in 5.00s, 2168944 frames received
  Throughput: 433.64K req/s
  Bandwidth:  11.17MB/s
  WS upgrades: 221124
  WS frames:   2168944
  Latency samples: 2168927 / 2168944 responses (100.0%)
  Reconnects: 216904
[info] CPU 3446.9% | Mem 328MiB

=== Best: 433788 req/s (CPU: 3446.9%, Mem: 328MiB) ===
[info] saved results/echo-ws-limited/512/genhttp-11-kestrel.json
httparena-bench-genhttp-11-kestrel
httparena-bench-genhttp-11-kestrel

==============================================
=== genhttp-11-kestrel / echo-ws-limited / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     89us     71us    103us    293us   3.20ms

  1523078 frames sent in 5.00s, 1523246 frames received
  Throughput: 304.55K req/s
  Bandwidth:  7.84MB/s
  WS upgrades: 152757
  WS frames:   1523246
  Latency samples: 1523246 / 1523246 responses (100.0%)
  Reconnects: 152428
[info] CPU 3709.4% | Mem 242MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     71us     54us     89us    261us   3.35ms

  2162496 frames sent in 5.00s, 2162482 frames received
  Throughput: 432.35K req/s
  Bandwidth:  11.13MB/s
  WS upgrades: 217862
  WS frames:   2162482
  Latency samples: 2162472 / 2162482 responses (100.0%)
  Reconnects: 216249
[info] CPU 3410.7% | Mem 256MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency     69us     54us     85us    228us   3.38ms

  2173015 frames sent in 5.00s, 2173100 frames received
  Throughput: 434.46K req/s
  Bandwidth:  11.19MB/s
  WS upgrades: 218686
  WS frames:   2173100
  Latency samples: 2173097 / 2173100 responses (100.0%)
  Reconnects: 217385
[info] CPU 3393.0% | Mem 258MiB

=== Best: 434620 req/s (CPU: 3393.0%, Mem: 258MiB) ===
[info] saved results/echo-ws-limited/4096/genhttp-11-kestrel.json
httparena-bench-genhttp-11-kestrel
httparena-bench-genhttp-11-kestrel
[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/genhttp-11-kestrel.json - 2 new, 34 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

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