Skip to main content

Module io_uring

Module io_uring 

Source
Expand description

§io_uring Advanced Optimization

Implements advanced io_uring optimizations including SQPOLL mode, registered buffers, IOPOLL mode, and per-core ring management for sub-microsecond I/O latency.

§Features

  • SQPOLL Mode: Eliminates syscalls by using a dedicated kernel polling thread
  • Registered Buffers: Avoids per-operation buffer mapping overhead
  • IOPOLL Mode: Polls completions directly from NVMe queue (no interrupts)
  • Per-Core Rings: Each core has its own io_uring instance for thread-per-core
  • Three-Ring I/O: Separate latency/main/poll rings for optimal scheduling

§Research Background

From TU Munich (Dec 2024): Basic io_uring yields only 1.06-1.10x improvement, while careful optimization achieves 2.05x or more.

§Platform Support

This module is Linux-only (io_uring requires Linux 5.10+, advanced features need 5.19+). On other platforms, a no-op fallback is provided.

§Example

use laminar_core::io_uring::{IoUringConfig, CoreRingManager};

let config = IoUringConfig::builder()
    .ring_entries(256)
    .enable_sqpoll(true)
    .sqpoll_idle_ms(1000)
    .buffer_size(64 * 1024)
    .buffer_count(256)
    .build();

let mut manager = CoreRingManager::new(0, &config)?;

// Submit and poll I/O operations
let user_data = manager.submit_read(fd, offset, len)?;
let completions = manager.poll_completions();

§Three-Ring I/O

For optimal latency/throughput balance, use the three-ring reactor:

use laminar_core::io_uring::three_ring::{ThreeRingConfig, ThreeRingReactor};

let config = ThreeRingConfig::builder()
    .latency_entries(256)
    .main_entries(1024)
    .build()?;

let mut reactor = ThreeRingReactor::new(0, config)?;
// Latency ring for network, main ring for WAL, poll ring for NVMe

Structs§

Completion
Completion result from an io_uring operation.
CoreRingManager
Per-core io_uring manager.
IoUringConfig
Configuration for io_uring operations.
IoUringConfigBuilder
Builder for IoUringConfig.
IoUringRing
Wrapper around io_uring with mode information.
RegisteredBufferPool
A pre-registered buffer pool for io_uring operations.
RingMetrics
Metrics for ring operations.

Enums§

CompletionKind
Kind of completion for quick matching.
IoUringError
Errors that can occur during io_uring operations.
PendingOp
Pending operation types for tracking.
RingMode
Ring operation mode.

Functions§

advanced_kernel_version
Get the kernel version required for advanced features (IOPOLL, passthrough).
is_available
Check if io_uring is available on this platform.
min_kernel_version
Get the minimum kernel version required for basic io_uring features.