HttpArena
Frameworks

kron-native

Engine · Kotlin · engine: io_uring

kron-native — the kron entry on Kotlin/Native: edixoi on kron, the Kotlin port of the ioxide io_uring runtime, on its raw recv/send API and nothing above it, as one native binary with no JVM (the Dockerfile's KRON_RUNTIME build arg, set to native); the kron entry runs the same code, at the same kron commit, on the JVM. One reactor per core, each owning its ring and its share of the SO_REUSEPORT listeners; multishot accept and recv into provided buffer rings, the ring driven by hand from Kotlin over the kernel's own io_uring header through cinterop (no liburing). Handlers are Kotlin suspend functions that the reactor resumes inline on the thread that took the completion, with no dispatcher and no thread pool. The HTTP/1.1 handling (request line, query string, case-insensitive headers, Content-Length and chunked bodies, keep-alive, pipelining, reads fragmented across recv boundaries) is edixoi's, ported to Kotlin — no framework, no router. One handler answers on both doors: plaintext on :8080, and TLS on :8081 for json-tls and the 8gbit echo, terminated with BoringSSL linked into the binary, with kernel TX offload where the kernel has the tls module and BoringSSL receive. The async profile's wait is an IORING_OP_TIMEOUT on the reactor's ring, so a held connection costs a kernel deadline rather than a thread. Companion to kron (the same code on the JVM), edixoi (C#) and edixoi-kt, which serve the same profiles.

Achievements

🥈 1 Silver. 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.

MedalAwardFieldRank
🥈 SilverTest profileEfficiency · Latency-10K2 of 43

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.

FamilyRankComposite
HTTP/1.15 of 456434

Every result

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

CategoryProfileConnsReq/secAvgp99CPUMemory
ConnectionBaseline4,0964,021,6711.02ms1.57ms6433.2%1.4GiB
ConnectionShort-lived4,0962,716,4981.37ms2.05ms5963.4%1.4GiB
ConcurrencyAsync Delay32,0002,607,73012.17ms49.10ms5819.5%1.7GiB
EfficiencyLatency-10K1,0249,98376.7us112.0us30.7%1.3GiB
EfficiencyLatency-1M1,024997,69692.5us164.0us2322.6%1.3GiB
WorkloadJSON TLS4,0961,812,8301.33ms32.83ms5976.3%1.4GiB
Workload8Gbit51249,359103.3us128.0us189.2%3.4GiB

Compared with

The Kotlin entries around kron-native on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.

EntryCompositevs kron-native
ktron7546+17%head to head
edixoi-kt6774+5%head to head
kron6634+3%head to head
ktor-kronos5577-13%head to head
genhttp-kt-netty5526-14%head to head

Compare kron-native with any Kotlin entry · Compare kron-native with any entry, in any language · Every Kotlin entry, ranked

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