Skip to content

frameworks/httpbeast: add benchmark implementation - #1175

Closed
nigrosimone wants to merge 4 commits into
MDA2AV:mainfrom
nigrosimone:add-httpbeast
Closed

frameworks/httpbeast: add benchmark implementation#1175
nigrosimone wants to merge 4 commits into
MDA2AV:mainfrom
nigrosimone:add-httpbeast

Conversation

@nigrosimone

Copy link
Copy Markdown
Contributor

Adds HttpBeast, and with it Nim, which is not on the board at all.

mode is tuned: HttpBeast has no response compression, so json-comp gzips by hand.

Six profiles: baseline, pipelined, limited-conn, json, json-comp, upload.

Verified locally: docker build, then the six profiles replayed against this repo's own data/dataset.json, byte identical to express and fastify for the same requests.

Written with Claude Opus 5.

@nigrosimone

Copy link
Copy Markdown
Contributor Author

/benchmark --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 --save cannot start: main has diverged and cannot be auto-merged into this branch. Please merge or rebase main manually, push, and re-run /benchmark --save.

@nigrosimone

Copy link
Copy Markdown
Contributor Author

Merged main into the branch, validate is green again. /benchmark --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: httpbeast | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 2,735,777 6668.0% 65MiB ~0% ~0%
baseline 4096 2,919,577 6406.2% 212MiB ~0% ~0%
pipelined 512 17,807,875 6689.5% 61MiB ~0% ~0%
pipelined 4096 17,995,417 6576.3% 291MiB ~0% ~0%
limited-conn 512 2,077,206 6256.0% 99MiB ~0% ~0%
limited-conn 4096 2,384,196 6260.2% 296MiB ~0% ~0%
json 4096 1,487,014 6708.2% 302MiB ~0% ~0%
json-comp 512 413,830 6505.7% 158MiB ~0% ~0%
json-comp 4096 418,924 6627.7% 349MiB ~0% ~0%
json-comp 16384 409,192 6643.7% 627MiB ~0% ~0%
upload 32 215 2524.6% 12.4GiB ~0% ~0%
upload 256 337 6899.6% 16.4GiB ~0% ~0%
Full log

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   148.94ms   136.50ms   322.40ms   722.20ms   985.60ms

  1063 requests in 5.00s, 1063 responses
  Throughput: 212 req/s
  Bandwidth:  26.42KB/s
  Status codes: 2xx=1063, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1063 / 1063 responses (100.0%)
  Reconnects: 207
  Per-template: 233,281,284,265
  Per-template-ok: 233,281,284,265
[info] CPU 2487.4% | Mem 7.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   149.00ms   136.60ms   308.70ms   702.30ms    1.07s

  1067 requests in 5.00s, 1067 responses
  Throughput: 213 req/s
  Bandwidth:  26.52KB/s
  Status codes: 2xx=1067, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1067 / 1067 responses (100.0%)
  Reconnects: 204
  Per-template: 230,277,293,267
  Per-template-ok: 230,277,293,267
[info] CPU 2560.5% | Mem 10.2GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   145.37ms   136.40ms   292.90ms   605.60ms    1.20s

  1078 requests in 5.00s, 1078 responses
  Throughput: 215 req/s
  Bandwidth:  26.79KB/s
  Status codes: 2xx=1078, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1078 / 1078 responses (100.0%)
  Reconnects: 210
  Per-template: 232,282,295,269
  Per-template-ok: 232,282,295,269
[info] CPU 2524.6% | Mem 12.4GiB

=== Best: 215 req/s (CPU: 2524.6%, Mem: 12.4GiB) ===
[info] input BW: 1.71GB/s (avg template: 8516680 bytes)
[info] saved results/upload/32/httpbeast.json
httparena-bench-httpbeast
httparena-bench-httpbeast

==============================================
=== httpbeast / upload / 256c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   655.89ms   498.20ms    1.47s    3.91s    4.91s

  1600 requests in 5.00s, 1600 responses
  Throughput: 319 req/s
  Bandwidth:  39.76KB/s
  Status codes: 2xx=1600, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1600 / 1600 responses (100.0%)
  Reconnects: 258
  Per-template: 325,469,471,335
  Per-template-ok: 325,469,471,335
[info] CPU 7028.6% | Mem 11.7GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   651.11ms   469.20ms    1.44s    4.01s    5.00s

  1594 requests in 5.00s, 1594 responses
  Throughput: 318 req/s
  Bandwidth:  39.62KB/s
  Status codes: 2xx=1594, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1594 / 1594 responses (100.0%)
  Latency overflow (>5s): 2
  Reconnects: 258
  Per-template: 301,459,480,354
  Per-template-ok: 301,459,480,354
[info] CPU 7219.6% | Mem 14.3GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   641.39ms   463.50ms    1.49s    3.72s    4.42s

  1686 requests in 5.00s, 1686 responses
  Throughput: 337 req/s
  Bandwidth:  41.90KB/s
  Status codes: 2xx=1686, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 1686 / 1686 responses (100.0%)
  Reconnects: 273
  Per-template: 331,513,495,347
  Per-template-ok: 331,513,495,347
[info] CPU 6899.6% | Mem 16.4GiB

=== Best: 337 req/s (CPU: 6899.6%, Mem: 16.4GiB) ===
[info] input BW: 2.67GB/s (avg template: 8516680 bytes)
[info] saved results/upload/256/httpbeast.json
httparena-bench-httpbeast
httparena-bench-httpbeast
[info] skip: httpbeast does not subscribe to api-4
[info] skip: httpbeast does not subscribe to api-16
[info] skip: httpbeast does not subscribe to static
[info] skip: httpbeast does not subscribe to static-tls
[info] skip: httpbeast does not subscribe to async-db
[info] skip: httpbeast does not subscribe to crud
[info] skip: httpbeast does not subscribe to fortunes
[info] skip: httpbeast does not subscribe to baseline-h2
[info] skip: httpbeast does not subscribe to static-h2
[info] skip: httpbeast does not subscribe to baseline-h2c
[info] skip: httpbeast does not subscribe to json-h2c
[info] skip: httpbeast does not subscribe to baseline-h3
[info] skip: httpbeast does not subscribe to static-h3
[info] skip: httpbeast does not subscribe to gateway-64
[info] skip: httpbeast does not subscribe to gateway-h3
[info] skip: httpbeast does not subscribe to production-stack
[info] skip: httpbeast does not subscribe to unary-grpc
[info] skip: httpbeast does not subscribe to unary-grpc-tls
[info] skip: httpbeast does not subscribe to stream-grpc
[info] skip: httpbeast does not subscribe to stream-grpc-tls
[info] skip: httpbeast does not subscribe to echo-ws
[info] skip: httpbeast does not subscribe to echo-ws-pipeline
[info] skip: httpbeast does not subscribe to echo-ws-limited
[info] rebuilding site/data/*.json
[purged stale] zix-grpc.json (zix-grpc)
[purged stale] zix-ws.json (zix-ws)
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/results/httpbeast.json - 12 new, 12 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 16, 2026

Copy link
Copy Markdown
Owner

Just one note here, httpbeast seems to be an abandoned project (last commit 3 years ago), did they move from github or something?

@nigrosimone

Copy link
Copy Markdown
Contributor Author

I don't know 🥲

MDA2AV
MDA2AV previously approved these changes Aug 16, 2026
@@ -0,0 +1,73 @@
diff --git a/src/httpbeast.nim b/src/httpbeast.nim

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

xD We can't merge this, merge this patch on the main repo

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