Awesome io_uring
io_uring is considered one of the most revolutionary interfaces
for the linux kernel, find out why.
In this repository we try to collect examples, tutorials and documentation about this amazing project, to raise awarness and knowledge.
Table of contents
Tutorials
Tutorials about io_uring
- io_uring and networking in 2023: tutorial written by Jens Axboe, the creator of
io_uring
C
- Lord of the
io_uring: Amazing collection of tutorials with deep explanations, unfortunately not updated often.
Zig
Libraries
Libraries for using io_uring
C
- liburing: Helper to interact with the kernel
io_uringinterface - xnvme: NVMe library with
io_uringsupport - SPDK: Intel library focused on performant io, with
io_uringsupport - libev: High performance event loop
- ioucontext:
io_uringwithucontextfibers
C++
- Seastar: Asynchronous event-driven framework
- liburing4cpp: Binding for
io_uringwith coroutines support - ubdsrv: Userspace block device driver
using
io_uring - libunifex: Facebook prototype for cpp async programming model
D
- during: An
io_uringimplementation in pure Dlang
Rust
- tokio-uring: An
io_uringbackend fortokio - io-uring: From the authors of
tokio, withouttokiodependency - nuclei: Reactor agnostic Proactive IO engine using
io_uring - compio: A single threaded async runtime using
io_uringon Linux if available. - rio: Pure rust
io_uringlibrary, unfortunately unmaintained - Ringbahn:
io_uringlibrary from Berlin. Unfortunately unmaintained.
Golang
- rio - AIO network library based on
io_uring, non CGO, and following standard library usage design patterns. - gain - A high-performance, lightweight
io_uringnetworking framework written entirely in Go. - gouring: Amazing
io_uringlibrary in pure golang - iouring-go: Async interface for
io_uring
Javascript
- Bun: Bun has support for
io_uring - Nodejs: Issue tracking
io_uringsupport - Deno: Issue tracking
io_uringsupport
Python
Java
- Jasyncfio: Async io library
- nio_uring: Async io library
- Netty transport
- PanamaUring :Use java Panama ffi api to provide io_uring binding for java without using jni binding, while unifying the models of file IO and network IO, and providing an easy-to-use asynchronous IO API
Kotlin
- kuring: Async io library
Ocaml
- ocaml-uring:
io_uringbindings for OCaml
Projects
Projects using io_uring
Databases
- ClickHouse
- Postgres (experimental)
- questdb
- Scylladb
- Yottastore
Storage engines
Network
Other
Articles
Articles about io_uring
- Why you should use
io_uring - Efficient IO with
io_uring - Ringing in a new asynchronous I/O API
- How io_uring and eBPF Will Revolutionize Programming in Linux
- Experiments with io_uring
- IO_uring Fixed Buffer Versus Non-Fixed Buffer Performance Comparison on NVMe
- Missing manuals - io_uring worker pool
- io_uring in Android OTA: Linux plumbers conference 2022 presentation
- A journey to io_uring, AIO and modern storage devices: includes experiments on Optane storage
Videos
Other notable resources
Other resources about io_uring
- IRC channel:
discussions about
io_uring. You can find the archives here - Mailing list: The official dev mailing list of
io_uring - Stackoverflow:
io_uringtagged questions and answers on stackoverflow