From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Chrysostomos Nanakos <cnanakos@grnet.gr>,
Stefan Hajnoczi <stefanha@redhat.com>,
Liu Yuan <namei.unix@gmail.com>, Peter Lieven <pl@kamp.de>,
Ronnie Sahlberg <ronniesahlberg@gmail.com>,
Josh Durgin <josh.durgin@inktank.com>,
Paolo Bonzini <pbonzini@redhat.com>,
MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>,
Benoit Canet <benoit@irqsave.net>
Subject: [Qemu-devel] [PATCH v4 00/20] block: Asynchronous request cancellation
Date: Wed, 3 Sep 2014 19:23:35 +0800 [thread overview]
Message-ID: <1409743435-21155-1-git-send-email-famz@redhat.com> (raw)
v4: Drop AIOCBInfo.cancel.
This series adds a new block layer API:
void bdrv_aio_cancel_async(BlockDriverAIOCB *acb);
And use it to emulate bdrv_aio_cancel.
The function is similar to bdrv_aio_cancel in that it cancels an AIO request,
but different that it doesn't block until the request is completely cancelled
or done.
More importantly, the completion callback, BlockDriverAIOCB.cb, is guaranteed
to be called, so that the cb can take care of resource releasing and status
reporting to guest, etc.
In the following work, scsi emulation code will be shifted to use the async
cancelling.
One major benefit would be that when guest tries to cancel a request, where the
request cannot be cancelled easily, (due to throttled BlockDriverState, a lost
connection, or a large request queue), we don't need to block the whole vm with
a busy loop, which is how bdrv_aio_cancel is implemented now.
A test case that is easy to reproduce is, throttle a scsi-disk to a very low
limit, for example 50 bps, then stress the guest block device with dd or fio.
Currently, the vm will quickly hang when it loses patience and send a tmf
command to cancel the request, at which point we will busy wait in
bdrv_aio_cancel, until the request is slowly spit out from throttled_reqs.
Later, we will change scsi device code to make this asynchronous, on top of
bdrv_aio_cancel_async.
Fam
Fam Zheng (20):
block: Add refcnt in BlockDriverAIOCB
block: Add bdrv_aio_cancel_async
block: Drop bdrv_em_co_aiocb_info.cancel
block: Convert bdrv_em_aiocb_info.cancel to .cancel_async
thread-pool: Convert thread_pool_aiocb_info.cancel to cancel_async
linux-aio: Convert laio_aiocb_info.cancel to .cancel_async
dma: Check iov pointer before unmap memory
dma: Convert dma_aiocb_info.cancel to .cancel_async
iscsi: Convert iscsi_aiocb_info.cancel to .cancel_async
archipelago: Drop archipelago_aiocb_info.cancel
blkdebug: Convert blkdebug_aiocb_info.cancel to .cancel_async
blkverify: Drop blkverify_aiocb_info.cancel
curl: Drop curl_aiocb_info.cancel
qed: Drop qed_aiocb_info.cancel
quorum: Convert quorum_aiocb_info.cancel to .cancel_async
rbd: Drop rbd_aiocb_info.cancel
sheepdog: Convert sd_aiocb_info.cancel to .cancel_async
win32-aio: Drop win32_aiocb_info.cancel
ide: Convert trim_aiocb_info.cancel to .cancel_async
block: Drop AIOCBInfo.cancel
block.c | 61 +++++++++++++++++++++++++++++-------------------
block/archipelago.c | 17 +-------------
block/blkdebug.c | 6 +++--
block/blkverify.c | 19 ---------------
block/curl.c | 6 -----
block/iscsi.c | 17 ++------------
block/linux-aio.c | 30 +++++++-----------------
block/qed.c | 21 -----------------
block/quorum.c | 7 ++----
block/rbd.c | 23 +-----------------
block/sheepdog.c | 46 +++++++++++++++---------------------
block/win32-aio.c | 14 -----------
dma-helpers.c | 23 ++++++------------
hw/ide/core.c | 12 ++++------
include/block/aio.h | 5 +++-
include/block/block.h | 1 +
tests/test-thread-pool.c | 34 ++++++++++++++++++++-------
thread-pool.c | 32 +++++++++++--------------
18 files changed, 131 insertions(+), 243 deletions(-)
--
2.1.0.27.g96db324
next reply other threads:[~2014-09-03 11:24 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-03 11:23 Fam Zheng [this message]
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 01/20] block: Add refcnt in BlockDriverAIOCB Fam Zheng
2014-09-04 15:07 ` Benoît Canet
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 02/20] block: Add bdrv_aio_cancel_async Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 03/20] block: Drop bdrv_em_co_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 04/20] block: Convert bdrv_em_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-03 11:28 ` Paolo Bonzini
2014-09-04 1:20 ` Fam Zheng
2014-09-04 5:45 ` Paolo Bonzini
2014-09-04 15:21 ` Benoît Canet
2014-09-05 10:55 ` Fam Zheng
2014-09-05 11:06 ` Benoît Canet
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 05/20] thread-pool: Convert thread_pool_aiocb_info.cancel to cancel_async Fam Zheng
2014-09-04 15:29 ` Benoît Canet
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 06/20] linux-aio: Convert laio_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 07/20] dma: Check iov pointer before unmap memory Fam Zheng
2014-09-03 11:38 ` Paolo Bonzini
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 08/20] dma: Convert dma_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 09/20] iscsi: Convert iscsi_aiocb_info.cancel " Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 10/20] archipelago: Drop archipelago_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 11/20] blkdebug: Convert blkdebug_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-03 11:42 ` Paolo Bonzini
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 12/20] blkverify: Drop blkverify_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 13/20] curl: Drop curl_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 14/20] qed: Drop qed_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 15/20] quorum: Convert quorum_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-04 15:40 ` Benoît Canet
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 16/20] rbd: Drop rbd_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 17/20] sheepdog: Convert sd_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 18/20] win32-aio: Drop win32_aiocb_info.cancel Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 19/20] ide: Convert trim_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-03 11:23 ` [Qemu-devel] [PATCH v4 20/20] block: Drop AIOCBInfo.cancel Fam Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1409743435-21155-1-git-send-email-famz@redhat.com \
--to=famz@redhat.com \
--cc=benoit@irqsave.net \
--cc=cnanakos@grnet.gr \
--cc=josh.durgin@inktank.com \
--cc=kwolf@redhat.com \
--cc=morita.kazutaka@lab.ntt.co.jp \
--cc=namei.unix@gmail.com \
--cc=pbonzini@redhat.com \
--cc=pl@kamp.de \
--cc=qemu-devel@nongnu.org \
--cc=ronniesahlberg@gmail.com \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).