From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52975) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XRz57-0007G7-TS for qemu-devel@nongnu.org; Thu, 11 Sep 2014 03:46:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XRz51-000383-Og for qemu-devel@nongnu.org; Thu, 11 Sep 2014 03:46:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:12898) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XRz51-00037z-Gh for qemu-devel@nongnu.org; Thu, 11 Sep 2014 03:46:11 -0400 Message-ID: <54115334.80200@redhat.com> Date: Thu, 11 Sep 2014 09:45:56 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1410414088-4419-1-git-send-email-famz@redhat.com> In-Reply-To: <1410414088-4419-1-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v6 00/22] block: Asynchronous request cancellation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Kevin Wolf , Liu Yuan , Peter Lieven , Benoit Canet , Stefan Hajnoczi Il 11/09/2014 07:41, Fam Zheng ha scritto: > v6: Drop bdrv_em_aiocb_info.cancel in patch 5. (Paolo) >=20 > v5: Fix IDE callback. (Paolo) > Fix blkdebug. (Paolo) > Drop the DMA fix which is independent of this series. (Paolo) > Incorperate Yuan's patch on quorum_aio_cancel. (Beno=C3=AEt) > Commit message wording fix. (Beno=C3=AEt) > Rename qemu_aio_release to qemu_aio_unref. (Beno=C3=AEt) >=20 > v4: Drop AIOCBInfo.cancel. >=20 > This series adds a new block layer API: >=20 > void bdrv_aio_cancel_async(BlockDriverAIOCB *acb); >=20 > And use it to emulate bdrv_aio_cancel. >=20 > The function is similar to bdrv_aio_cancel in that it cancels an AIO re= quest, > but different that it doesn't block until the request is completely can= celled > or done. >=20 > More importantly, the completion callback, BlockDriverAIOCB.cb, is guar= anteed > to be called, so that the cb can take care of resource releasing and st= atus > reporting to guest, etc. >=20 > In the following work, scsi emulation code will be shifted to use the a= sync > cancelling. >=20 > One major benefit would be that when guest tries to cancel a request, w= here 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. >=20 > A test case that is easy to reproduce is, throttle a scsi-disk to a ver= y low > limit, for example 50 bps, then stress the guest block device with dd o= r fio. >=20 > Currently, the vm will quickly hang when it loses patience and send a t= mf > 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_re= qs. >=20 > Later, we will change scsi device code to make this asynchronous, on to= p of > bdrv_aio_cancel_async. >=20 > Fam >=20 >=20 > Fam Zheng (21): > ide/ahci: Check for -ECANCELED in aio callbacks > block: Add refcnt in BlockDriverAIOCB > block: Add bdrv_aio_cancel_async > block: Drop bdrv_em_co_aiocb_info.cancel > block: Drop bdrv_em_aiocb_info.cancel > thread-pool: Convert thread_pool_aiocb_info.cancel to cancel_async > linux-aio: Convert laio_aiocb_info.cancel to .cancel_async > 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: Drop blkdebug_aiocb_info.cancel > 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: Rename qemu_aio_release -> qemu_aio_unref >=20 > Liu Yuan (1): > quorum: fix quorum_aio_cancel() >=20 > block.c | 72 ++++++++++++++++++++++++----------------= -------- > block/archipelago.c | 19 ++----------- > block/blkdebug.c | 17 ++---------- > block/blkverify.c | 21 +------------- > block/curl.c | 16 ++++------- > block/iscsi.c | 23 ++++------------ > block/linux-aio.c | 34 +++++++---------------- > block/qed.c | 23 +--------------- > block/quorum.c | 11 ++++---- > block/rbd.c | 25 ++--------------- > block/sheepdog.c | 54 ++++++++++++++++-------------------- > block/win32-aio.c | 18 ++---------- > dma-helpers.c | 20 +++----------- > hw/ide/ahci.c | 3 ++ > hw/ide/core.c | 26 +++++++++++------ > include/block/aio.h | 7 +++-- > include/block/block.h | 1 + > tests/test-thread-pool.c | 34 +++++++++++++++++------ > thread-pool.c | 36 +++++++++++------------- > 19 files changed, 167 insertions(+), 293 deletions(-) >=20 Reviewed-by: Paolo Bonzini ... and nice diffstat too! :) Paolo