From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTZOt-0001Vp-GL for qemu-devel@nongnu.org; Mon, 15 Sep 2014 12:45:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XTZOm-00009Q-0z for qemu-devel@nongnu.org; Mon, 15 Sep 2014 12:45:15 -0400 Received: from mail-wi0-f170.google.com ([209.85.212.170]:65326) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTZOl-00007l-IV for qemu-devel@nongnu.org; Mon, 15 Sep 2014 12:45:07 -0400 Received: by mail-wi0-f170.google.com with SMTP id em10so2685090wid.5 for ; Mon, 15 Sep 2014 09:44:59 -0700 (PDT) Date: Mon, 15 Sep 2014 17:44:52 +0100 From: Stefan Hajnoczi Message-ID: <20140915164452.GH32379@stefanha-thinkpad.redhat.com> References: <1410414088-4419-1-git-send-email-famz@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="a8sldprk+5E/pDEv" Content-Disposition: inline In-Reply-To: <1410414088-4419-1-git-send-email-famz@redhat.com> 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 Cc: Kevin Wolf , Benoit Canet , Peter Lieven , qemu-devel@nongnu.org, Stefan Hajnoczi , Paolo Bonzini , Liu Yuan --a8sldprk+5E/pDEv Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Sep 11, 2014 at 01:41:06PM +0800, Fam Zheng wrote: > 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=EEt) > Commit message wording fix. (Beno=EEt) > Rename qemu_aio_release to qemu_aio_unref. (Beno=EEt) >=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 requ= est, > but different that it doesn't block until the request is completely cance= lled > or done. >=20 > More importantly, the completion callback, BlockDriverAIOCB.cb, is guaran= teed > to be called, so that the cb can take care of resource releasing and stat= us > reporting to guest, etc. >=20 > In the following work, scsi emulation code will be shifted to use the asy= nc > cancelling. >=20 > One major benefit would be that when guest tries to cancel a request, whe= re 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 v= m 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 very = low > limit, for example 50 bps, then stress the guest block device with dd or = fio. >=20 > 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. >=20 > Later, we will change scsi device code to make this asynchronous, on top = 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(-) Nice series, it ends up being a good clean up while at the same time improving the situation with synchronous cancellation! Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan --a8sldprk+5E/pDEv Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJUFxeEAAoJEJykq7OBq3PITq0H/juqTAbGI994MBnggKZ90Xop ZPakGYynWsSgXIb06kDMD0L+2a8SGGkzpBduFjNR6BNz2rfLWaKpxbqCA3g1cap7 /33f8nxHnWlgBqUha/ico10NPQ2xkh3UEQ6f9AaJJKrKYK5RG8FYgu7TlaRXLaZk mmQ40/Dz43IStj478SJRuFwEftqWxn3oYsazMVz/UnmHNPVkIIYzYwyiuLGJYnhv Wh89sYXC/uo/mFQVtV0BC+8WjWBlWSUyh3yodR0y+AshfuACDpjXnAV1CWvHuHw8 EP3Kv4IG9eEST1ILh39w2Ysg5oMyPccVwVUBBwH4/tqaIu5qe5/pE7Bvtbdcduk= =Ll9u -----END PGP SIGNATURE----- --a8sldprk+5E/pDEv--