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.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥉 Bronze | Family composite | Composite · HTTP/1.1 | 3 of 37 |
| 🥉 Bronze | Test profile | Concurrency · Async Delay | 3 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.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 3 of 37 | 6279 |
Every result
Alpha Round, 14 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 4,307,987 | 950us | 1.25ms | 6128.8% | 641MiB |
| Connection | Pipelined | 4,096 | 43,693,484 | 1.50ms | 1.97ms | 6409.2% | 638MiB |
| Connection | Short-lived | 4,096 | 2,685,418 | 1.39ms | 2.14ms | 5518.8% | 763MiB |
| Concurrency | Async Delay | 32,000 | 2,734,750 | 11.60ms | 14.00ms | 5628.4% | 2.0GiB |
| Efficiency | Latency-10K | 1,024 | 9,979 | 70.6us | 101.0us | 20.9% | 570MiB |
| Efficiency | Latency-1M | 1,024 | 997,694 | 90.5us | 164.0us | 2145.0% | 571MiB |
| Efficiency | Latency-500K/8 | 1,024 | 498,915 | 546.2us | 3935.0us | 806.5% | 109MiB |
| Workload | JSON Comp | 4,096 | 2,862,233 | 906us | 2.87ms | 5909.5% | 741MiB |
| Workload | JSON Comp | 16,384 | 2,676,274 | 5.27ms | 13.00ms | 5488.5% | 990MiB |
| Workload | JSON TLS | 4,096 | 1,533,275 | 14.84ms | 680.54ms | 5249.2% | 969MiB |
| Workload | 8Gbit | 512 | 49,118 | 326.4us | 235.0us | 415.7% | 673MiB |
| Workload | Static TLS | 1,024 | 1,112,233 | 1.50ms | 176.58ms | 6305.1% | 694MiB |
| Database | Async DB | 1,024 | 317,554 | 1.21ms | 8.59ms | 3102.2% | 693MiB |
| Database | Fortunes | 1,024 | 176,058 | 4.33ms | 10.00ms | 6017.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.
| Entry | Composite | vs vanilla-io_uring | |
|---|---|---|---|
| vanilla-epoll | 5642 | -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