{
  "slug": "io-uring-registered-buffers",
  "term": "io_uring registered buffers",
  "aliases": [
    "io_uring fixed buffers"
  ],
  "definition": "io_uring registered buffers are application-memory regions registered with a ring and selected by index for supported fixed-buffer operations.",
  "note": "Registration: io_uring_register_buffers registers an iovec array for later fixed-buffer operations. Reusing those regions can avoid repeated mapping and page-reference work, notably with O_DIRECT I/O; registration does not itself open a file with O_DIRECT or guarantee a workload speedup. [buffers-register]\n\nSelection: io_uring_prep_read_fixed uses buf_index to choose a registered region. The requested address and byte length must lie within that region; a subrange is allowed. This index is not a provided-buffer group ID or a selected buffer ID returned in CQE flags. [buffers-fixed] [buffers-provide]\n\nCompletion: choosing registered memory does not establish that a read transferred every requested byte. Inspect the operation result and keep in-flight payload memory valid. Registration, request completion and the application's decision to reuse the payload are separate responsibilities. [buffers-fixed] [overview]\n\nMemory cost: the liburing 2.8 registration manual describes locked buffers charged against RLIMIT_MEMLOCK. Registering only part of a huge page still pins the whole huge page. Ring teardown can complete asynchronously, so closing the ring is not evidence that its pages were immediately unpinned. Size and measure the registered pool separately from each request's byte count. [buffers-memory]",
  "status": "shipping",
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-08",
  "provenance": [
    "Primary documentation and pinned Linux v6.16 ABI review; no native kernel execution, performance benchmark or durability experiment."
  ],
  "advantages": [],
  "limitations": [
    {
      "text": "A fixed-buffer request must stay within its selected registered region; registration does not relax other I/O requirements.",
      "citationIds": [
        "buffers-fixed"
      ]
    },
    {
      "text": "Registering a provided-buffer ring does not register its payloads for fixed-buffer I/O; a group ID is not a fixed-buffer index.",
      "citationIds": [
        "buffers-ring-register",
        "buffers-register"
      ]
    }
  ],
  "related": [
    "io-uring",
    "io-uring-provided-buffers",
    "io-uring-cqe",
    "direct-io"
  ],
  "citations": [
    {
      "id": "buffers-register",
      "title": "liburing 2.8: registration and fixed-buffer mapping",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.8/man/io_uring_register_buffers.3",
      "accessed": "2026-11-08"
    },
    {
      "id": "buffers-fixed",
      "title": "liburing 2.8: registered index and permitted subranges",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.8/man/io_uring_prep_read_fixed.3",
      "accessed": "2026-11-08"
    },
    {
      "id": "buffers-provide",
      "title": "liburing 2.8: buffer groups and selected IDs",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.8/man/io_uring_prep_provide_buffers.3",
      "accessed": "2026-11-08"
    },
    {
      "id": "overview",
      "title": "liburing 2.8: io_uring(7), payload-buffer lifetime",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.8/man/io_uring.7",
      "accessed": "2026-11-08"
    },
    {
      "id": "buffers-memory",
      "title": "liburing 2.8: io_uring_register(2), locked memory and asynchronous teardown",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.8/man/io_uring_register.2",
      "accessed": "2026-11-08"
    },
    {
      "id": "hesela-buffers",
      "title": "Hesela: fixed buffers and provided-buffer ownership",
      "url": "https://hesela.com/analyses/io-uring-completion-ordering-durability/#buffer-selection",
      "accessed": "2026-11-08"
    },
    {
      "id": "buffers-ring-register",
      "title": "liburing 2.8: provided-buffer descriptor-ring registration",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.8/man/io_uring_register_buf_ring.3",
      "accessed": "2026-11-08"
    }
  ]
}
