HttpArena
Frameworks

vanilla-io_uring

Engine · V · engine: io_uring

vanilla is a minimalist, high-performance HTTP server written in V: multi-threaded, non-blocking io_uring I/O, lock-free, copy-free, SO_REUSEPORT. This entry is the vanilla-epoll entry's async handler verbatim, running on the io_uring async runtime (enghitalo/vanilla#99): DB queries park on the PG socket via a oneshot IORING_OP_POLL_ADD and resume on the ring — never blocking the worker. JSON is built in a single allocation with precomputed prefixes (no per-request reflection); json-comp gzips on Accept-Encoding; json-tls serves /json over HTTP/1.1 + TLS 1.3 on :8081 via the lib's epoll backend (the io_uring backend has no TLS) with kTLS record offload where present; static-tls serves the 20 /static files on :8081 through vanilla's static_assets (br/gzip negotiation; snapshots re-checked against the disk, so a replaced file is served at once), sending bodies of 16 KiB or more with sendfile(2) over kTLS; fortunes renders the DB rows + a runtime row with HTML escaping; async-db/crud/fortunes use the native async pg_async driver with per-worker pipelined pools. Built with the default GC on pinned V master (built from source). async parks each /delay/{ms} on a one-shot timerfd from a per-worker free-list and answers only once it reports an expiration; 8gbit echoes the POST body on the :8081 TLS listener (Content-Length or chunked, per-worker dechunk buffer); production-stack's /api cache-aside (X-Cache MISS/HIT, 1 s items / 30 s users TTL, invalidated on write) runs in-process — no Redis required. One worker per CPU of the container's cpuset.

Achievements

🥉 2 Bronze. 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
🥉 BronzeFamily compositeComposite · HTTP/1.13 of 37
🥉 BronzeTest profileConcurrency · Async Delay3 of 18

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/1.13 of 376279

Every result

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

CategoryProfileConnsReq/secAvgp99CPUMemory
ConnectionBaseline4,0964,307,987950us1.25ms6128.8%641MiB
ConnectionPipelined4,09643,693,4841.50ms1.97ms6409.2%638MiB
ConnectionShort-lived4,0962,685,4181.39ms2.14ms5518.8%763MiB
ConcurrencyAsync Delay32,0002,734,75011.60ms14.00ms5628.4%2.0GiB
EfficiencyLatency-10K1,0249,97970.6us101.0us20.9%570MiB
EfficiencyLatency-1M1,024997,69490.5us164.0us2145.0%571MiB
EfficiencyLatency-500K/81,024498,915546.2us3935.0us806.5%109MiB
WorkloadJSON Comp4,0962,862,233906us2.87ms5909.5%741MiB
WorkloadJSON Comp16,3842,676,2745.27ms13.00ms5488.5%990MiB
WorkloadJSON TLS4,0961,533,27514.84ms680.54ms5249.2%969MiB
Workload8Gbit51249,118326.4us235.0us415.7%673MiB
WorkloadStatic TLS1,0241,112,2331.50ms176.58ms6305.1%694MiB
DatabaseAsync DB1,024317,5541.21ms8.59ms3102.2%693MiB
DatabaseFortunes1,024176,0584.33ms10.00ms6017.9%782MiB

Compared with

The V entries around vanilla-io_uring on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.

EntryCompositevs vanilla-io_uring
vanilla-epoll5642-10%head to head

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

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