HttpArena
Frameworks

vanilla-h2c

Engine · V · engine: epoll

HTTP/2 cleartext (h2c, prior-knowledge) on vanilla's conn-mode seam: one epoll engine drives the RFC 9113 state machine behind a ConnHandler. The client's PRI * HTTP/2.0 preface parses as an ordinary request; the HTTP handler flips the connection over (core.queue_takeover), appends the server SETTINGS preface, and every later burst is fed to the http2 machine instead of the HTTP/1.1 parser. The http2 module is a self-contained RFC 9113/7541 codec: HPACK (static + dynamic table, canonical Huffman decode, decoded-block ceiling), frame codec, and a stream state machine with send-side flow control, hardened against a live h2spec CI gate. Requests surface only when COMPLETE (END_STREAM); responses are HPACK-encoded HEADERS + DATA. The :8082 listener is h2c-only — a plain HTTP/1.1 request is refused 505, never a 200, so the benchmark cannot silently measure h1 throughput. /json reuses the vanilla /json shape (same dataset, precomputed per-item prefixes, total = price*quantity*m). unary-grpc runs on the same machine on :8080: GetSum decodes the length-prefixed SumRequest (a protobuf varint loop that skips unknown fields), answers HEADERS + the SumReply as DATA without END_STREAM, then grpc-status 0 as trailers, which wait behind any DATA parked on flow control (enghitalo/vanilla#174). Each connection reuses its request list and buffers; the gRPC header blocks are encoded once. Multi-threaded, SO_REUSEPORT, lock-free, -gc none. Pinned V 0.5.2 (prebuilt from source).

Achievements

🥇 2 Gold. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.

MedalAwardFieldRank
🥇 GoldTest profileHTTP/2 · Baseline (h2c)1 of 11
🥇 GoldTest profilegRPC · Unary1 of 3

Composite rank

Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.

FamilyRankComposite
HTTP/25 of 141000
gRPC3 of 31000

Every result

Alpha Round, 7 runs. Requests per second is the best of three; latency, CPU and memory come from that run.

CategoryProfileConnsReq/secAvgp99CPUMemory
HTTP/2Baseline (h2c)25615,749,463840us20.51ms2121.9%118MiB
HTTP/2Baseline (h2c)1,02415,460,2564.05ms111.80ms2476.8%206MiB
HTTP/2Baseline (h2c)4,09612,653,65432.35ms533.31ms2422.0%1.3GiB
HTTP/2JSON (h2c)1,0244,670,5555.33ms61.19ms6294.9%541MiB
HTTP/2JSON (h2c)4,0963,807,15935.12ms314.59ms6030.8%1.9GiB
gRPCUnary2567,323,2732.08ms21.85ms1380.6%165MiB
gRPCUnary1,0247,092,1898.55ms121.70ms1436.3%224MiB

Compare vanilla-h2c with any V entry · Compare vanilla-h2c with any entry, in any language · Every V entry, ranked

Results updated · How the benchmark is run · The machine · Add or fix an entry