Skip to content

[C#] GenHTTP 11: Update to preview 11#764

Merged
MDA2AV merged 2 commits into
MDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-11-preview-11
May 29, 2026
Merged

[C#] GenHTTP 11: Update to preview 11#764
MDA2AV merged 2 commits into
MDA2AV:mainfrom
Kaliumhexacyanoferrat:genhttp-11-preview-11

Conversation

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator

Description

Use new precompressed static file handler and optimize JSON generation (hopefully).


PR Commands — comment on this PR to trigger (requires collaborator approval):

Command Description
/benchmark -f <framework> Run all benchmark tests
/benchmark -f <framework> -t <test> Run a specific test
/benchmark -f <framework> --save Run and save results (updates leaderboard on merge)

Always specify -f <framework>. Results are automatically compared against the current leaderboard.


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 --save

@github-actions
Copy link
Copy Markdown
Contributor

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

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: genhttp-11 | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,477,601 5558.0% 242MiB -0.6% +11.0%
baseline 4096 1,456,237 5863.8% 500MiB +1.9% +11.6%
pipelined 512 16,853,600 6270.8% 77MiB +108.8% -44.6%
pipelined 4096 16,077,612 6051.1% 230MiB +97.4% -41.6%
limited-conn 512 985,720 5826.2% 204MiB +1.0% +7.9%
limited-conn 4096 933,128 5760.5% 348MiB -1.0% -5.9%
json 4096 760,780 5979.3% 504MiB +12.2% -11.6%
json-comp 512 423,169 5611.9% 240MiB +127.5% +0.8%
json-comp 4096 429,345 6023.2% 547MiB +104.4% -6.8%
json-comp 16384 419,446 5964.6% 1.0GiB +95.7% +15.4%
json-tls 4096 616,788 6032.2% 817MiB +17.8% -15.3%
upload 32 2,676 2634.8% 124MiB -0.3% +30.5%
upload 256 3,007 3783.2% 199MiB -0.7% +25.2%
api-4 256 48,671 386.2% 145MiB +5.9% -1.4%
api-16 1024 134,218 1536.3% 270MiB +9.3% -4.3%
static 1024 502,966 5753.1% 451MiB +481.9% -80.0%
static 4096 386,953 5617.4% 2.3GiB +297.0% +9.5%
static 6800 354,517 5368.8% 3.4GiB +270.8% +3.0%
async-db 1024 190,146 3567.3% 346MiB +10.8% +4.8%
crud 4096 453,772 4029.0% 668MiB ~0% +6.7%
echo-ws 512 2,088,245 6076.4% 188MiB +0.8% -4.1%
echo-ws 4096 2,077,313 6214.7% 679MiB +2.1% -3.6%
echo-ws 16384 1,841,848 6028.1% 1.6GiB -1.8% +6.7%
echo-ws-pipeline 512 4,010,686 6211.9% 375MiB +1.1% +63.0%
echo-ws-pipeline 4096 3,664,667 6106.2% 818MiB -0.7% +54.3%
echo-ws-pipeline 16384 3,615,216 5887.5% 1.6GiB -2.0% +68.2%
Full log
  19481924 frames sent in 5.00s, 19479873 frames received
  Throughput: 3.89M req/s
  Bandwidth:  26.01MB/s
  WS upgrades: 313
  WS frames:   19479873
  Latency samples: 19479779 / 19479873 responses (100.0%)
[info] CPU 6086.0% | Mem 384MiB

=== Best: 4010686 req/s (CPU: 6211.9%, Mem: 375MiB) ===
[info] saved results/echo-ws-pipeline/512/genhttp-11.json
httparena-bench-genhttp-11
httparena-bench-genhttp-11

==============================================
=== genhttp-11 / echo-ws-pipeline / 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:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    721us    267us    367us   1.27ms   88.50ms

  17007399 frames sent in 5.00s, 16975013 frames received
  Throughput: 3.39M req/s
  Bandwidth:  22.73MB/s
  WS upgrades: 2252
  WS frames:   16975013
  Latency samples: 16975013 / 16975013 responses (100.0%)
[info] CPU 5944.2% | Mem 434MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    643us    258us    309us   3.27ms   15.20ms

  18371425 frames sent in 5.00s, 18323335 frames received
  Throughput: 3.66M req/s
  Bandwidth:  24.57MB/s
  WS upgrades: 3559
  WS frames:   18323335
  Latency samples: 18323301 / 18323335 responses (100.0%)
[info] CPU 6106.2% | Mem 818MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.96ms    260us    314us   3.22ms   135.00ms

  18277879 frames sent in 5.00s, 18247041 frames received
  Throughput: 3.65M req/s
  Bandwidth:  24.42MB/s
  WS upgrades: 2439
  WS frames:   18247041
  Latency samples: 18246987 / 18247041 responses (100.0%)
[info] CPU 5984.5% | Mem 954MiB

=== Best: 3664667 req/s (CPU: 6106.2%, Mem: 818MiB) ===
[info] saved results/echo-ws-pipeline/4096/genhttp-11.json
httparena-bench-genhttp-11
httparena-bench-genhttp-11

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

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.31ms    279us    417us   3.27ms   433.50ms

  15672898 frames sent in 5.00s, 15630353 frames received
  Throughput: 3.12M req/s
  Bandwidth:  20.96MB/s
  WS upgrades: 2660
  WS frames:   15630353
  Latency samples: 15630353 / 15630353 responses (100.0%)
[info] CPU 5702.3% | Mem 508MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.28ms    261us    316us   3.27ms    1.66s

  18156861 frames sent in 5.00s, 18052640 frames received
  Throughput: 3.61M req/s
  Bandwidth:  24.33MB/s
  WS upgrades: 6515
  WS frames:   18052640
  Latency samples: 18052640 / 18052640 responses (100.0%)
[info] CPU 6069.4% | Mem 849MiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.27ms    260us    312us   2.33ms   208.40ms

  18164474 frames sent in 5.00s, 18076081 frames received
  Throughput: 3.61M req/s
  Bandwidth:  24.33MB/s
  WS upgrades: 5526
  WS frames:   18076081
  Latency samples: 18076081 / 18076081 responses (100.0%)
[info] CPU 5887.5% | Mem 1.6GiB

=== Best: 3615216 req/s (CPU: 5887.5%, Mem: 1.6GiB) ===
[info] saved results/echo-ws-pipeline/16384/genhttp-11.json
httparena-bench-genhttp-11
httparena-bench-genhttp-11
[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/echo-ws-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-pipeline-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-pipeline-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/echo-ws-pipeline-512.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/pipelined-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/pipelined-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

@Kaliumhexacyanoferrat Kaliumhexacyanoferrat marked this pull request as ready for review May 29, 2026 11:55
@MDA2AV MDA2AV merged commit 6ba19a2 into MDA2AV:main May 29, 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