For the grand introduction to this feature, see my original posting here: https://lore.kernel.org/linux-block/20181117235317.7366-1-axboe@xxxxxxxxx/ and refer to the previous postings of this patchset for whatever features were added there. Particularly v4 has some performance results: https://lore.kernel.org/linux-block/20181130165646.27341-1-axboe@xxxxxxxxx/ New in this version is io_ring_enter(2) and a ring based SQ/CQ interface. The rings are mapped from user space, an application can submit IO by writing to its own SQ ring of struct iocbs, and get completions by reading the CQ ring of io_events. This eliminates the need to copy iocbs and io_events completely. It also opens up the possibility of doing polled IO without any system calls at all, if we add a thread on the kernel side... I've done experiments with that, but not ready yet. Doesn't require any changes to the API. I can trivially do 1.2M IOPS with a single thread through this, and 173K IOPS with QD=1/sync. You can also find the patches in my aio-poll branch: http://git.kernel.dk/cgit/linux-block/log/?h=aio-poll or by cloning: git://git.kernel.dk/linux-block aio-poll Patches are against for-4.21/block. Since v4 - Switch to using ITER_BVEC for user mapped buffers. - Drop unneeded import_kvec(). - Use RLIMIT_MEMLOCK as a cap on total memory pinned. - Fix poll check with min_events == 0 actually checking for events - Add REQ_HIPRI_ASYNC - Add ring interface and io_ring_enter(2) - Change io_setup2() system call to accommodate the new ring interface Documentation/filesystems/vfs.txt | 3 + arch/x86/entry/syscalls/syscall_64.tbl | 2 + block/bio.c | 33 +- fs/aio.c | 1440 +++++++++++++++++++++--- fs/block_dev.c | 34 +- fs/file.c | 15 +- fs/file_table.c | 10 +- fs/gfs2/file.c | 2 + fs/iomap.c | 52 +- fs/xfs/xfs_file.c | 1 + include/linux/bio.h | 1 + include/linux/blk_types.h | 2 + include/linux/file.h | 2 + include/linux/fs.h | 5 +- include/linux/iomap.h | 1 + include/linux/syscalls.h | 5 + include/uapi/asm-generic/unistd.h | 4 +- include/uapi/linux/aio_abi.h | 32 + kernel/sys_ni.c | 1 + 19 files changed, 1450 insertions(+), 195 deletions(-) -- Jens Axboe