io_uring (previously known as aioring) is a
Linux kernel
The Linux kernel is a free and open-source, monolithic, modular, multitasking, Unix-like operating system kernel. It was originally authored in 1991 by Linus Torvalds for his i386-based PC, and it was soon adopted as the kernel for the GNU ope ...
system call interface for storage device
asynchronous I/O operations addressing performance issues with similar interfaces provided by functions like / or / etc. for
operations
Operation or Operations may refer to:
Arts, entertainment and media
* ''Operation'' (game), a battery-operated board game that challenges dexterity
* Operation (music), a term used in musical set theory
* ''Operations'' (magazine), Multi-Man ...
on data accessed by
file descriptor
In Unix and Unix-like computer operating systems, a file descriptor (FD, less frequently fildes) is a process-unique identifier (handle) for a file or other input/output resource, such as a pipe or network socket.
File descriptors typically have ...
s.
Development is ongoing, worked on primarily by
Jens Axboe at
Meta
Meta (from the Greek μετά, '' meta'', meaning "after" or "beyond") is a prefix meaning "more comprehensive" or "transcending".
In modern nomenclature, ''meta''- can also serve as a prefix meaning self-referential, as a field of study or ende ...
.
Interface
It works by creating two
circular buffers, called "queue rings", for storage of submission and completion of I/O requests, respectively. For storage devices, these are called the submission queue (SQ) and completion queue (CQ).
Keeping these buffers shared between the kernel and application helps to boost the
I/O performance by eliminating the need to issue extra and expensive system calls to copy these buffers between the two.
According to the io_uring design paper, the SQ buffer is writable only by consumer applications, and the CQ buffer is writable only by the kernel.
eBPF can be combined with io_uring.
History
The Linux kernel has supported
asynchronous I/O since version 2.5, but it was seen as difficult to use and inefficient. This older API only supported certain niche
use cases, notably it only enables asynchronous operation when using the O_DIRECT flag and while accessing already allocated files. This prevents utilizing the
page cache, while also exposing the application to complex O_DIRECT semantics. Linux AIO also does not support sockets, so it cannot be used to multiplex network and disk I/O.
The io_uring kernel interface was adopted in Linux kernel version 5.1 to resolve the deficiencies of Linux AIO.
The library provides an
API to interact with the kernel interface easily from
userspace.
Security
io_uring has been noted for exposing a significant attack surface and structural difficulties integrating it with the
Linux security subsystem.
In June 2023, Google's security team reported that 60% of Linux kernel
exploits submitted to their
bug bounty program in 2022 were exploits of io_uring vulnerabilities. As a result, io_uring was disabled for apps in
Android
Android may refer to:
Science and technology
* Android (robot), a humanoid robot or synthetic organism designed to imitate a human
* Android (operating system), Google's mobile operating system
** Bugdroid, a Google mascot sometimes referred to ...
, and disabled entirely in
ChromeOS as well as Google servers.
Docker also consequently disabled io_uring from their default
seccomp profile.
References
External links
Efficient I/O with io_uring in-depth description of motivation behind io_uring, interface (data structures etc.), and performance assessment
source repository source directory in the Linux kernel repository
{{Linux kernel
Interfaces of the Linux kernel
Linux kernel features
Articles with underscores in the title