[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 00/11] aio: Introduce handler type to fix nested
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [RFC PATCH 00/11] aio: Introduce handler type to fix nested aio_poll for dataplane |
Date: |
Thu, 23 Jul 2015 14:32:07 +0800 |
Most existing nested aio_poll()'s in block layer are inconsiderate of
dispatching potential new r/w requests from ioeventfds and nbd exports, which
might result in responsiveness issues (e.g. bdrv_drain_all will not return when
new requests keep coming), or even wrong semantics (e.g. qmp_transaction cannot
enforce atomicity due to aio_poll in bdrv_drain_all).
Previous attampts to address this issue include new op blocker[1], bdrv_lock[2]
and nested AioContext (patches not posted to qemu-devel).
This approach is based on the idea proposed by Paolo Bonzini. The original idea
is introducing "aio_context_disable_client / aio_context_enable_client to
filter AioContext handlers according to the "client", e.g.
AIO_CLIENT_DATAPLANE (ioeventfd), AIO_CLIENT_PROTOCOL, AIO_CLIENT_NBD_SERVER,
AIO_CLIENT_CONTEXT, ... Extend aio_set_{event_notifier,fd}_handler to pass a
client (type)."
What is realized in this series is similar except the "disable, poll, enable"
method, instead the bit mask of interesting client types is passed to
aio_poll() (to be exact, passed to aio_poll_clients()). That is because,
aio_poll may release the AioContext lock around ppoll, avoiding state will make
the interface clearer.
After this series, block layer aio_poll() will only process those "protocol"
fds that are used in block I/O, plus the ctx->notifier for aio_notify(); other
aio_poll()'s keep unchanged.
The biggest advantage over approaches [1] and [2] is, no change is needed in
virtio-{blk,scsi}-dataplane code, also this doesn't depend on converting QMP to
coroutines.
The windows implementation is not tested except for compiling.
[1]: https://lists.gnu.org/archive/html/qemu-block/2015-05/msg00800.html
[2]: http://lists.nongnu.org/archive/html/qemu-block/2015-06/msg00027.html
Fam Zheng (11):
aio: Introduce "type" in aio_set_fd_handler and aio_set_event_notifier
aio: Save type to AioHandler
aio-posix: Introduce aio_poll_clients
aio-win32: Implement aio_poll_clients
block: Mark fd handlers as "protocol"
nbd: Mark fd handlers client type as "nbd server"
aio: Mark ctx->notifier's client type as "context"
dataplane: Mark host notifiers' client type as "dataplane"
block: Introduce bdrv_aio_poll
block: Replace nested aio_poll with bdrv_aio_poll
block: Only poll block layer fds in bdrv_aio_poll
aio-posix.c | 28 +++++++++++++++-----
aio-win32.c | 42 +++++++++++++++++++++++------
async.c | 3 ++-
block.c | 2 +-
block/curl.c | 16 +++++++-----
block/io.c | 24 ++++++++++-------
block/iscsi.c | 9 +++----
block/linux-aio.c | 5 ++--
block/nbd-client.c | 10 ++++---
block/nfs.c | 19 ++++++--------
block/qed-table.c | 8 +++---
block/sheepdog.c | 32 +++++++++++++++--------
block/ssh.c | 5 ++--
block/win32-aio.c | 5 ++--
blockjob.c | 2 +-
hw/block/dataplane/virtio-blk.c | 6 +++--
hw/scsi/virtio-scsi-dataplane.c | 24 +++++++++++------
include/block/aio.h | 20 +++++++++++++-
include/block/block.h | 2 ++
nbd.c | 4 ++-
qemu-img.c | 2 +-
qemu-io-cmds.c | 4 +--
tests/test-aio.c | 58 +++++++++++++++++++++++------------------
23 files changed, 215 insertions(+), 115 deletions(-)
--
2.4.3
- [Qemu-devel] [RFC PATCH 00/11] aio: Introduce handler type to fix nested aio_poll for dataplane,
Fam Zheng <=
- [Qemu-devel] [RFC PATCH 02/11] aio: Save type to AioHandler, Fam Zheng, 2015/07/23
- [Qemu-devel] [RFC PATCH 01/11] aio: Introduce "type" in aio_set_fd_handler and aio_set_event_notifier, Fam Zheng, 2015/07/23
- [Qemu-devel] [RFC PATCH 04/11] aio-win32: Implement aio_poll_clients, Fam Zheng, 2015/07/23
- [Qemu-devel] [RFC PATCH 08/11] dataplane: Mark host notifiers' client type as "dataplane", Fam Zheng, 2015/07/23
- [Qemu-devel] [RFC PATCH 11/11] block: Only poll block layer fds in bdrv_aio_poll, Fam Zheng, 2015/07/23
- Re: [Qemu-devel] [RFC PATCH 00/11] aio: Introduce handler type to fix nested aio_poll for dataplane, Paolo Bonzini, 2015/07/23