Benchmarks

2026-10-06 — HTTP/3 evaluation (Docker Desktop / WSL2)

Same harness, host and caveats as the other reports (±15–20 % run-to-run noise). scb-webd built with --features http3; oha 1.16 built with --features http3; Caddy 2.6 (Debian bookworm) with protocols h1 h2 h3; nginx in bookworm has no QUIC. 64 connections, 10 s, 13-byte static file over TLS.

First run — a defect found

server  scenario            rps   p50_ms  p95_ms  p99_ms  peak_rss_mib
scb     h3-static-small   31697     1.54    2.45    3.18          1126

Peak memory grew to 1.1 GiB in 10 s: the per-connection JoinSet kept every completed request task until the connection closed. Fixed by reaping finished tasks in the accept loop (crates/scb-http/src/h3.rs).

After the fix

server  scenario               rps   p50_ms  p95_ms  p99_ms  peak_rss_mib
scb     tls-h2-static-small  52952     1.17    2.02    2.51            19
scb     h3-static-small      29939     1.59    3.00    4.64            25
caddy   tls-h2-static-small  25506     1.99    6.43    9.81            50
caddy   h3-static-small       5025     2.04    6.50    9.97            57
  • scb HTTP/3 ≈ 57 % of scb HTTP/2 (QUIC runs in user space with per-packet crypto; no GSO/GRO tuning yet) and ≈ 6× Caddy HTTP/3.
  • Memory flat: a 4-minute soak with HTTP/3 among ten concurrent scenarios passed (5.8 M requests, 0 errors, RSS 29.1 → 29.4 MiB; bench/soak.sh now includes h3).

Verdict

HTTP/3 stays an opt-in build feature (ADR-0019): functionally complete for request/response traffic and safe on memory, but built on h3 0.0.x and without extended CONNECT, 0-RTT or UDP offload tuning.