Skip to content

Release 3.5.0 — Linux io_uring Backend

Choose a tag to compare

@g2px1 g2px1 released this 29 Nov 14:27
· 96 commits to main since this release
374cb56

Release 3.5.0 — Linux io_uring Backend

Overview

This release introduces a new io_uring-based backend for Linux, providing an alternative to the existing epoll engine.
It integrates directly into Uvent’s coroutine I/O pipeline and keeps the same high-level API, adding a lower-overhead I/O submission path on modern kernels.

Changes

New io_uring backend

  • Added:

    • SocketLinuxIOUring
    • IOUringPoller
  • Supports:

    • recv / send via SQEs
    • accept via SQEs
    • completion-queue–driven coroutine resumption
    • proper timeout, disconnect, and refcount handling
  • Fully compatible with:

  TCPServerSocket
  TCPClientSocket
  UDPSocket
  • Enabled explicitly during build:

    cmake -DUVENT_ENABLE_IO_URING=ON ..
  • Fallback remains epoll when the flag is disabled.

Internal I/O path cleanup

  • Separated Linux socket layer into:

    • SocketLinux (epoll)
    • SocketLinuxIOUring (io_uring)
  • No impact on external APIs.


Impact

  • No public API changes.
  • Existing applications work unchanged.
  • Linux users can opt-in to io_uring for lower syscall overhead.
  • All other platforms remain unaffected.

Notes

  • io_uring requires Linux kernel 5.1+ (recommended ≥ 5.10) and liburing.
  • epoll stays the default backend unless explicitly overridden.