qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v5 00/22] block: Asynchronous request cancellation
@ 2014-09-10  5:59 Fam Zheng
  2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 01/22] ide/ahci: Check for -ECANCELED in aio callbacks Fam Zheng
                   ` (22 more replies)
  0 siblings, 23 replies; 28+ messages in thread
From: Fam Zheng @ 2014-09-10  5:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Benoit Canet, Peter Lieven, Stefan Hajnoczi, Liu Yuan,
	Paolo Bonzini

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ît)
    Commit message wording fix. (Benoît)
    Rename qemu_aio_release to qemu_aio_unref. (Benoît)

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 (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: 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: 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

Liu Yuan (1):
  quorum: fix quorum_aio_cancel()

 block.c                  | 69 ++++++++++++++++++++++++++++--------------------
 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, 172 insertions(+), 285 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2014-09-10  9:47 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-10  5:59 [Qemu-devel] [PATCH v5 00/22] block: Asynchronous request cancellation Fam Zheng
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 01/22] ide/ahci: Check for -ECANCELED in aio callbacks Fam Zheng
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 02/22] block: Add refcnt in BlockDriverAIOCB Fam Zheng
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 03/22] block: Add bdrv_aio_cancel_async Fam Zheng
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 04/22] block: Drop bdrv_em_co_aiocb_info.cancel Fam Zheng
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 05/22] block: Convert bdrv_em_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-10  8:20   ` Paolo Bonzini
2014-09-10  9:36     ` Fam Zheng
2014-09-10  9:46       ` Paolo Bonzini
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 06/22] thread-pool: Convert thread_pool_aiocb_info.cancel to cancel_async Fam Zheng
2014-09-10  5:59 ` [Qemu-devel] [PATCH v5 07/22] linux-aio: Convert laio_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 08/22] dma: Convert dma_aiocb_info.cancel " Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 09/22] iscsi: Convert iscsi_aiocb_info.cancel " Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 10/22] archipelago: Drop archipelago_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 11/22] blkdebug: Drop blkdebug_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 12/22] blkverify: Drop blkverify_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 13/22] curl: Drop curl_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 14/22] qed: Drop qed_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 15/22] quorum: fix quorum_aio_cancel() Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 16/22] quorum: Convert quorum_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 17/22] rbd: Drop rbd_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 18/22] sheepdog: Convert sd_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 19/22] win32-aio: Drop win32_aiocb_info.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 20/22] ide: Convert trim_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 21/22] block: Drop AIOCBInfo.cancel Fam Zheng
2014-09-10  6:00 ` [Qemu-devel] [PATCH v5 22/22] block: Rename qemu_aio_release -> qemu_aio_unref Fam Zheng
2014-09-10  9:09 ` [Qemu-devel] [PATCH v5 00/22] block: Asynchronous request cancellation Bin Wu
2014-09-10  9:20   ` Fam Zheng

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).