genhttp-ioxide
Emerging · C# · engine: ioxide · tuned configuration · completeness 4/4
GenHTTP 11 on .NET 11 on a custom io_uring server engine (the ioxide runtime) instead of the default socket engine. Built from the GenHTTP 11 preview 24 packages, which carry the merged ioxide engine branch (PR #887): TLS is terminated in the engine itself, with HTTP/2 and HTTP/3: :8080 is HTTP/1.1, :8082 h2c, :8081 HTTP/1.1 over TLS, and :8443 serves HTTP/1.1 and HTTP/2 over TCP plus HTTP/3 over QUIC on the same port. Static is served by IoxideFiles, which reads bodies positionally off the io_uring ring through a per-reactor descriptor snapshot; responses go through GenHTTP's own routing + serialization; Postgres rides ioxide.pg (per-reactor ring-native pool).
Achievements
🥇 10 Gold · 🥈 1 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/1.1 | 1 of 93 |
| 🥇 Gold | Family composite | Composite · WebSocket | 1 of 25 |
| 🥇 Gold | Within its language | C# · HTTP/1.1 | 1 of 11 |
| 🥇 Gold | Within its language | C# · HTTP/2 | 1 of 4 |
| 🥇 Gold | Within its language | C# · HTTP/3 | 1 of 4 |
| 🥇 Gold | Within its language | C# · WebSocket | 1 of 7 |
| 🥇 Gold | Test profile | Connection · Baseline | 1 of 93 |
| 🥇 Gold | Test profile | Connection · Short-lived | 1 of 93 |
| 🥇 Gold | Test profile | HTTP/2 · Baseline | 1 of 27 |
| 🥇 Gold | Test profile | HTTP/2 · Baseline (h2c) | 1 of 20 |
| 🥈 Silver | Family composite | Composite · HTTP/2 | 2 of 28 |
| 🥉 Bronze | Family composite | Composite · HTTP/3 | 3 of 11 |
| 🥉 Bronze | Test profile | HTTP/2 · JSON (h2c) | 3 of 20 |
| 🥉 Bronze | Test profile | HTTP/3 · Baseline | 3 of 11 |
| 🥉 Bronze | Test profile | WebSocket · Echo Pipelined | 3 of 21 |
| 🥉 Bronze | Test profile | WebSocket · Echo Short-lived | 3 of 11 |
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 93 | 7074 |
| HTTP/2 | 2 of 28 | 3313 |
| HTTP/3 | 3 of 11 | 1378 |
| WebSocket | 1 of 25 | 2627 |
Every result
Alpha Round, 32 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,169,320 | 1.29ms | 4.48ms | 5726.6% | 1.5GiB |
| Connection | Pipelined | 4,096 | 21,292,176 | 3.08ms | 8.65ms | 6017.2% | 1.4GiB |
| Connection | Short-lived | 4,096 | 2,575,109 | 1.51ms | 5.27ms | 5878.6% | 1.6GiB |
| Concurrency | Async Delay | 32,000 | 1,899,663 | 16.71ms | 27.50ms | 5963.7% | 2.4GiB |
| Efficiency | Latency-10K | 1,024 | 9,979 | 81.3us | 104.0us | 24.5% | 1.3GiB |
| Efficiency | Latency-1M | 1,024 | 998,148 | 140.0us | 1368.0us | 2524.3% | 1.3GiB |
| Efficiency | Latency-500K/8 | 1,024 | 449,733 | 924397.1us | 3507200.0us | 748.5% | 350MiB |
| Workload | JSON Comp | 4,096 | 570,619 | 7.16ms | 24.00ms | 6233.6% | 1.8GiB |
| Workload | JSON Comp | 16,384 | 561,153 | 28.96ms | 59.90ms | 5964.0% | 2.1GiB |
| Workload | JSON TLS | 4,096 | 971,077 | 4.37ms | 88.55ms | 5966.2% | 2.1GiB |
| Workload | 8Gbit | 512 | 49,376 | 128.3us | 1066.0us | 268.8% | 3.5GiB |
| Workload | Static TLS | 1,024 | 691,531 | 1.57ms | 41.58ms | 6030.9% | 1.6GiB |
| Database | Async DB | 1,024 | 282,558 | 3.04ms | 10.70ms | 3507.2% | 1.6GiB |
| HTTP/2 | Baseline | 256 | 7,903,280 | 3.03ms | 17.16ms | 5277.4% | 1.6GiB |
| HTTP/2 | Baseline | 1,024 | 7,450,891 | 12.88ms | 82.41ms | 5247.2% | 1.7GiB |
| HTTP/2 | Static | 256 | 510,309 | 17.99ms | 98.59ms | 6119.8% | 1.7GiB |
| HTTP/2 | Static | 1,024 | 475,101 | 65.57ms | 179.27ms | 6284.8% | 3.2GiB |
| HTTP/2 | Baseline (h2c) | 256 | 7,963,804 | 3.08ms | 20.71ms | 5031.1% | 1.4GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 8,172,712 | 11.88ms | 53.77ms | 5459.9% | 1.6GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 8,895,784 | 46.32ms | 249.17ms | 5551.4% | 1.9GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 1,772,215 | 18.24ms | 98.02ms | 6053.8% | 1.7GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 1,731,558 | 74.57ms | 272.25ms | 5801.1% | 2.5GiB |
| HTTP/3 | Baseline | 64 | 1,877,990 | 2.40ms | 6.46ms | 4177.0% | 444MiB |
| HTTP/3 | Static | 64 | 240,809 | 19.85ms | 45.62ms | 3981.8% | 1.0GiB |
| WebSocket | Echo | 512 | 3,475,722 | 146us | 359us | 5962.9% | 1.3GiB |
| WebSocket | Echo | 4,096 | 3,577,655 | 1.14ms | 4.22ms | 6007.7% | 1.5GiB |
| WebSocket | Echo | 16,384 | 3,108,213 | 5.24ms | 15.20ms | 5669.6% | 2.1GiB |
| WebSocket | Echo Pipelined | 512 | 39,418,003 | 207us | 1.58ms | 5759.5% | 1.3GiB |
| WebSocket | Echo Pipelined | 4,096 | 39,567,478 | 1.66ms | 7.33ms | 6048.1% | 1.5GiB |
| WebSocket | Echo Pipelined | 16,384 | 33,127,264 | 7.85ms | 20.80ms | 5729.1% | 2.0GiB |
| WebSocket | Echo Short-lived | 512 | 1,992,526 | 155us | 519us | 5376.8% | 1.4GiB |
| WebSocket | Echo Short-lived | 4,096 | 2,373,603 | 1.21ms | 6.06ms | 5742.1% | 1.6GiB |
Compared with
The C# entries around genhttp-ioxide on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs genhttp-ioxide | |
|---|---|---|---|
| edixoi | 6810 | -4% | head to head |
| ioxide-pipes | 6448 | -9% | head to head |
Compare genhttp-ioxide with any C# entry · Compare genhttp-ioxide with any entry, in any language · Every C# entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry