For people who are curious before/after reading it, this is from 2019, there are updates the io_uring interface in Linux, quite a few actually, here's a changelog of liburing kind of the defacto library for io_uring.
https://github.com/axboe/liburing/compare/liburing-0.4...lib...
Actually, io_uring has received around 500 commits just in 2022.
Here's a list of interesting feature additions(this year),
That last line is interesting to me, one of the (admittedly few) things Windows had over Linux when it comes to being able to write extremely high performant software in an easy way was IOCP (IO completion ports), epoll on Linux was awkward to use and hard to get right.
I’ve never managed to do a comparison of io_uring vs IOCP but I guess there was some benefit here, I left that job before io_uring was mature.
Would anyone be willing to share a comparison of the two systems?
Windows did already have async ("overlapped") IO, and a completion aggregator (IOCP) kind of like io_uring. What Windows didn't have, and the reason they're now adding their own IORing, is the ability to submit batches of operations in a single system call. Batching operations to reduce system calls on the submission side is one of the most important features of io_uring.
The Windows IORing is only storage today, but hopefully becomes a generic system for making batched, async system calls just like on Linux.
Windows already had a uring like API for sockets called registered I/O. It was specifically designed to overcome IOCP limitations
Edit: you can read about it by googling for the original RIO presentation, but the gist is that at very high packet rates the completion signaling and locking/unlocking buffers for I/O cause a lot of overhead and RIO mitigates that by preregistering buffers
I think that highlights one of the issues with Linux being essentially just another clone of Unix, and thus being constrained by its limitations - both technically and in mindset of its developers.
Whereas NT was a fresh new design, by seasoned operating systems designers and implementers, who had seen the shortcomings of the Unix model (and others) and not only knew what to do differently to improve on these, but actually wanted to and were permitted to as well.
Windows NT was not a fresh new design but a direct evolution of VMS, which had it's own history independent of Unix. That it steered clear of Unix's shortcomings is a result of a design process that's much less napkin-based and more "engineered" for better and worse.
nice , it seems a lot of improvements going in recent kernels.
Would be nice if it is fully adopted by python asyncio and js (PR for node was 4 years already , it seems stucked there)
Actually, io_uring has received around 500 commits just in 2022. Here's a list of interesting feature additions(this year),
- https://www.phoronix.com/news/Linux-LPC2022-io_uring_spawn
- https://www.phoronix.com/news/Linux-520-XFS-uring-Async-Buff
- https://www.phoronix.com/news/Linux-5.20-IO_uring-ZC-Send
- https://www.phoronix.com/news/Linux-5.19-IO_uring
io_uring like API was also adopted by Windows recently. Lots of fun.