trillium
Emerging · Rust · engine: trillium-http · standard configuration · completeness 4/4
Trillium 1.x async Rust web framework on tokio. trillium-rustls for TLS (h1 + h2 via ALPN), trillium-quinn for HTTP/3, trillium-websockets for /ws, trillium-static for /static/* served from disk per request, trillium-compression middleware for runtime gzip/brotli, trillium-api for JSON handlers, trillium-grpc for the benchmark.BenchmarkService gRPC endpoints, deadpool-postgres for async-db and crud.
Achievements
🥈 1 Silver · 🥉 3 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 |
|---|---|---|---|
| 🥈 Silver | Test profile | Gateway · Gateway (H3) | 2 of 3 |
| 🥉 Bronze | Family composite | Composite · Gateway | 3 of 4 |
| 🥉 Bronze | Family composite | Composite · HTTP/3 | 3 of 11 |
| 🥉 Bronze | Within its language | Rust · HTTP/2 | 3 of 4 |
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 | 26 of 72 | 3203 |
| HTTP/2 | 10 of 20 | 750 |
| HTTP/3 | 3 of 11 | 881 |
| Gateway | 3 of 4 | 1215 |
| gRPC | 4 of 4 | 377 |
| WebSocket | 17 of 20 | 391 |
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 | 596,428 | 2.48ms | 8.76ms | 6042.1% | 208MiB |
| Connection | Pipelined | 4,096 | 2,942,210 | 10.44ms | 44.20ms | 6337.3% | 225MiB |
| Connection | Short-lived | 4,096 | 511,540 | 1.06ms | 2.24ms | 2397.7% | 219MiB |
| Concurrency | Async Delay | 32,000 | 407,249 | 59.94ms | 89.20ms | 3325.1% | 1.5GiB |
| Efficiency | Latency-10K | 1,024 | 9,912 | 78.6us | 107.0us | 25.0% | 159MiB |
| Efficiency | Latency-1M | 1,024 | 632,675 | 3448769.4us | 7055360.0us | 6343.3% | 159MiB |
| Efficiency | Latency-500K/8 | 1,024 | 281,645 | 3770307.6us | 7960576.0us | 772.3% | 73MiB |
| Workload | JSON Comp | 4,096 | 112,571 | 7.53ms | 23.00ms | 6247.4% | 762MiB |
| Workload | JSON Comp | 16,384 | 110,848 | 11.13ms | 39.20ms | 6011.9% | 774MiB |
| Workload | JSON TLS | 4,096 | 613,708 | 6.08ms | 31.96ms | 6468.7% | 418MiB |
| Workload | 8Gbit | 512 | 48,662 | 103.5us | 149.0us | 242.5% | 228MiB |
| Workload | Static TLS | 1,024 | 541,037 | 1.84ms | 17.72ms | 6401.1% | 514MiB |
| Database | Async DB | 1,024 | 214,163 | 3.85ms | 5.89ms | 3256.4% | 241MiB |
| Database | Fortunes | 1,024 | 207,201 | 3.67ms | 5.77ms | 5009.9% | 319MiB |
| HTTP/2 | Baseline | 256 | 1,113,605 | 21.38ms | 128.25ms | 5457.2% | 950MiB |
| HTTP/2 | Baseline | 1,024 | 1,242,176 | 56.55ms | 472.83ms | 5325.8% | 3.8GiB |
| HTTP/2 | Static | 256 | 20,151 | 375.70ms | 1.32s | 4108.2% | 1.8GiB |
| HTTP/2 | Static | 1,024 | 18,419 | 1.08s | 3.12s | 3762.7% | 2.5GiB |
| HTTP/2 | Baseline (h2c) | 256 | 1,281,402 | 19.50ms | 130.96ms | 5258.6% | 897MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 1,151,879 | 52.70ms | 501.63ms | 5493.4% | 3.1GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 1,237,468 | 116.22ms | 1.51s | 5530.5% | 9.6GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 955,862 | 23.90ms | 351.72ms | 5717.6% | 1.9GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 928,509 | 80.97ms | 3.98s | 5668.6% | 4.9GiB |
| HTTP/3 | Baseline | 64 | 425,126 | 9.57ms | 108.34ms | 2539.1% | 301MiB |
| HTTP/3 | Static | 64 | 219,349 | 8.67ms | 84.39ms | 2439.4% | 507MiB |
| gRPC | Unary | 256 | 690,051 | 37.03ms | 268.99ms | 5421.3% | 467MiB |
| gRPC | Unary | 1,024 | 709,412 | 94.45ms | 852.82ms | 5595.0% | 1.4GiB |
| gRPC | Unary TLS | 256 | 760,673 | 32.90ms | 75.69ms | 5288.4% | 440MiB |
| gRPC | Unary TLS | 1,024 | 650,980 | 108.68ms | 846.26ms | 5682.8% | 1.4GiB |
| Gateway | Gateway (H2) | 512 | 81,132 | 187.09ms | 2.55s | 5405.6% | 3.0GiB |
| Gateway | Gateway (H2) | 1,024 | 75,235 | 366.37ms | 4.73s | 5125.8% | 5.8GiB |
| Gateway | Gateway (H3) | 64 | 82,606 | 24.65ms | 91.07ms | 4092.8% | 896MiB |
| Gateway | Gateway (H3) | 256 | 60,594 | 130.93ms | 809.28ms | 2788.9% | 1.9GiB |
| WebSocket | Echo | 512 | 440,297 | 1.10ms | 2.52ms | 3279.7% | 306MiB |
| WebSocket | Echo | 4,096 | 355,252 | 3.96ms | 11.00ms | 3987.8% | 602MiB |
| WebSocket | Echo | 16,384 | 342,662 | 19.51ms | 29.70ms | 3660.7% | 1.8GiB |
| WebSocket | Echo Pipelined | 512 | 9,127,299 | 829us | 1.98ms | 3753.9% | 292MiB |
| WebSocket | Echo Pipelined | 4,096 | 7,857,900 | 2.84ms | 9.28ms | 4070.6% | 659MiB |
| WebSocket | Echo Pipelined | 16,384 | 6,786,700 | 9.59ms | 18.80ms | 3387.4% | 1.3GiB |
| WebSocket | Echo Short-lived | 512 | 270,939 | 731us | 1.68ms | 2913.4% | 471MiB |
| WebSocket | Echo Short-lived | 4,096 | 272,378 | 758us | 1.74ms | 2821.0% | 461MiB |
Compared with
The Rust entries around trillium on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs trillium | |
|---|---|---|---|
| actix | 6799 | +112% | head to head |
| tokio-uring | 3462 | +8% | head to head |
| hyper | 3345 | +4% | head to head |
| trillium-tuned | 3114 | -3% | head to head |
| rocket | 3072 | -4% | head to head |
Compare trillium with any Rust entry · Compare trillium with any entry, in any language · Every Rust entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry