HttpArena
Frameworks

ioxide

Engine · C# · engine: io_uring

ioxide — a shared-nothing io_uring runtime for .NET, consumed as its published NuGet packages (ioxide, ioxide.pg, ioxide.file, ioxide.http2, ioxide.ngtcp2, ioxide.nghttp3). One ring per reactor thread: multishot accept/recv into provided buffer rings, inline IValueTaskSource continuations, raw-syscall io_uring (no liburing). The HTTP/1.1 handler (request line, headers, Content-Length + chunked bodies, keep-alive, pipelining, fragmented reads) is hand-written on the raw recv/send API; TLS terminates ring-natively (kTLS transmit offload, OpenSSL receive) on :8081, h2 over TLS (pure-C# ioxide.http2) on :8443, and HTTP/3 over QUIC (ngtcp2 + nghttp3) on udp:8443; async-db rides ioxide.pg's ring-native pooled Postgres driver (SCRAM-SHA-256), static on h1 reads the file descriptor straight into the connection's write slab (ioxide.file hands out descriptors, not bytes), so header and body leave in one flush with no intermediate buffer; h2/h3 serve the same assets from memory.

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.

FamilyRankComposite
HTTP/1.11 of 34381
HTTP/24 of 6172
HTTP/32 of 3127

Every result

Alpha Round, 29 runs. Requests per second is the best of three; latency, CPU and memory come from that run.

CategoryProfileConnsReq/secAvgp99CPUMemory
ConnectionBaseline5124,071,966125us243us6324.4%267MiB
ConnectionBaseline4,0964,108,420997us1.43ms6401.5%337MiB
ConnectionPipelined51253,313,475153us365us6408.6%226MiB
ConnectionPipelined4,09654,413,2281.20ms1.69ms6434.9%338MiB
ConnectionShort-lived5122,481,833191us769us5294.0%324MiB
ConnectionShort-lived4,0962,542,3051.49ms4.69ms5375.2%494MiB
WorkloadJSON4,0961,710,8011.72ms14.70ms5975.3%815MiB
WorkloadJSON Comp512943,786506us2.44ms5915.9%538MiB
WorkloadJSON Comp4,096913,8604.43ms21.60ms6335.2%1.3GiB
WorkloadJSON Comp16,384907,18417.92ms71.10ms5983.2%4.9GiB
WorkloadJSON TLS4,0961,789,1651.94ms69.63ms6399.1%1.1GiB
WorkloadUpload322,41413.22ms61.30ms1984.0%440MiB
WorkloadUpload2562,405103.72ms464.80ms4904.1%567MiB
WorkloadStatic1,024927,2581.07ms11.91ms6547.0%340MiB
WorkloadStatic4,096907,6924.53ms83.93ms6284.4%677MiB
WorkloadStatic6,800879,6147.74ms77.37ms6226.4%903MiB
WorkloadStatic TLS1,0241,129,365820.40us23.34ms6327.0%480MiB
WorkloadStatic TLS4,096778,9645.20ms113.03ms6358.9%1002MiB
WorkloadStatic TLS6,800677,57510.00ms189.64ms6254.4%1.7GiB
DatabaseAsync DB1,024361,7612.21ms16.70ms2988.9%405MiB
DatabaseCRUD4,096832,2804.55ms29.20ms3371.2%656MiB
Multi-endpointAPI-425672,0581.45ms9.40ms283.8%133MiB
Multi-endpointAPI-161,024246,3522.03ms17.40ms1178.1%311MiB
HTTP/2Baseline25610,334,5922.08ms12.66ms4283.1%438MiB
HTTP/2Baseline1,02412,269,2876.79ms94.65ms5043.5%698MiB
HTTP/2Static2561,145,0727.31ms50.05ms5824.3%683MiB
HTTP/2Static1,024923,69834.22ms155.97ms5692.8%1.5GiB
HTTP/3Baseline643,777,6031.11ms2.32ms3366.4%261MiB
HTTP/3Static64534,7798.48ms17.11ms3347.6%808MiB

How the benchmark is run · The machine · Add or fix an entry