anole
Experimental · Zig · engine: zio · standard configuration · completeness 4/4
Anole: HTTP/1.1, HTTP/2, HTTP/3, WebSocket, gRPC and WebTransport on the zio async runtime (io_uring where available, epoll fallback), BoringSSL. Documented APIs and default settings.
Achievements
🥇 1 Gold · 🥈 2 Silver · 🥉 1 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 |
|---|---|---|---|
| 🥇 Gold | Within its language | Zig · WebSocket | 1 of 3 |
| 🥈 Silver | Within its language | Zig · HTTP/1.1 | 2 of 3 |
| 🥈 Silver | Within its language | Zig · HTTP/2 | 2 of 3 |
| 🥉 Bronze | Test profile | Workload · 8Gbit | 3 of 17 |
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 | 9 of 19 | 5711 |
| HTTP/2 | 7 of 10 | 1452 |
| HTTP/3 | 6 of 7 | 39 |
| Gateway | 2 of 2 | 1863 |
| gRPC | 4 of 4 | 17 |
| WebSocket | 6 of 14 | 2532 |
Every result
Alpha Round, 41 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 | 3,117,862 | 1.32ms | 1.81ms | 6113.7% | 141MiB |
| Connection | Pipelined | 4,096 | 4,165,062 | 15.74ms | 22.70ms | 6212.5% | 148MiB |
| Connection | Short-lived | 4,096 | 2,447,110 | 1.65ms | 3.88ms | 6208.6% | 192MiB |
| Concurrency | Async Delay | 32,000 | 1,805,681 | 17.59ms | 23.00ms | 5519.6% | 811MiB |
| Efficiency | Latency-10K | 1,024 | 9,982 | 73.2us | 107.0us | 26.3% | 57MiB |
| Efficiency | Latency-1M | 1,024 | 997,766 | 107.9us | 193.0us | 2712.0% | 63MiB |
| Efficiency | Latency-500K/8 | 1,024 | 421,333 | 1506697.7us | 4429824.0us | 793.9% | 39MiB |
| Workload | JSON Comp | 4,096 | 79,925 | 51.07ms | 128.90ms | 1789.1% | 820MiB |
| Workload | JSON Comp | 16,384 | 80,247 | 198.03ms | 293.10ms | 1755.6% | 1.7GiB |
| Workload | JSON TLS | 4,096 | 1,171,992 | 47.24ms | 1.88s | 6023.8% | 562MiB |
| Workload | 8Gbit | 512 | 49,366 | 86.0us | 112.0us | 209.2% | 71MiB |
| Workload | Static TLS | 1,024 | 420,862 | 2.43ms | 25.33ms | 6578.5% | 322MiB |
| HTTP/2 | Baseline | 256 | 7,784,353 | 3.28ms | 19.03ms | 5954.2% | 1.9GiB |
| HTTP/2 | Baseline | 1,024 | 7,060,690 | 13.53ms | 89.26ms | 6189.0% | 1.2GiB |
| HTTP/2 | Static | 256 | 324,706 | 27.54ms | 793.86ms | 5674.3% | 852MiB |
| HTTP/2 | Static | 1,024 | 224,542 | 148.70ms | 2.48s | 4200.0% | 2.7GiB |
| HTTP/2 | Baseline (h2c) | 256 | 8,364,251 | 3.05ms | 22.90ms | 5958.5% | 1.8GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 8,273,481 | 11.85ms | 134.49ms | 6456.2% | 900MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 6,902,410 | 56.05ms | 926.11ms | 6450.3% | 2.0GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 739,852 | 46.89ms | 693.99ms | 2016.0% | 1.0GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 660,244 | 99.85ms | 4.99s | 1632.0% | 1.5GiB |
| HTTP/3 | Baseline | 64 | 64,261 | 51.69ms | 166.71ms | 359.9% | 186MiB |
| HTTP/3 | Static | 64 | 27,261 | 143.66ms | 715.82ms | 481.1% | 426MiB |
| gRPC | Unary | 256 | 76,064 | 343.28ms | 4.99s | 290.9% | 280MiB |
| gRPC | Unary | 1,024 | 60,162 | 1.37s | 4.99s | 321.4% | 1.2GiB |
| gRPC | Unary TLS | 256 | 51,742 | 364.94ms | 4.58s | 377.0% | 604MiB |
| gRPC | Unary TLS | 1,024 | 46,223 | 1.46s | 4.78s | 319.8% | 1.4GiB |
| Gateway | Gateway (H2) | 512 | 177,926 | 76.97ms | 4.93s | 3644.0% | 2.1GiB |
| Gateway | Gateway (H2) | 1,024 | 176,195 | 124.37ms | 4.87s | 3849.0% | 3.0GiB |
| Gateway | Gateway (H3) | 64 | 167,569 | 13.33ms | 43.26ms | 4036.8% | 1.3GiB |
| Gateway | Gateway (H3) | 256 | 156,683 | 49.67ms | 718.37ms | 4135.7% | 1.9GiB |
| Gateway | Production Stack | 256 | 114,735 | 24.23ms | 3.11s | 2920.4% | 1.3GiB |
| Gateway | Production Stack | 1,024 | 106,386 | 71.74ms | 4.33s | 2692.8% | 2.0GiB |
| WebSocket | Echo | 512 | 3,992,849 | 127us | 293us | 6492.6% | 52MiB |
| WebSocket | Echo | 4,096 | 4,059,741 | 1.01ms | 1.84ms | 6495.2% | 152MiB |
| WebSocket | Echo | 16,384 | 3,212,621 | 4.72ms | 7.36ms | 6512.0% | 456MiB |
| WebSocket | Echo Pipelined | 512 | 55,731,900 | 146us | 307us | 6479.2% | 53MiB |
| WebSocket | Echo Pipelined | 4,096 | 55,724,627 | 1.18ms | 1.91ms | 6606.2% | 156MiB |
| WebSocket | Echo Pipelined | 16,384 | 45,590,393 | 4.89ms | 7.29ms | 6609.4% | 484MiB |
| WebSocket | Echo Short-lived | 512 | 1,738,956 | 210us | 708us | 5794.1% | 96MiB |
| WebSocket | Echo Short-lived | 4,096 | 2,181,871 | 1.51ms | 3.57ms | 6222.8% | 204MiB |
Compared with
The Zig entries around anole on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs anole | |
|---|---|---|---|
| dusty | 7172 | +26% | head to head |
| nilo | 6354 | +11% | head to head |
| swerver | 6179 | +8% | head to head |
| zix | 4789 | -16% | head to head |
| libxev | 3863 | -32% | head to head |
Compare anole with any Zig entry · Compare anole with any entry, in any language · Every Zig entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry