The next deep magic Linux program to change the world? Io_uring
Even Torvalds pronounces it 'fairly sane'
Column A few years ago developers knew eBPF as a handy way to build firewalls yet now it's used everywhere for everything. Get ready for io_uring to do the same.
Most people don't know the first thing about Linux under the hood. Why should they? Linux, more so than most operating systems, just works. There's no need to poke inside it. But beneath the surface, there are programs such as eBPF that are transforming the infrastructure under the operating system we use every day.
As revealed this week, Microsoft chose to port eBPF into Windows rather than try to duplicate its functionality with its own program. io_uring may become the next Swiss-Army tool for Linux developers.
Io_uring allows Linux to launch an operation asynchronously and wait for its completion. Unlike its asynchronous I/O (AIO) subsystem, its predecessor, io_uring uses a memory ring buffer shared between user space and the Linux kernel. This enables it to submit operations and collect the results without needing time-expensive Linux kernel calls. Its API is complex, but if your applications require lots of I/O, you get rewarded with vastly improved performance.
When I say "lots" of I/O I mean massive I/O calls, gigabytes and beyond. And when I say "vastly improved," I mean even back in 2020, io_uring was up to 20 times faster than old-style Linux AIO.
That kind of speed boost makes developers stand up and take notice. As Glauber Costa, CEO and founder of ChiselStrike - a backend as-a-service company - said, "It fundamentally changes the way Linux applications are to be designed: Instead of a flow of code that issues syscalls when needed, that have to think about whether or not a file is ready, they naturally become an event-loop that constantly add things to a shared buffer, deals with the previous entries that completed, rinse, repeat."
Costa's not alone. At the Linux Foundation's Open Source Summit Europe in Dublin, senior Linux kernel developer Jonathan Corbet said in his State of the Linux Kernel summit speech that io_uring is a game changer. It would "make the boundary between user space and kernel space porous."
For most of Linux's existence, there was only a narrow slow bridge of system calls between slow user space and fast kernel space processes.
As Corbet said: This "allows you to do some pretty complex things by way of the ring. It is, in a sense, becoming a separate API to the current system that allows you to load some simple program into the kernel and execute it all asynchronously and just get the result when they happen. It's a very different approach to programming on Unix-type systems, and people are starting to do interesting things with it."
- Open source databases: What are they and why do they matter?
- Linux kernel's eBPF feature put to unexpected new uses
- PyTorch gets lit under The Linux Foundation
- Microsoft offers SQL Server 2022 release candidate to Linux world
In the future, he sees the two almost merging for programming purposes as io_uring's key memory ring buffer concept is used in other fundamental Linux programming processes.
In an interview at the Linux Plumbers Conference, held at the same time as Open Source Summit Europe, Linus Torvalds said that while io_uring is still new, "I think the technology is fairly sane. I think it has proven itself in small areas. And people are starting to say, 'Hey, I would like to use this tool!'"
Torvalds isn't as sure that io_uring will transform Linux programming, but he's not ruling it out, either.
So, if you're a serious Linux developer or just someone who builds High Performance Computing, Web servers, or DBMSs, check io_uring out. You'll be glad you did. ®