分享

Kernel Asynchronous I/O (AIO) Support for Linux

 fort 2009-02-12

Kernel Asynchronous I/O (AIO) Support for Linux

Overview

AIO enables even a single application thread to overlap I/O operations with other processing, by providing an interface for submitting one or more I/O requests in one system call (io_submit()) without waiting for completion, and a separate interface (io_getevents()) to reap completed I/O operations associated with a given completion group.

Support for kernel AIO has been included in the 2.6 Linux kernel.

What Works?

  • AIO read and write on raw (and O_DIRECT on blockdev)
  • AIO read and write on files opened with O_DIRECT on ext2, ext3, jfs, xfs

What Does Not Work?

  • AIO read and write on files opened without O_DIRECT (i.e. normal buffered filesystem AIO). On ext2, ext3, jfs, xfs and nfs, these do not return an explicit error, but quietly default to synchronous or rather non-AIO behaviour (i.e io_submit waits for I/O to complete in these cases). For most other filesystems, -EINVAL is reported.
  • AIO fsync (not supported for any filesystem)
  • AIO read and write on sockets (doesn't return an explicit error, but quietly defaults to synchronous or rather non-AIO behavior)
  • AIO read and write on pipes (reports -EINVAL)
  • Not all devices (including TTY) support AIO (typically return -EINVAL)

Additional functionality is available HERE

  • Buffered filesystem AIO, i.e. AIO read and write on files opened without O_DIRECT, on ext2, ext3, jfs, xfs, reiserfs.
  • Does not include AIO fsync
  • AIO read and write on pipes (from Chris Mason)

Q. Where can I find AIO libraries that utilize kernel AIO on Linux ?

A. You need to install the libaio package if you are writing AIO applications which use the native AIO interfaces (libaio-0.3.99)

Q. Is AIO functionality available for 2.4 kernels?

A. Patches for 2.4 can be found HERE . Also check out the original Linux-AIO home page.


Reading About the Linux Kernel AIO Design

  • Asynchronous I/O Support Linux 2.5, Ottawa Linux Symposium 2003
    Covers the AIO design for 2.6, including the filesystem AIO implementation that's currently in the -mm tree, and some performance results for O_DIRECT AIO using rawiobench.
  • AIO Design Notes written at the time of the 2.4 AIO implementation, These are a little out-of-date, but provide some idea and background on various issues, alternative design approaches and considerations involved in an AIO implementation and describes the design of the 2.4 AIO implementation.
  • Round 3: aio vs /dev/epoll compares epoll, AIO poll and AIO read behaviour. The full paper is included in the OLS 2002 Proceedings.

Future Work

  • Performance Tuning
  • Vector AIO

Benchmarks and Testing

Performance testing/microbenchmarking
  • Chris Mason's aio-stress benchmark issues a stream of AIO requests to one or more files, where one can vary several parameters like I/O unit size, total I/O size, depth of iocbs submitted at a time, number of concurrent threads, type and pattern of I/O operations, etc. It reports the overall throughput attained and average io submission latency.
  • rawiobench is another microbenchmark which can issue sequential or random disk I/O. It supports both synchronous and asynchronous I/O for O_DIRECT and buffered filesystem AIO and reports throughput and CPU utilization results.
Other tests AIO tests:
  • Daniel McNiel's (OSDL) aiocp test.
  • fsx-linux is now enabled for AIO. Just compile it with -DAIO.

Performance Results

  • Filesystem AIO aiostress results with and without fsaio patches 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多