zix
Engine · Zig
Zig HTTP/1.1 server on the zix.Http1 raw engine (no std.http). Shared-nothing: each worker runs its own SO_REUSEPORT multishot accept plus io_uring completion loop and owns its connections. The /json endpoint serves from the per-worker response cache, and request bodies larger than the read buffer are drained rather than buffered.
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. 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 | 8 of 34 | 200 |
| HTTP/3 | 1 of 3 | 200 |
| gRPC | 1 of 3 | 397 |
| WebSocket | 1 of 9 | 293 |
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 | 512 | 4,217,982 | 120us | 231us | 6348.6% | 130MiB |
| Connection | Baseline | 4,096 | 4,492,613 | 911us | 1.19ms | 6413.1% | 186MiB |
| Connection | Pipelined | 512 | 53,609,380 | 152us | 344us | 6399.9% | 134MiB |
| Connection | Pipelined | 4,096 | 55,979,164 | 1.17ms | 1.79ms | 6454.4% | 186MiB |
| Connection | Short-lived | 512 | 2,740,199 | 170us | 403us | 5474.7% | 150MiB |
| Connection | Short-lived | 4,096 | 2,751,069 | 1.35ms | 1.89ms | 5783.9% | 237MiB |
| Workload | JSON | 4,096 | 2,348,626 | 614us | 2.75ms | 5365.1% | 290MiB |
| Workload | Upload | 32 | 8,185 | 3.88ms | 10.90ms | 1065.4% | 124MiB |
| Workload | Upload | 256 | 6,661 | 38.12ms | 45.10ms | 943.2% | 130MiB |
| Workload | Static | 1,024 | 2,025,521 | 300.92us | 3.21ms | 5488.4% | 140MiB |
| Workload | Static | 4,096 | 2,036,680 | 1.05ms | 7.16ms | 5503.2% | 195MiB |
| Workload | Static | 6,800 | 1,986,456 | 1.75ms | 5.18ms | 5269.1% | 241MiB |
| HTTP/3 | Baseline | 64 | 9,573,685 | 413us | 757us | 1283.3% | 416MiB |
| HTTP/3 | Static | 64 | 611,890 | 3.31ms | 10.22ms | 2905.3% | 403MiB |
| gRPC | Unary | 256 | 7,184,950 | 2.14ms | 7.04ms | 2759.8% | 177MiB |
| gRPC | Unary | 1,024 | 7,086,857 | 8.21ms | 115.65ms | 2788.5% | 204MiB |
| gRPC | Unary TLS | 256 | 6,974,353 | 2.22ms | 9.41ms | 2772.0% | 208MiB |
| gRPC | Unary TLS | 1,024 | 6,918,992 | 7.64ms | 70.37ms | 2777.3% | 249MiB |
| gRPC | Stream | 64 | 9,692,000 | 127.87ms | 476.08ms | 33.7% | 98MiB |
| gRPC | Stream TLS | 64 | 9,668,000 | 126.69ms | 392.10ms | 36.0% | 102MiB |
| WebSocket | Echo | 512 | 4,361,456 | 116us | 209us | 6407.8% | 207MiB |
| WebSocket | Echo | 4,096 | 4,607,533 | 888us | 1.18ms | 6411.3% | 255MiB |
| WebSocket | Echo | 16,384 | 4,296,243 | 3.79ms | 4.41ms | 6118.7% | 499MiB |
| WebSocket | Echo Pipelined | 512 | 60,350,513 | 135us | 304us | 6361.1% | 212MiB |
| WebSocket | Echo Pipelined | 4,096 | 67,064,433 | 974us | 2.03ms | 6176.8% | 267MiB |
| WebSocket | Echo Pipelined | 16,384 | 55,172,806 | 4.73ms | 8.82ms | 6399.5% | 500MiB |
| WebSocket | Echo Short-lived | 512 | 2,260,961 | 115us | 340us | 5225.9% | 178MiB |
| WebSocket | Echo Short-lived | 4,096 | 2,579,824 | 1.02ms | 1.75ms | 5878.9% | 282MiB |
How the benchmark is run · The machine · Add or fix an entry