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.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥈 Silver | Test profile | Efficiency · Latency-10K | 2 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.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 5 of 45 | 6434 |
Every result
Alpha Round, 7 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,021,671 | 1.02ms | 1.57ms | 6433.2% | 1.4GiB |
| Connection | Short-lived | 4,096 | 2,716,498 | 1.37ms | 2.05ms | 5963.4% | 1.4GiB |
| Concurrency | Async Delay | 32,000 | 2,607,730 | 12.17ms | 49.10ms | 5819.5% | 1.7GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 76.7us | 112.0us | 30.7% | 1.3GiB |
| Efficiency | Latency-1M | 1,024 | 997,696 | 92.5us | 164.0us | 2322.6% | 1.3GiB |
| Workload | JSON TLS | 4,096 | 1,812,830 | 1.33ms | 32.83ms | 5976.3% | 1.4GiB |
| Workload | 8Gbit | 512 | 49,359 | 103.3us | 128.0us | 189.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.
| Entry | Composite | vs kron-native | |
|---|---|---|---|
| ktron | 7546 | +17% | head to head |
| edixoi-kt | 6774 | +5% | head to head |
| kron | 6634 | +3% | head to head |
| ktor-kronos | 5577 | -13% | head to head |
| genhttp-kt-netty | 5526 | -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