ioio-uring

What exactly is io_uring?


Recently I've been seeing this in different forums. As far as I can tell from reading some forum discussions it is something to do with input and output. What exactly is io_uring?


Solution

  • io_uring is a (new as of mid 2019) Linux kernel interface to efficiently allow you to send and receive data asynchronously. It was originally designed to target block devices and files but has since gained the ability to work with things like network sockets.

    Unlike something like epoll(), it is built around a completion model rather than a readiness model. This is desirable because other operating systems have used the completion model successfully for some time. io_uring provides something competitive and complete for Linux without the drawbacks the previous Linux AIO interface has.

    The author of io_uring has written a PDF document titled Efficient IO with io_uring which discusses its usage in a technical fashion. A gentler introduction is provided by the Lord of the io_uring guide. You can read ScyllaDB developer Glauber Costa proselytize it in How io_uring and eBPF Will Revolutionize Programming in Linux. Lastly, LWN.net has written about io_uring many times.

    (Shameless plug: I've written a more linky answer on the "Is there really no asynchronous block I/O on Linux?" question)