trillium-tuned
Emerging · Rust · engine: trillium-http · tuned configuration · completeness 4/4
Trillium 1.x with one current_thread tokio runtime per CPU, SO_REUSEPORT TCP sharding (single QUIC endpoint for h3), tuned HttpConfig (larger response/body buffers, 64K h2 frames, eager body preallocation), and static files preloaded into memory at startup. sonic-rs for JSON, deadpool-postgres, mimalloc, trillium-grpc for the benchmark.BenchmarkService gRPC endpoints.
Achievements
🥈 1 Silver · 🥉 4 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 | Within its language | Rust · gRPC | 2 of 3 |
| 🥉 Bronze | Within its language | Rust · HTTP/2 | 3 of 5 |
| 🥉 Bronze | Within its language | Rust · WebSocket | 3 of 5 |
| 🥉 Bronze | Test profile | Efficiency · Latency-10K | 3 of 91 |
| 🥉 Bronze | Test profile | Gateway · Gateway (H3) | 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 | 39 of 91 | 3114 |
| HTTP/2 | 10 of 28 | 1036 |
| HTTP/3 | 4 of 14 | 908 |
| Gateway | 4 of 5 | 1191 |
| gRPC | 7 of 8 | 389 |
| WebSocket | 15 of 27 | 805 |
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 | 574,772 | 7.13ms | 12.90ms | 6310.2% | 417MiB |
| Connection | Pipelined | 4,096 | 2,797,935 | 23.06ms | 268.60ms | 6396.3% | 365MiB |
| Connection | Short-lived | 4,096 | 514,442 | 7.95ms | 21.80ms | 5959.0% | 495MiB |
| Concurrency | Async Delay | 32,000 | 594,863 | 53.29ms | 80.00ms | 6064.1% | 1.4GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 74.8us | 118.0us | 32.3% | 192MiB |
| Efficiency | Latency-1M | 1,024 | 639,132 | 3189567.0us | 9687040.0us | 6185.3% | 193MiB |
| Efficiency | Latency-500K/8 | 1,024 | 276,261 | 4397299.6us | 9367552.0us | 764.3% | 111MiB |
| Workload | JSON Comp | 4,096 | 110,562 | 36.37ms | 79.20ms | 6253.1% | 1.0GiB |
| Workload | JSON Comp | 16,384 | 99,874 | 160.71ms | 287.60ms | 6433.0% | 1.4GiB |
| Workload | JSON TLS | 4,096 | 526,770 | 7.74ms | 34.40ms | 6249.0% | 503MiB |
| Workload | 8Gbit | 512 | 49,155 | 93.0us | 130.0us | 247.1% | 270MiB |
| Workload | Static TLS | 1,024 | 490,320 | 2.09ms | 31.82ms | 6380.1% | 912MiB |
| Database | Async DB | 1,024 | 229,592 | 4.08ms | 6.72ms | 3557.5% | 256MiB |
| Database | Fortunes | 1,024 | 159,782 | 6.02ms | 9.67ms | 4420.5% | 375MiB |
| HTTP/2 | Baseline | 256 | 1,244,433 | 21.45ms | 56.61ms | 5454.5% | 770MiB |
| HTTP/2 | Baseline | 1,024 | 1,254,584 | 76.23ms | 183.62ms | 5748.0% | 2.6GiB |
| HTTP/2 | Static | 256 | 190,910 | 43.10ms | 172.56ms | 6199.4% | 11.1GiB |
| HTTP/2 | Static | 1,024 | 179,689 | 173.49ms | 711.72ms | 6148.9% | 15.4GiB |
| HTTP/2 | Baseline (h2c) | 256 | 1,381,238 | 19.81ms | 103.67ms | 5407.8% | 836MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 1,414,848 | 69.96ms | 265.08ms | 5669.5% | 2.9GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 1,343,323 | 289.62ms | 911.77ms | 5256.3% | 10.1GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 1,179,716 | 27.70ms | 113.30ms | 5540.8% | 1.3GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 1,059,700 | 124.94ms | 524.01ms | 5858.0% | 4.6GiB |
| HTTP/3 | Baseline | 64 | 427,713 | 13.50ms | 199.13ms | 2596.2% | 416MiB |
| HTTP/3 | Static | 64 | 226,765 | 8.89ms | 46.95ms | 2574.6% | 701MiB |
| gRPC | Unary | 256 | 664,634 | 41.03ms | 127.56ms | 5385.9% | 695MiB |
| gRPC | Unary | 1,024 | 652,387 | 154.56ms | 511.20ms | 5703.7% | 2.2GiB |
| gRPC | Unary TLS | 256 | 784,140 | 34.97ms | 109.37ms | 5448.0% | 935MiB |
| gRPC | Unary TLS | 1,024 | 796,764 | 120.36ms | 282.31ms | 5787.1% | 2.6GiB |
| Gateway | Gateway (H2) | 512 | 76,041 | 197.65ms | 2.80s | 5713.4% | 2.8GiB |
| Gateway | Gateway (H2) | 1,024 | 68,759 | 405.07ms | 4.68s | 5308.3% | 5.5GiB |
| Gateway | Gateway (H3) | 64 | 82,375 | 24.71ms | 92.46ms | 4075.8% | 917MiB |
| Gateway | Gateway (H3) | 256 | 60,216 | 131.83ms | 809.02ms | 2921.6% | 2.4GiB |
| WebSocket | Echo | 512 | 1,692,428 | 301us | 657us | 6529.4% | 351MiB |
| WebSocket | Echo | 4,096 | 425,623 | 9.62ms | 12.40ms | 6516.5% | 868MiB |
| WebSocket | Echo | 16,384 | 406,003 | 39.63ms | 45.80ms | 6201.0% | 3.0GiB |
| WebSocket | Echo Pipelined | 512 | 15,414,595 | 530us | 1.07ms | 6683.9% | 325MiB |
| WebSocket | Echo Pipelined | 4,096 | 10,954,723 | 5.98ms | 10.90ms | 6591.2% | 908MiB |
| WebSocket | Echo Pipelined | 16,384 | 6,918,067 | 37.31ms | 44.70ms | 6209.8% | 2.9GiB |
| WebSocket | Echo Short-lived | 512 | 1,072,355 | 394us | 4.73ms | 5302.1% | 482MiB |
| WebSocket | Echo Short-lived | 4,096 | 533,162 | 6.74ms | 29.10ms | 5562.6% | 1.0GiB |
Compared with
The Rust entries around trillium-tuned on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs trillium-tuned | |
|---|---|---|---|
| actix | 6799 | +118% | head to head |
| hyper | 3345 | +7% | head to head |
| trillium | 3203 | +3% | head to head |
| rocket | 3072 | -1% | head to head |
| salvo | 2443 | -22% | head to head |
Compare trillium-tuned with any Rust entry · Compare trillium-tuned with any entry, in any language · Every Rust entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry