httparena-io_uring
Experimental · C · standard configuration · completeness 4/4
libioxd — an HTTP/1.1 server library in C23 on a thread-per-core io_uring runtime with stackful coroutines. Raw io_uring syscalls, no liburing: multishot accept and recv over provided buffer rings, one ring and one SO_REUSEPORT listener per worker; a handler reads as linear code and every wait - a body read, a timer, a send - parks the connection on the ring. TLS 1.3 handshakes in OpenSSL, records in the kernel (kTLS) on :8081. Static files are served from memory by the library's static module, checked against the disk per request; the dataset is parsed once with cJSON, serialized per request by the library's JSON writer, and coded by its compression middleware (brotli, gzip) when the client asks.
Achievements
🥇 1 Gold · 🥈 2 Silver · 🥉 3 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 | Test profile | Connection · Baseline | 1 of 19 |
| 🥈 Silver | Test profile | Connection · Short-lived | 2 of 19 |
| 🥈 Silver | Test profile | Workload · JSON Comp | 2 of 18 |
| 🥉 Bronze | Family composite | Composite · HTTP/1.1 | 3 of 19 |
| 🥉 Bronze | Test profile | Concurrency · Async Delay | 3 of 17 |
| 🥉 Bronze | Test profile | Workload · JSON TLS | 3 of 18 |
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 19 | 7347 |
Every result
Alpha Round, 11 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 | 4,212,470 | 971us | 1.32ms | 6424.5% | 573MiB |
| Connection | Short-lived | 4,096 | 2,734,486 | 1.35ms | 1.89ms | 5712.2% | 928MiB |
| Concurrency | Async Delay | 32,000 | 2,760,127 | 11.51ms | 12.90ms | 6361.0% | 2.6GiB |
| Efficiency | Latency-10K | 1,024 | 9,982 | 70.2us | 92.0us | 23.8% | 300MiB |
| Efficiency | Latency-1M | 1,024 | 997,661 | 88.2us | 157.0us | 2127.4% | 326MiB |
| Efficiency | Latency-500K/8 | 1,024 | 482,965 | 285930.0us | 2976768.0us | 799.5% | 120MiB |
| Workload | JSON Comp | 4,096 | 1,128,412 | 3.57ms | 8.87ms | 6798.2% | 884MiB |
| Workload | JSON Comp | 16,384 | 1,053,956 | 15.39ms | 21.80ms | 6764.9% | 2.1GiB |
| Workload | JSON TLS | 4,096 | 1,739,610 | 1.55ms | 139.80ms | 6008.3% | 874MiB |
| Workload | 8Gbit | 512 | 49,222 | 198.5us | 245.0us | 596.8% | 569MiB |
| Workload | Static TLS | 1,024 | 1,091,993 | 0.88ms | 25.44ms | 6438.3% | 524MiB |
Compared with
The C entries around httparena-io_uring on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs httparena-io_uring | |
|---|---|---|---|
| mongoose | 5870 | -20% | head to head |
| nginx | 4077 | -45% | head to head |
Compare httparena-io_uring with any C entry · Compare httparena-io_uring with any entry, in any language · Every C entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry