veil-api
Experimental · Rust · engine: veil · standard configuration · completeness 4/4
veil 0.10 API library (crates.io veil-proxy, full-container: epoll readiness reactor, no tokio or hyper). #[veil::route] handlers with path/query extraction, serde_json responses, compression through [api] compression, WebSocket through WebSocketUpgrade, gRPC services generated by veil-build (prost), /static/* through App::serve_dir. One process with four listeners from the configuration file; HTTP/3 via quiche.
- Official repository
- Official website
- Benchmark implementation
- All Rust entries, compared
- Open the leaderboard
Achievements
🥉 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 |
|---|---|---|---|
| 🥉 Bronze | Test profile | HTTP/2 · Static | 3 of 14 |
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 | 13 of 29 | 5091 |
| HTTP/2 | 8 of 15 | 1901 |
| HTTP/3 | 6 of 10 | 686 |
| gRPC | 5 of 7 | 406 |
| WebSocket | 14 of 21 | 2079 |
Every result
Alpha Round, 35 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 | 2,509,798 | 1.63ms | 2.19ms | 6471.1% | 258MiB |
| Connection | Pipelined | 4,096 | 3,430,341 | 336us | 360us | 6520.8% | 229MiB |
| Connection | Short-lived | 4,096 | 1,990,528 | 2.04ms | 4.70ms | 6531.8% | 356MiB |
| Concurrency | Async Delay | 32,000 | 1,871,113 | 17.00ms | 18.60ms | 6471.4% | 1.3GiB |
| Efficiency | Latency-10K | 1,024 | 9,982 | 84.2us | 114.0us | 36.4% | 131MiB |
| Efficiency | Latency-1M | 1,024 | 997,927 | 108.9us | 179.0us | 3047.6% | 132MiB |
| Efficiency | Latency-500K/8 | 1,024 | 369,138 | 2500384.8us | 6477824.0us | 788.1% | 57MiB |
| Workload | JSON Comp | 4,096 | 37,692 | 107.65ms | 217.00ms | 946.0% | 471MiB |
| Workload | JSON Comp | 16,384 | 37,885 | 410.71ms | 530.40ms | 937.5% | 874MiB |
| Workload | JSON TLS | 4,096 | 1,197,821 | 3.40ms | 50.76ms | 6439.9% | 381MiB |
| Workload | 8Gbit | 512 | 49,371 | 105.7us | 135.0us | 254.4% | 143MiB |
| Workload | Static TLS | 1,024 | 936,657 | 1.04ms | 15.57ms | 6419.4% | 222MiB |
| HTTP/2 | Baseline | 256 | 6,100,596 | 6.37ms | 4.98s | 6243.8% | 216MiB |
| HTTP/2 | Baseline | 1,024 | 4,468,853 | 197.50ms | 4.94s | 6291.1% | 432MiB |
| HTTP/2 | Static | 256 | 1,040,326 | 5.61ms | 4.98s | 6355.5% | 352MiB |
| HTTP/2 | Static | 1,024 | 964,459 | 20.60ms | 4.90s | 6470.6% | 790MiB |
| HTTP/2 | Baseline (h2c) | 256 | 6,009,742 | 12.66ms | 5.00s | 6304.6% | 194MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 4,858,574 | 87.35ms | 5.00s | 6352.5% | 339MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 3,851,456 | 59.17ms | 4.99s | 6255.9% | 1.3GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 2,621,794 | 26.53ms | 5.00s | 6355.3% | 420MiB |
| HTTP/2 | JSON (h2c) | 4,096 | 2,391,790 | 19.08ms | 5.00s | 6267.2% | 1.1GiB |
| HTTP/3 | Baseline | 64 | 2,643,308 | 1.44ms | 2.88ms | 3582.3% | 367MiB |
| HTTP/3 | Static | 64 | 288,713 | 15.42ms | 36.42ms | 4104.5% | 537MiB |
| gRPC | Unary | 256 | 1,615,922 | 17.76ms | 5.00s | 6418.6% | 630MiB |
| gRPC | Unary | 1,024 | 1,356,305 | 53.15ms | 5.00s | 6438.5% | 1.5GiB |
| gRPC | Unary TLS | 256 | 1,428,570 | 17.48ms | 1.59s | 6237.6% | 865MiB |
| gRPC | Unary TLS | 1,024 | 1,256,192 | 68.06ms | 2.04s | 6418.6% | 2.8GiB |
| WebSocket | Echo | 512 | 3,410,445 | 149us | 310us | 6489.2% | 123MiB |
| WebSocket | Echo | 4,096 | 3,372,043 | 1.21ms | 1.72ms | 6643.7% | 268MiB |
| WebSocket | Echo | 16,384 | 3,020,709 | 5.39ms | 6.51ms | 6584.1% | 792MiB |
| WebSocket | Echo Pipelined | 512 | 29,643,388 | 275us | 527us | 6730.0% | 117MiB |
| WebSocket | Echo Pipelined | 4,096 | 30,432,470 | 2.15ms | 2.90ms | 6792.1% | 271MiB |
| WebSocket | Echo Pipelined | 16,384 | 28,237,286 | 9.24ms | 10.40ms | 6738.7% | 791MiB |
| WebSocket | Echo Short-lived | 512 | 1,866,079 | 187us | 634us | 5751.9% | 186MiB |
| WebSocket | Echo Short-lived | 4,096 | 2,230,879 | 1.50ms | 3.54ms | 6195.3% | 433MiB |
Compared with
The Rust entries around veil-api on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs veil-api | |
|---|---|---|---|
| cpeak | 7347 | +44% | head to head |
| trillium-tuned | 6036 | +19% | head to head |
| actix | 5942 | +17% | head to head |
| tokio | 4639 | -9% | head to head |
| trillium | 4258 | -16% | head to head |
Compare veil-api with any Rust entry · Compare veil-api with any entry, in any language · Every Rust entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry