[PATCHSET v5] Support for polled aio

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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






[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux