Field notes from the cave

ADR-0017: Buffer taxonomy — fixed head pool, inline small responses, and streaming I/O pools

Status: Accepted (2026-06-09).

Context

Two distinct kinds of RAM buffer were being conflated. They have different lifetimes and sizing, and treating them the same is what makes the current GET allocate (and copy) a whole object.

Decision

Consequences

Implementation status (2026-07-15)

Done: the fixed head pool, per-worker read IoBufferPools, one shared write-staging pool, streaming GET, streaming SET, the ≤16 KiB inline fast path, and pinned sendmsg for larger heads. The embedded library exposes the same ordered block stream as serial (pointer, length) callbacks while the server releases each lane on socket-send completion. IORING_OP_SEND_ZC and registered io_uring buffers remain possible measured follow-ups.