tako
Emerging · Rust · engine: hyper · standard configuration · completeness 4/4
Tako 2.4.1 on hyper and Tokio, default configuration. Plain HTTP/1.1 and WebSocket on :8080 run tako's per-thread server (one current-thread runtime per CPU, SO_REUSEPORT listeners, PerThreadConfig::default()); h2c (:8082), HTTP/1.1 and h2 over rustls (:8081, :8443) and HTTP/3 over quinn (:8443/udp) run tako's multi-thread Server. Routing, Path/Query/State/body extractors and the Json responder through the tako API, the compression plugin with default settings on the JSON routes, ServeDir with precompressed .br/.gz sidecars read from disk per request, TakoWs for /ws, and deadpool-postgres for async-db.
- Official repository
- Official website
- Benchmark implementation
- All Rust entries, compared
- Open the leaderboard
Achievements
🥇 3 Gold · 🥈 2 Silver · 🥉 2 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 | Family composite | Composite · HTTP/1.1 | 1 of 75 |
| 🥇 Gold | Within its language | Rust · HTTP/1.1 | 1 of 8 |
| 🥇 Gold | Test profile | Concurrency · Async Delay | 1 of 71 |
| 🥈 Silver | Test profile | Connection · Baseline | 2 of 75 |
| 🥈 Silver | Test profile | Connection · Short-lived | 2 of 75 |
| 🥉 Bronze | Within its language | Rust · WebSocket | 3 of 5 |
| 🥉 Bronze | Test profile | Gateway · Gateway (H3) | 3 of 5 |
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 | 1 of 75 | 6992 |
| HTTP/2 | 12 of 22 | 630 |
| HTTP/3 | 7 of 12 | 533 |
| Gateway | 4 of 6 | 1422 |
| gRPC | 5 of 5 | 298 |
| WebSocket | 12 of 22 | 894 |
Every result
Alpha Round, 42 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,258,564 | 1.26ms | 2.47ms | 6221.5% | 109MiB |
| Connection | Pipelined | 4,096 | 22,082,892 | 2.98ms | 3.02ms | 6402.2% | 110MiB |
| Connection | Short-lived | 4,096 | 2,474,910 | 1.62ms | 3.25ms | 6410.9% | 151MiB |
| Concurrency | Async Delay | 32,000 | 2,264,700 | 14.01ms | 17.40ms | 5097.6% | 918MiB |
| Efficiency | Latency-10K | 1,024 | 9,980 | 78.5us | 102.0us | 25.9% | 46MiB |
| Efficiency | Latency-1M | 1,024 | 997,579 | 100.0us | 170.0us | 2641.0% | 49MiB |
| Efficiency | Latency-500K/8 | 1,024 | 470,285 | 577631.3us | 1185280.0us | 799.1% | 33MiB |
| Workload | JSON Comp | 4,096 | 212,739 | 19.18ms | 34.30ms | 6263.7% | 242MiB |
| Workload | JSON Comp | 16,384 | 209,414 | 77.22ms | 141.70ms | 6024.6% | 604MiB |
| Workload | JSON TLS | 4,096 | 904,303 | 3.95ms | 37.10ms | 6279.2% | 231MiB |
| Workload | 8Gbit | 512 | 48,998 | 93.2us | 133.0us | 258.4% | 95MiB |
| Workload | Static TLS | 1,024 | 142,858 | 6.28ms | 39.62ms | 3486.3% | 161MiB |
| Database | Async DB | 1,024 | 243,077 | 3.71ms | 5.97ms | 3682.8% | 97MiB |
| HTTP/2 | Baseline | 256 | 741,740 | 34.00ms | 131.32ms | 4705.5% | 352MiB |
| HTTP/2 | Baseline | 1,024 | 682,085 | 119.46ms | 482.54ms | 4693.8% | 1.1GiB |
| HTTP/2 | Static | 256 | 135,134 | 59.31ms | 337.72ms | 3485.3% | 276MiB |
| HTTP/2 | Static | 1,024 | 135,280 | 184.40ms | 562.26ms | 3141.4% | 1.0GiB |
| HTTP/2 | Baseline (h2c) | 256 | 747,323 | 33.81ms | 132.49ms | 4638.2% | 388MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 670,725 | 112.56ms | 624.56ms | 4679.2% | 1021MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 647,503 | 276.75ms | 1.84s | 4716.3% | 2.5GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 716,524 | 34.09ms | 341.39ms | 4382.2% | 398MiB |
| HTTP/2 | JSON (h2c) | 4,096 | 648,651 | 110.51ms | 3.98s | 4320.9% | 1.1GiB |
| HTTP/3 | Baseline | 64 | 534,205 | 0us | 0us | 2848.7% | 97MiB |
| HTTP/3 | Static | 64 | 109,354 | 0us | 0us | 2790.4% | 160MiB |
| gRPC | Unary | 256 | 578,019 | 44.16ms | 192.48ms | 5026.6% | 359MiB |
| gRPC | Unary | 1,024 | 513,618 | 163.90ms | 656.27ms | 5034.0% | 1.1GiB |
| gRPC | Unary TLS | 256 | 622,537 | 34.90ms | 170.64ms | 4906.5% | 318MiB |
| gRPC | Unary TLS | 1,024 | 508,813 | 146.65ms | 589.95ms | 4979.4% | 1.0GiB |
| Gateway | Gateway (H2) | 512 | 76,262 | 201.01ms | 1.95s | 3888.2% | 2.7GiB |
| Gateway | Gateway (H2) | 1,024 | 66,115 | 428.59ms | 4.87s | 3702.6% | 5.7GiB |
| Gateway | Gateway (H3) | 64 | 83,268 | 24.44ms | 86.59ms | 3431.9% | 416MiB |
| Gateway | Gateway (H3) | 256 | 58,526 | 135.57ms | 822.87ms | 2579.8% | 1.5GiB |
| Gateway | Production Stack | 256 | 54,119 | 78.09ms | 564.75ms | 3125.6% | 1.0GiB |
| Gateway | Production Stack | 1,024 | 47,496 | 331.22ms | 2.04s | 3319.2% | 3.0GiB |
| WebSocket | Echo | 512 | 3,345,847 | 152us | 335us | 6632.1% | 101MiB |
| WebSocket | Echo | 4,096 | 420,836 | 9.72ms | 18.50ms | 6079.0% | 608MiB |
| WebSocket | Echo | 16,384 | 404,797 | 39.95ms | 65.50ms | 6090.8% | 2.3GiB |
| WebSocket | Echo Pipelined | 512 | 5,711,392 | 1.43ms | 2.70ms | 6426.0% | 101MiB |
| WebSocket | Echo Pipelined | 4,096 | 5,353,812 | 12.25ms | 16.20ms | 6643.5% | 614MiB |
| WebSocket | Echo Pipelined | 16,384 | 4,805,314 | 53.63ms | 78.00ms | 6173.1% | 2.3GiB |
| WebSocket | Echo Short-lived | 512 | 1,626,053 | 236us | 499us | 6165.4% | 127MiB |
| WebSocket | Echo Short-lived | 4,096 | 377,761 | 9.43ms | 12.80ms | 6543.1% | 586MiB |
Compared with
The Rust entries around tako on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs tako | |
|---|---|---|---|
| cpeak | 7298 | +4% | head to head |
| actix | 6638 | -5% | head to head |
| ntex | 5761 | -18% | head to head |
Compare tako with any Rust entry · Compare tako with any entry, in any language · Every Rust entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry