The current read/write path of std.Io for the io_uring backend issues unregistered READ / READV / WRITE/ WRITEV SQEs with a caller-supplied buffer pointer and buf_index = 0. There's no use of registered/fixed buffers (IORING_REGISTER_BUFFERS + READ_FIXED/WRITE_FIXED).
Unregistered SQEs suffer from a performance penalty. For repeated I/O against a long-lived buffer, fixed buffers let the kernel skip per-op page pinning, which measurably reduces CPU for small/frequent I/O. Using registered SQEs could improve performance and is considered the expected model to use io_uring. A Reader's internal buffer looks like a near-ideal candidate: allocated once, reused across many fills, contiguous. My thought is that an API could be added to register an Io to the io_uring upfront.
I wanted to raise this as a possible optimization but also flag a design wrinkle I don't have a clean answer to: The backend uses per-thread rings plus a work-stealing scheduler (findReadyFiber/steal_ready_search). Registered-buffer tables are per-ring, and a buf_index is only valid on the ring it was registered against. If a fiber registers its buffer on thread A's ring and is later stolen by thread B, a READ_FIXED issued on B's ring would reference the wrong/unregistered slot. The ring init already does ATTACH_WQ, but that shares the worker pool, not the buffer table. A solution is to pin Io to its registered ring, but it works against the work-stealing design.