>>> Hi, >>> >>> The commit 580b6b2aa2(dataplane: use the QEMU block layer for I/O) >>> introduces ~40% throughput regression on virtio-blk dataplane, and >>> one of causes is that submitting I/O as a batch is removed. >>> >>> This patchset trys to introduce this mechanism on block, at least, >>> linux-aio can benefit from that. >>> >>> With these patches, it is observed that thoughout on virtio-blk >>> dataplane can be improved a lot, see data in commit log of patch >>> 3/3. >>> >>> It should be possible to apply the batch mechanism to other devices >>> (such as virtio-scsi) too. >>> >>> TODO: >>> - support queuing I/O to multi files for scsi devies, which >>> need some changes to linux-aio >>> >>> V6: >>> - fix requests leak if part of them arn't submitted successfully, >>> pointed by Stefan >>> - linux-aio.c coding style fix >>> >>> V5: >>> - rebase on v2.1.0-rc0 of qemu.git/master >>> - block/linux-aio.c code style fix >>> - don't flush io queue before flush, pointed by Paolo >>> >>> V4: >>> - support other non-raw formats with under-optimized performance >>> - use reference counter for plug & unplug >>> - flush io queue before sending flush command >>> >>> V3: >>> - only support submitting I/O as a batch for raw format, pointed by >>> Kevin >>> >>> V2: >>> - define return value of bdrv_io_unplug as void, suggested by Paolo >>> - avoid busy-wait for handling io_submit >>> V1: >>> - move queuing io stuff into linux-aio.c as suggested by Paolo >> >>Thanks, applied to my block tree: >>https://github.com/stefanha/qemu/commits/block >> >Can we use the queued io data as caches, >io write will directly return and tell the guest the io is completed after the >io is enqueued, >better user experience for burst io, >and io-read will firstly search the io queue, if matched data found, directly >get the data from the queue, >if not, then read the data from the disk or host page cache.
Because host page cache cannot assure the order of io-write, leading to VM image data corruption if suddenly poweroff happened, but we can assure the order of io-write in queue, and use cache=none/writethrough/directsync to submit the batched IO to disk directly, bypass host page cache. IO merging also can be performed in the queue. >Any ideas? > >Thanks, >Zhang Haoyu > >>In Patch 2 we should complete requests with -EIO if io_submit() returned >>0 <= ret < len. I fixed this up when applying because the patch was >>completing with a bogus ret value. >> >>Stefan