The paper, Efficient IO with io_uring, introduces the new async IO interface which was added to the 5.1 release of the linux kernel in May 2019. Reading the report from its creator, Jens Axboe, was a sheer joy. Apart from the easy-to-understand writing style which made the paper to someone not intimately familiar with the kernel, I particularly liked the structure in which Jens lays out the paper.

I wish more technical content was this rigorous.

Examines the short-comings of current async IO solutions in Linux (section 1):

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5c23a12e-8a97-4415-8c94-c45d7ccef5fd/Untitled.png

Explains why it's a good practice to first attempt to improve the existing solution rather than inventing something new (section 2):

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3d0636e8-099d-49fd-84be-838b37c8d819/Untitled.png

Identifies goals for the new solution while understanding some inherent tension between some of the goals (section 3):

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dec1528d-be51-4d20-bb02-e7178b870642/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4c58dd0a-76a2-4af8-baee-3226ca120cdd/Untitled.png

Uses first-principles based analysis to arrive at the new solution using memory-mapped ring-buffers shared b/w user-space and kernel (section 4):

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/531ee5d8-d936-4ac4-a964-23081a100767/Untitled.png

Describes new solution in detail: (section 4.1 - section 6)

The details are fairly dense and interesting, so they are left out as an exercise for the curious reader

Some interesting (and advanced) features include the ability to add barriers to submission queue (using IOSQE_IO_DRAIN), creating IO operation chains (using IOSQE_IO_LINK), kernel-polled IO (using IORING_SETUP_SQPOLL) and pre-registering files and buffers (using IORING_REGISTER_FILES and IORING_REGISTER_BUFFERS). All these add up to an exciting feature set.