Message ID | 20190610134905.22294-1-mehta.aaru20@gmail.com |
---|---|
Headers | show |
Series | Add support for io_uring | expand |
On Mon, Jun 10, 2019 at 07:18:53PM +0530, Aarushi Mehta wrote: > This patch series adds support for the newly developed io_uring Linux AIO > interface. Linux io_uring is faster than Linux's AIO asynchronous I/O code, > offers efficient buffered asynchronous I/O support, the ability to do I/O > without performing a system call via polled I/O, and other efficiency enhancements. > > Testing it requires a host kernel (5.1+) and the liburing library. > Use the option -drive aio=io_uring to enable it. > > v5: > - Adds completion polling > - Extends qemu-io > - Adds qemu-iotest Flush is not hooked up. Please use the io_uring IOURING_OP_FSYNC that you've already written and connect it to file-posix.c. When doing this watch out for the qiov->size check during completion processing. Flush doesn't have a qiov so it may be NULL. Stefan
On Tue, Jun 11, 2019 at 10:57 AM Stefan Hajnoczi <stefanha@redhat.com> wrote: > On Mon, Jun 10, 2019 at 07:18:53PM +0530, Aarushi Mehta wrote: > > This patch series adds support for the newly developed io_uring Linux AIO > > interface. Linux io_uring is faster than Linux's AIO asynchronous I/O code, > > offers efficient buffered asynchronous I/O support, the ability to do I/O > > without performing a system call via polled I/O, and other efficiency enhancements. > > > > Testing it requires a host kernel (5.1+) and the liburing library. > > Use the option -drive aio=io_uring to enable it. > > > > v5: > > - Adds completion polling > > - Extends qemu-io > > - Adds qemu-iotest > > Flush is not hooked up. Please use the io_uring IOURING_OP_FSYNC that > you've already written and connect it to file-posix.c. IOURING_OP_FSYNC is in fact synchronous. This means io_uring_enter() blocks until this operation completes. This is not desirable since the AIO engine should not block the QEMU thread it's running from for a long time (e.g. network file system that is not responding). I think it's best *not* to use io_uring for fsync. Instead we can continue to use the thread pool, just like Linux AIO. Stefan
On Sat, Jun 22, 2019 at 4:13 PM Stefan Hajnoczi <stefanha@gmail.com> wrote: > On Tue, Jun 11, 2019 at 10:57 AM Stefan Hajnoczi <stefanha@redhat.com> wrote: > > On Mon, Jun 10, 2019 at 07:18:53PM +0530, Aarushi Mehta wrote: > > > This patch series adds support for the newly developed io_uring Linux AIO > > > interface. Linux io_uring is faster than Linux's AIO asynchronous I/O code, > > > offers efficient buffered asynchronous I/O support, the ability to do I/O > > > without performing a system call via polled I/O, and other efficiency enhancements. > > > > > > Testing it requires a host kernel (5.1+) and the liburing library. > > > Use the option -drive aio=io_uring to enable it. > > > > > > v5: > > > - Adds completion polling > > > - Extends qemu-io > > > - Adds qemu-iotest > > > > Flush is not hooked up. Please use the io_uring IOURING_OP_FSYNC that > > you've already written and connect it to file-posix.c. > > IOURING_OP_FSYNC is in fact synchronous. This means io_uring_enter() > blocks until this operation completes. This is not desirable since > the AIO engine should not block the QEMU thread it's running from for > a long time (e.g. network file system that is not responding). > > I think it's best *not* to use io_uring for fsync. Instead we can > continue to use the thread pool, just like Linux AIO. Looking more closely, this is wrong. Although fsync is synchronous, io_uring takes care to bounce it to the workqueue when submitted via io_uring_enter(). Therefore it appears asynchronous to userspace and we can and should use io_uring for fsync. Stefan