vanilla-epoll
Engine · V · engine: epoll
vanilla is a minimalist, high-performance HTTP server written in V: multi-threaded, non-blocking epoll I/O, lock-free, copy-free, SO_REUSEPORT. Handlers are pure (request)->[]u8 returning raw response bytes. JSON is built in a single allocation with precomputed prefixes (no per-request reflection); json-comp gzips on Accept-Encoding; json-tls terminates TLS 1.3 (Mbed TLS 4) on :8081 with ALPN http/1.1, reusing the same allocation-free /json serializer; static assets are preloaded into memory; fortunes renders the DB rows + a runtime row with HTML escaping; async-db uses the stdlib db.pg ConnectionPool. Pinned V 0.5.1 (prebuilt release). 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 | 6 of 34 | 280 |
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,657,649 | 139us | 583us | 6461.8% | 77MiB |
| Connection | Baseline | 4,096 | 4,056,051 | 1.01ms | 6.58ms | 6445.9% | 160MiB |
| Connection | Pipelined | 512 | 39,432,674 | 207us | 3.30ms | 6742.4% | 74MiB |
| Connection | Pipelined | 4,096 | 39,426,457 | 1.66ms | 7.85ms | 6478.5% | 166MiB |
| Connection | Short-lived | 512 | 994,532 | 506us | 4.76ms | 3197.6% | 67MiB |
| Connection | Short-lived | 4,096 | 990,366 | 4.12ms | 41.30ms | 3027.6% | 71MiB |
| Workload | JSON | 4,096 | 2,109,538 | 1.39ms | 36.50ms | 6166.4% | 160MiB |
| Workload | JSON Comp | 512 | 2,106,914 | 124us | 1.06ms | 6261.3% | 89MiB |
| Workload | JSON Comp | 4,096 | 2,323,362 | 1.59ms | 38.30ms | 6218.4% | 110MiB |
| Workload | JSON Comp | 16,384 | 2,342,652 | 6.63ms | 166.30ms | 6112.1% | 118MiB |
| Workload | JSON TLS | 4,096 | 1,500,479 | 20.32ms | 1.03s | 6155.2% | 450MiB |
| Workload | Upload | 32 | 2,960 | 10.77ms | 35.10ms | 2046.4% | 134MiB |
| Workload | Upload | 256 | 3,009 | 77.93ms | 266.20ms | 3666.7% | 292MiB |
| Workload | Static | 1,024 | 1,795,117 | 343.79us | 4.53ms | 5754.1% | 99MiB |
| Workload | Static | 4,096 | 1,784,103 | 1.26ms | 7.29ms | 5421.0% | 222MiB |
| Workload | Static | 6,800 | 1,743,717 | 2.15ms | 61.21ms | 5209.6% | 312MiB |
| Database | Async DB | 1,024 | 271,730 | 863us | 7.73ms | 2935.3% | 154MiB |
| Database | CRUD | 4,096 | 317,372 | 11.20ms | 75.80ms | 795.9% | 217MiB |
| Database | Fortunes | 1,024 | 171,038 | 4.57ms | 12.10ms | 6262.3% | 258MiB |
| Multi-endpoint | API-4 | 256 | 64,469 | 1.96ms | 13.40ms | 372.2% | 114MiB |
| Multi-endpoint | API-16 | 1,024 | 245,071 | 1.75ms | 14.80ms | 1498.5% | 180MiB |
How the benchmark is run · The machine · Add or fix an entry