ktor-tuned
Flagship · Kotlin · engine: netty · tuned configuration · completeness 4/4
JetBrains Ktor 3.x on Netty with Ghost Serializer, JDK 25.
Achievements
🥇 2 Gold · 🥈 1 Silver. 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 | Kotlin · HTTP/1.1 | 1 of 4 |
| 🥇 Gold | Within its language | Kotlin · HTTP/2 | 1 of 3 |
| 🥈 Silver | Test profile | Efficiency · Latency-10K | 2 of 96 |
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 | 30 of 97 | 4003 |
| HTTP/2 | 16 of 31 | 828 |
| HTTP/3 | 13 of 16 | 375 |
| WebSocket | 22 of 31 | 564 |
Every result
Alpha Round, 31 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 | 1,414,020 | 2.90ms | 10.90ms | 6312.8% | 5.2GiB |
| Connection | Pipelined | 4,096 | 2,491,539 | 26.37ms | 85.20ms | 6108.4% | 8.2GiB |
| Connection | Short-lived | 4,096 | 601,087 | 6.78ms | 68.60ms | 4721.1% | 2.6GiB |
| Concurrency | Async Delay | 32,000 | 310,599 | 101.83ms | 283.90ms | 1989.7% | 7.3GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 88.1us | 135.0us | 43.2% | 1.5GiB |
| Efficiency | Latency-1M | 1,024 | 997,705 | 262.6us | 2373.0us | 5711.2% | 5.2GiB |
| Efficiency | Latency-500K/8 | 1,024 | 283,892 | 4326309.6us | 8990720.0us | 798.0% | 2.4GiB |
| Workload | JSON Comp | 4,096 | 249,350 | 16.45ms | 45.00ms | 6310.6% | 5.0GiB |
| Workload | JSON Comp | 16,384 | 236,648 | 68.42ms | 163.70ms | 6088.8% | 8.2GiB |
| Workload | JSON TLS | 4,096 | 896,371 | 5.26ms | 75.18ms | 6311.4% | 6.3GiB |
| Workload | 8Gbit | 512 | 49,399 | 115.8us | 170.0us | 367.0% | 1.6GiB |
| Workload | Static TLS | 1,024 | 267,451 | 4.29ms | 92.98ms | 6310.9% | 4.6GiB |
| Database | Async DB | 1,024 | 45,624 | 22.15ms | 25.80ms | 2070.1% | 3.0GiB |
| Database | Fortunes | 1,024 | 49,991 | 19.90ms | 43.10ms | 5612.1% | 11.9GiB |
| HTTP/2 | Baseline | 256 | 1,135,198 | 22.97ms | 111.62ms | 6344.9% | 13.5GiB |
| HTTP/2 | Baseline | 1,024 | 1,047,470 | 91.50ms | 327.37ms | 6319.4% | 22.9GiB |
| HTTP/2 | Static | 256 | 235,897 | 34.39ms | 175.67ms | 6171.3% | 7.0GiB |
| HTTP/2 | Static | 1,024 | 231,399 | 137.83ms | 373.52ms | 6098.3% | 12.0GiB |
| HTTP/2 | Baseline (h2c) | 256 | 1,170,892 | 22.18ms | 119.04ms | 6373.7% | 11.3GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 1,102,189 | 89.60ms | 346.75ms | 6444.1% | 25.8GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 521,941 | 654.80ms | 2.17s | 5343.7% | 31.3GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 744,649 | 43.10ms | 193.46ms | 6270.9% | 15.7GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 676,200 | 184.36ms | 638.40ms | 6210.0% | 26.4GiB |
| HTTP/3 | Baseline | 64 | 377,525 | 10.93ms | 32.07ms | 3031.3% | 5.0GiB |
| HTTP/3 | Static | 64 | 76,777 | 47.58ms | 208.94ms | 6154.8% | 2.9GiB |
| WebSocket | Echo | 512 | 1,092,275 | 468us | 1.13ms | 6187.7% | 1.5GiB |
| WebSocket | Echo | 4,096 | 1,207,338 | 3.38ms | 9.46ms | 6331.2% | 3.2GiB |
| WebSocket | Echo | 16,384 | 1,053,889 | 15.12ms | 48.20ms | 6101.0% | 5.6GiB |
| WebSocket | Echo Pipelined | 512 | 12,092,857 | 676us | 1.79ms | 6127.9% | 4.8GiB |
| WebSocket | Echo Pipelined | 4,096 | 12,853,100 | 5.07ms | 16.10ms | 6214.2% | 10.4GiB |
| WebSocket | Echo Pipelined | 16,384 | 12,636,603 | 20.13ms | 73.10ms | 6140.9% | 11.0GiB |
Compared with
The Kotlin entries around ktor-tuned on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs ktor-tuned | |
|---|---|---|---|
| ktor | 3258 | -19% | head to head |
| neton | 2408 | -40% | head to head |
Compare ktor-tuned with any Kotlin entry · Compare ktor-tuned with any entry, in any language · Every Kotlin entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry