fib-tuned
Experimental · Go · engine: fib · tuned configuration · completeness 4/4
The fib entry with its compression replaced: the JSON routes sit behind a compression middleware written in the entry on fib's middleware API (Context.OnResponse, as fib's own compress, around the routes through Router.With), coding brotli (andybalholm/brotli), zstd, gzip and deflate (klauspost/compress) as Accept-Encoding weighs them. Between codings a client weighs the same it picks gzip, then zstd, brotli and deflate, the order measured to cost least for the bytes saved on these 4-8 KB bodies. JSON responses are encoded with sonic, which Context.JSON calls as fib's JSONEncoder. It runs with GOGC=200. Everything else - prefork with a child for every two CPUs, fib's default configuration, listeners on 8080/8082/8081/8443 tcp+udp/9000, fib's Router and routes, gRPC through fib's grpc package, static through FileCache, TLS - is the fib entry's.
Achievements
🥇 6 Gold · 🥈 8 Silver · 🥉 5 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/3 | 1 of 5 |
| 🥇 Gold | Family composite | Composite · gRPC | 1 of 5 |
| 🥇 Gold | Test profile | Efficiency · Latency-10K | 1 of 8 |
| 🥇 Gold | Test profile | HTTP/2 · Baseline (h2c) | 1 of 6 |
| 🥇 Gold | Test profile | HTTP/3 · Baseline | 1 of 5 |
| 🥇 Gold | Test profile | HTTP/3 · Static | 1 of 4 |
| 🥈 Silver | Family composite | Composite · HTTP/2 | 2 of 7 |
| 🥈 Silver | Test profile | Concurrency · Async Delay | 2 of 7 |
| 🥈 Silver | Test profile | HTTP/2 · Baseline | 2 of 6 |
| 🥈 Silver | Test profile | HTTP/2 · JSON (h2c) | 2 of 6 |
| 🥈 Silver | Test profile | HTTP/2 · Static | 2 of 6 |
| 🥈 Silver | Test profile | Workload · JSON Comp | 2 of 9 |
| 🥈 Silver | Test profile | gRPC · Unary | 2 of 5 |
| 🥈 Silver | Test profile | gRPC · Unary TLS | 2 of 5 |
| 🥉 Bronze | Family composite | Composite · HTTP/1.1 | 3 of 10 |
| 🥉 Bronze | Test profile | Connection · Short-lived | 3 of 10 |
| 🥉 Bronze | Test profile | Efficiency · Latency-1M | 3 of 8 |
| 🥉 Bronze | Test profile | Workload · 8Gbit | 3 of 8 |
| 🥉 Bronze | Test profile | Workload · JSON TLS | 3 of 9 |
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 | 3 of 10 | 7101 |
| HTTP/2 | 2 of 7 | 3051 |
| HTTP/3 | 1 of 5 | 2000 |
| gRPC | 1 of 5 | 1922 |
Every result
Alpha Round, 28 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,136,110 | 1.30ms | 2.56ms | 6341.3% | 467MiB |
| Connection | Pipelined | 4,096 | 20,380,428 | 3.21ms | 7.00ms | 6635.6% | 477MiB |
| Connection | Short-lived | 4,096 | 2,554,016 | 1.57ms | 4.05ms | 6003.1% | 489MiB |
| Concurrency | Async Delay | 32,000 | 1,825,758 | 17.36ms | 30.70ms | 5560.7% | 2.2GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 73.3us | 105.0us | 45.8% | 413MiB |
| Efficiency | Latency-1M | 1,024 | 997,842 | 114.0us | 196.0us | 3405.1% | 442MiB |
| Efficiency | Latency-500K/8 | 1,024 | 449,686 | 963647.1us | 2837504.0us | 792.4% | 75MiB |
| Workload | JSON Comp | 4,096 | 509,221 | 8.02ms | 24.60ms | 6424.1% | 842MiB |
| Workload | JSON Comp | 16,384 | 506,000 | 32.10ms | 55.40ms | 6156.8% | 5.7GiB |
| Workload | JSON TLS | 4,096 | 1,505,728 | 2.78ms | 96.29ms | 6225.1% | 658MiB |
| Workload | 8Gbit | 512 | 49,346 | 90.1us | 117.0us | 232.9% | 474MiB |
| Workload | Static TLS | 1,024 | 1,225,298 | 675.21us | 21.21ms | 5673.7% | 567MiB |
| Database | Async DB | 1,024 | 230,913 | 3.93ms | 21.10ms | 4259.3% | 674MiB |
| HTTP/2 | Baseline | 256 | 5,636,472 | 2.22ms | 15.00ms | 2296.4% | 811MiB |
| HTTP/2 | Baseline | 1,024 | 5,511,179 | 8.62ms | 108.31ms | 2323.3% | 1.2GiB |
| HTTP/2 | Static | 256 | 946,028 | 8.43ms | 62.37ms | 6133.8% | 1.1GiB |
| HTTP/2 | Static | 1,024 | 945,950 | 32.62ms | 252.66ms | 6018.8% | 2.0GiB |
| HTTP/2 | Baseline (h2c) | 256 | 13,245,546 | 1.36ms | 11.40ms | 4889.2% | 669MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 14,246,107 | 4.63ms | 66.15ms | 5904.5% | 1.0GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 12,405,361 | 18.64ms | 178.69ms | 5345.7% | 1.8GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 2,337,570 | 13.70ms | 128.02ms | 6114.7% | 1.6GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 2,254,913 | 55.60ms | 398.59ms | 6295.1% | 4.3GiB |
| HTTP/3 | Baseline | 64 | 6,167,355 | 546us | 1.11ms | 3546.0% | 766MiB |
| HTTP/3 | Static | 64 | 770,725 | 5.12ms | 22.59ms | 4863.4% | 1.8GiB |
| gRPC | Unary | 256 | 6,594,862 | 3.09ms | 38.74ms | 5046.2% | 873MiB |
| gRPC | Unary | 1,024 | 6,699,375 | 8.61ms | 161.90ms | 5429.4% | 1.5GiB |
| gRPC | Unary TLS | 256 | 4,331,789 | 3.31ms | 33.90ms | 3283.1% | 873MiB |
| gRPC | Unary TLS | 1,024 | 4,233,517 | 11.81ms | 92.98ms | 3353.1% | 1.5GiB |
Compared with
The Go entries around fib-tuned on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs fib-tuned | |
|---|---|---|---|
| fiber-tuned | 6372 | -10% | head to head |
| fib | 6302 | -11% | head to head |
Compare fib-tuned with any Go entry · Compare fib-tuned with any entry, in any language · Every Go entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry