From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39283) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X48mG-0004Zu-Ck for qemu-devel@nongnu.org; Mon, 07 Jul 2014 09:16:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X48mA-0006H0-7o for qemu-devel@nongnu.org; Mon, 07 Jul 2014 09:16:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:2169) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X48m9-0006Gr-Un for qemu-devel@nongnu.org; Mon, 07 Jul 2014 09:16:10 -0400 From: Stefan Hajnoczi Date: Mon, 7 Jul 2014 15:15:53 +0200 Message-Id: <1404738953-13221-3-git-send-email-stefanha@redhat.com> In-Reply-To: <1404738953-13221-1-git-send-email-stefanha@redhat.com> References: <1404738953-13221-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PATCH v3 2/2] block: bump coroutine pool size for drives List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , ming.lei@canonical.com, Markus Armbruster , Stefan Hajnoczi , Paolo Bonzini , =?UTF-8?q?Llu=C3=ADs=20Vilanova?= When a BlockDriverState is associated with a storage controller DeviceState we expect guest I/O. Use this opportunity to bump the coroutine pool size by 64. This patch ensures that the coroutine pool size scales with the number of drives attached to the guest. It should increase coroutine pool usage (which makes qemu_coroutine_create() fast) without hogging too much memory when fewer drives are attached. Signed-off-by: Stefan Hajnoczi --- block.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/block.c b/block.c index f80e2b2..3a6dcd8 100644 --- a/block.c +++ b/block.c @@ -57,6 +57,8 @@ struct BdrvDirtyBitmap { #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */ +#define COROUTINE_POOL_RESERVATION 64 /* number of coroutines to reserve */ + static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load); static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, @@ -2093,6 +2095,9 @@ int bdrv_attach_dev(BlockDriverState *bs, void *dev) } bs->dev = dev; bdrv_iostatus_reset(bs); + + /* We're expecting I/O from the device so bump up coroutine pool size */ + qemu_coroutine_adjust_pool_size(COROUTINE_POOL_RESERVATION); return 0; } @@ -2112,6 +2117,7 @@ void bdrv_detach_dev(BlockDriverState *bs, void *dev) bs->dev_ops = NULL; bs->dev_opaque = NULL; bs->guest_block_size = 512; + qemu_coroutine_adjust_pool_size(-COROUTINE_POOL_RESERVATION); } /* TODO change to return DeviceState * when all users are qdevified */ -- 1.9.3