From patchwork Thu Jan 29 10:50:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Denis V. Lunev" X-Patchwork-Id: 434505 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 7CF681402B1 for ; Thu, 29 Jan 2015 21:51:48 +1100 (AEDT) Received: from localhost ([::1]:58860 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGmhO-0005oH-8N for incoming@patchwork.ozlabs.org; Thu, 29 Jan 2015 05:51:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59794) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGmgl-0004g6-T0 for qemu-devel@nongnu.org; Thu, 29 Jan 2015 05:51:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YGmgg-0003yV-PR for qemu-devel@nongnu.org; Thu, 29 Jan 2015 05:51:07 -0500 Received: from mailhub.sw.ru ([195.214.232.25]:34669 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGmgg-0003xw-D8 for qemu-devel@nongnu.org; Thu, 29 Jan 2015 05:51:02 -0500 Received: from hades.sw.ru ([10.30.8.132]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id t0TAotGk008108; Thu, 29 Jan 2015 13:50:58 +0300 (MSK) From: "Denis V. Lunev" To: Date: Thu, 29 Jan 2015 13:50:59 +0300 Message-Id: <1422528659-3121-2-git-send-email-den@openvz.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1422528659-3121-1-git-send-email-den@openvz.org> References: <1422528659-3121-1-git-send-email-den@openvz.org> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x X-Received-From: 195.214.232.25 Cc: Kevin Wolf , "Denis V. Lunev" , qemu-devel@nongnu.org, Stefan Hajnoczi , Paolo Bonzini Subject: [Qemu-devel] [PATCH 1/1] block: enforce minimal 4096 alignment in qemu_blockalign X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The following sequence int fd = open(argv[1], O_RDWR | O_CREAT | O_DIRECT, 0644); for (i = 0; i < 100000; i++) write(fd, buf, 4096); performs 5% better if buf is aligned to 4096 bytes rather then to 512 bytes on HDD with 512/4096 logical/physical sector size. The difference is quite reliable. On the other hand we do not want at the moment to enforce bounce buffering if guest request is aligned to 512 bytes. This patch forces page alignment when we really forced to perform memory allocation. Signed-off-by: Denis V. Lunev CC: Paolo Bonzini CC: Kevin Wolf CC: Stefan Hajnoczi Reviewed-by: Paolo Bonzini --- block.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index d45e4dd..38cf73f 100644 --- a/block.c +++ b/block.c @@ -5293,7 +5293,11 @@ void bdrv_set_guest_block_size(BlockDriverState *bs, int align) void *qemu_blockalign(BlockDriverState *bs, size_t size) { - return qemu_memalign(bdrv_opt_mem_align(bs), size); + size_t align = bdrv_opt_mem_align(bs); + if (align < 4096) { + align = 4096; + } + return qemu_memalign(align, size); } void *qemu_blockalign0(BlockDriverState *bs, size_t size) @@ -5307,6 +5311,9 @@ void *qemu_try_blockalign(BlockDriverState *bs, size_t size) /* Ensure that NULL is never returned on success */ assert(align > 0); + if (align < 4096) { + align = 4096; + } if (size == 0) { size = align; }