io-uring

Implements Linux io_uring async I/O operations in C and Rust.

Updated Aug 5, 2026
One-click install
npx skills add https://github.com/harivansh-afk/loom-index-e2e --skill io-uring-harivansh-afk
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: io-uring
Source: https://github.com/harivansh-afk/loom-index-e2e/tree/main/skills/io-uring
Command: npx skills add https://github.com/harivansh-afk/loom-index-e2e --skill io-uring-harivansh-afk

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Writing high-performance asynchronous I/O on Linux requires navigating io_uring's submission and completion queue model, which differs significantly from traditional blocking or epoll-based I/O. This Skill provides the setup patterns, operation references, and best practices needed to write correct io_uring code in C or Rust. ## Core Features & Use Cases - C (liburing) Reference: Covers ring setup, submit-and-wait patterns, common operations (read, write, accept, connect, timeout), and registered buffers/files for zero-copy I/O. - Rust (tokio-rs/io-uring) Reference: Covers IoUring setup, opcode builders, submission/completion queue access, and the entry builder pattern with user_data and flags. - Kernel Version Guidance: Maps io_uring features to kernel versions (5.1 through 6.0) so you know which operations your target kernel supports. - Use Case: You are building a high-throughput network server in Rust and need to batch socket accept and recv operations with minimal syscall overhead. Use this Skill to set up the ring, push Accept and Recv opcodes, and process completions with user_data context. ## Quick Start Use the io-uring skill to write a Rust program that reads a file asynchronously using the tokio-rs/io-uring crate with a 256-entry ring.

Frequently Asked Questions about io-uring

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I use io_uring in Rust?▼

Use the tokio-rs/io-uring crate: create an IoUring instance with a queue size, build operations with opcode constructors like opcode::Read, push them onto the submission queue, then call submit_and_wait and read results from the completion queue.

How do I set up io_uring with liburing in C?▼

Call io_uring_queue_init with a queue depth and a pointer to struct io_uring. Get an SQE with io_uring_get_sqe, prepare it with functions like io_uring_prep_read, submit with io_uring_submit, and wait for results with io_uring_wait_cqe.

What kernel version do I need for io_uring?▼

Basic read, write, and fsync operations require kernel 5.1. Accept, connect, send, and recv need 5.5, statx needs 5.7, and zero-copy send requires 5.19. Check your target kernel before using newer operations.

liburing vs tokio-rs/io-uring: which should I use?▼

liburing is the reference C library maintained by io_uring's author and exposes the full API directly. The tokio-rs/io-uring crate provides the same low-level ring access for Rust with an entry builder pattern and raw fd types.

Why does io_uring submission fail with EAGAIN?▼

EAGAIN occurs when the submission queue is full or the completion queue overflows. Check available SQ slots before pushing entries, consume CQEs promptly with io_uring_cqe_seen, and size the ring appropriately for your workload.

When should I use registered buffers in io_uring?▼

Register buffers and files with io_uring_register_buffers and io_uring_register_files on hot paths to avoid per-operation mapping overhead. Use IOSQE_FIXED_FILE and fixed buffer operations like io_uring_prep_read_fixed to reference them.