IO_uring Gets A Huge Performance Fix - Up To 755x Improvement

Written by Michael Larabel in Linux Storage on 21 July 2019 at 01:13 AM EDT. 19 Comments
LINUX STORAGE
IO_uring is designed to deliver fast and efficient I/O operations thanks to a re-designed interface introduced in Linux 5.1 with various efficiency improvements compared to the kernel's existing asynchronous I/O code. But it turns out there was a big bottleneck within the current IO_uring code up until now.

IO_uring was a big feature of Linux 5.1 though still needs to become more widely adopted. In working on using IO_uring, a developer discovered that I/O submission time drops terribly when registering a large fixed buffer and I/O is being done on the latter pages of that buffer.

Linux I/O expert and also IO_uring developer Jens Axboe found the cause to be the iteration of bvecs to find the buffer they need, but in reality it can be made much more efficient based upon existing information to find that offset within the buffer.

With this fix, reading at the start of the buffer is around 10% faster but if reading towards the end is a much greater benefit to this fix... Originally it would take 1039879 ns while now has dropped to just 1377 ns. Or, yes, "about an 755x improvement for the tail page."

This is the fix posted on Saturday for IO_uring and will hopefully soon make it to the mainline kernel tree.
Related News
About The Author
Michael Larabel

Michael Larabel is the principal author of Phoronix.com and founded the site in 2004 with a focus on enriching the Linux hardware experience. Michael has written more than 20,000 articles covering the state of Linux hardware support, Linux performance, graphics drivers, and other topics. Michael is also the lead developer of the Phoronix Test Suite, Phoromatic, and OpenBenchmarking.org automated benchmarking software. He can be followed via Twitter, LinkedIn, or contacted via MichaelLarabel.com.

Popular News This Week