io_uring Enhancements

io_uring is a system call interface to manage storage device asynchronous I/O operations. Several features and improvements are provided in the implementation that's available in UEK 8 and some of these might have been backported to previous UEK releases. Updates include many optimizations for security and performance. Significant new features and changes include:

  • io_uring now supports sending and receiving T10 Protection Information along with the data buffer.

  • Operations for getsockopt(), setsockopt(), bind(), listen() and waitid().

  • Mechanism to omit system calls with IORING_SETUP_SQPOLL at setup time. A call to io_uring_enter() starts a kernel thread that occasionally polls the submission queue and automatically submits any requests found there.

  • Batch request for recv() calls and for reads().

  • IORING_OP_SENDZC to perform Zero-copy writes.

  • Several Ring code optimizations:

    • Rings and submission queue can be in user space memory, such as huge pages.

    • One ring is now able to signal another to speed up message requests.

    • Ring related work can be deferred until an application asks for it.

  • io_uring improvements in buffered writes, in XFS.

  • io_uring optimization in XFS and Ext4 can handle multiple direct-I/O writes to a file in parallel.

  • Absolute timeouts, along with the relative timeouts that were already available, are now possible.