From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52545) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVFtf-0001gG-8y for qemu-devel@nongnu.org; Tue, 10 Mar 2015 04:52:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YVFtZ-0008Ql-Qa for qemu-devel@nongnu.org; Tue, 10 Mar 2015 04:52:15 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:42006 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVFtZ-0007j4-9g for qemu-devel@nongnu.org; Tue, 10 Mar 2015 04:52:09 -0400 From: "Denis V. Lunev" Date: Tue, 10 Mar 2015 11:51:15 +0300 Message-Id: <1425977481-13317-22-git-send-email-den@openvz.org> In-Reply-To: <1425977481-13317-1-git-send-email-den@openvz.org> References: <1425977481-13317-1-git-send-email-den@openvz.org> Subject: [Qemu-devel] [PATCH 21/27] block/parallels: no need to flush on each block allocation table update List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Denis V. Lunev" , qemu-devel@nongnu.org, Stefan Hajnoczi , Roman Kagan >>From the point of guest each write to real disk prior to disk barrier operation could be lost. Therefore there is no problem that "not synced" new block is lost due to not updated allocation table if QEMU is crashed. This situation is properly detected and handled now using inuse magic and in parallels_check This patch improves writing performance of qemu-img create -f parallels -o cluster_size=64k ./1.hds 64G qemu-io -f parallels -c "write -P 0x11 0 1024k" 1.hds from 45 Mb/sec to 160 Mb/sec on my SSD disk. The gain on rotational media is much more sufficient, from 800 Kb/sec to 45 Mb/sec. Signed-off-by: Denis V. Lunev CC: Roman Kagan CC: Kevin Wolf CC: Stefan Hajnoczi --- block/parallels.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/parallels.c b/block/parallels.c index 9933c49..e8b3d09 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -117,7 +117,7 @@ static int64_t allocate_cluster(BlockDriverState *bs, int64_t sector_num) bdrv_truncate(bs->file, (pos + s->tracks) << BDRV_SECTOR_BITS); s->bat_bitmap[idx] = cpu_to_le32(pos / s->off_multiplier); - ret = bdrv_pwrite_sync(bs->file, + ret = bdrv_pwrite(bs->file, sizeof(ParallelsHeader) + idx * sizeof(s->bat_bitmap[idx]), s->bat_bitmap + idx, sizeof(s->bat_bitmap[idx])); if (ret < 0) { -- 1.9.1