Field notes from the cave

ADR-0002: Per-worker io_uring rings and striped parallel reads

Status: Accepted (2026-06-09), revised 2026-07-15 — revisable.

Context

Early framing spoke of “per-drive queues.” That conflates two things. An io_uring ring is a per-thread submission/completion structure; a read is (ring, fd, offset, len, buffer). A drive is just an fd. There is no hardware reason a ring must belong to a drive.

Decision

liburing availability

Code still compiles with a stub reactor when GOBLIN_HAVE_URING is unset, which supports logic tests but cannot serve traffic. A serving build needs liburing-dev; Linux 5.19 is the project’s current io_uring support floor.

Consequences