IO_uring Gets New Features & Speed-Ups With Linux 5.18
IO_uring continues seeing a lot of kernel improvements and expanding its functionality to new areas like networking. IO_uring has been one of the most exciting Linux kernel innovations in recent years and continues seeing new use of it by user-space. With Linux 5.18, IO_uring continues maturing with new features and performance optimizations.
Some of the IO_uring changes for Linux 5.18 include:
- Improvements for provided buffers, including for performance improvements and other changes. The provided buffer handling speed-up cones by way of recycling the cache instead of allocating and freeing the buffers during high frequency workloads. That speed-up lowers the overhead by 5~10% for provided buffers, which nearly matches the non-provided buffers path. Another optimization is for managing provided buffers in a strictly ordered manner by using a hashed list rather than an XArray, which in turn lowers the overhead by another ~2%.
- Support for registered file descriptors. This is via a new io_uring_register API that allows to register ring FDs themselves rather than going through more expensive code paths. Testing of the new code has yielded "a nice bump in performance" for threaded applications with real-world test cases -- 11~15% faster.
- Support for NAPI on sockets and that is yielding nice (lower) latency improvementswith that napi_busy_poll handling.
- Improvements to avoid ring quiescing.
- Support for ring messages (IORING_OP_MSG_RING).
- Polling improvements.
- Improvements to io-wq locking.
- Fixes for current file position.
See the IO_uring pull request for a look at all of the feature patches intended for Linux 5.18. There is also a secondary pull for making the statx API stable with IO_uring.
This IO_uring fun is in addition to many other features expected for Linux 5.18. The merge window will happen over the next two weeks while Linux 5.18 stable should be out around the end of May.