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 assets are preloaded into memory; 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). crud uses an in-memory cache-aside (X-Cache MISS/HIT, invalidated on update) — no Redis required.
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. 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 | 5 of 34 | 342 |
Every result
Alpha Round, 21 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 | 512 | 3,570,560 | 142us | 1.02ms | 6447.4% | 1.0GiB |
| Connection | Baseline | 4,096 | 4,260,437 | 961us | 6.59ms | 6285.6% | 1.2GiB |
| Connection | Pipelined | 512 | 40,813,667 | 200us | 3.14ms | 6622.4% | 1.0GiB |
| Connection | Pipelined | 4,096 | 43,316,035 | 1.51ms | 7.51ms | 6473.8% | 1.1GiB |
| Connection | Short-lived | 512 | 2,541,639 | 185us | 820us | 6072.5% | 1.1GiB |
| Connection | Short-lived | 4,096 | 2,624,809 | 1.42ms | 2.03ms | 6148.1% | 1.4GiB |
| Workload | JSON | 4,096 | 2,438,927 | 844us | 6.78ms | 6564.4% | 1.4GiB |
| Workload | JSON Comp | 512 | 2,137,942 | 116us | 687us | 6049.3% | 1.1GiB |
| Workload | JSON Comp | 4,096 | 2,869,933 | 979us | 7.40ms | 6324.1% | 1.5GiB |
| Workload | JSON Comp | 16,384 | 2,764,973 | 5.12ms | 17.20ms | 5908.4% | 1.9GiB |
| Workload | JSON TLS | 4,096 | 1,503,981 | 19.27ms | 983.47ms | 6128.1% | 1.4GiB |
| Workload | Upload | 32 | 2,673 | 11.93ms | 45.40ms | 1917.1% | 1.3GiB |
| Workload | Upload | 256 | 3,043 | 77.86ms | 293.50ms | 3463.3% | 1.4GiB |
| Workload | Static | 1,024 | 1,454,140 | 417.93us | 3.73ms | 5460.2% | 1.0GiB |
| Workload | Static | 4,096 | 1,360,862 | 1.56ms | 7.12ms | 5529.9% | 1.1GiB |
| Workload | Static | 6,800 | 1,237,066 | 2.84ms | 26.19ms | 5670.7% | 1.3GiB |
| Database | Async DB | 1,024 | 281,205 | 855us | 6.67ms | 3278.9% | 1.2GiB |
| Database | CRUD | 4,096 | 338,676 | 10.40ms | 79.60ms | 825.3% | 1.3GiB |
| Database | Fortunes | 1,024 | 155,330 | 5.15ms | 18.40ms | 6074.3% | 1.2GiB |
| Multi-endpoint | API-4 | 256 | 67,864 | 1.77ms | 17.90ms | 332.1% | 1.1GiB |
| Multi-endpoint | API-16 | 1,024 | 207,849 | 1.44ms | 20.70ms | 1151.0% | 1.3GiB |
How the benchmark is run · The machine · Add or fix an entry