From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:52214) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rv53X-0000uX-HA for qemu-devel@nongnu.org; Wed, 08 Feb 2012 05:47:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rv53R-0005Cs-R1 for qemu-devel@nongnu.org; Wed, 08 Feb 2012 05:47:19 -0500 Received: from mx1.redhat.com ([209.132.183.28]:7334) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rv53R-0005Cg-FW for qemu-devel@nongnu.org; Wed, 08 Feb 2012 05:47:13 -0500 Message-ID: <4F32537C.4060606@redhat.com> Date: Wed, 08 Feb 2012 11:50:36 +0100 From: Kevin Wolf MIME-Version: 1.0 References: <1328621250-8130-1-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: <1328621250-8130-1-git-send-email-stefanha@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v5 0/6] block: zero writes List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: qemu-devel@nongnu.org Am 07.02.2012 14:27, schrieb Stefan Hajnoczi: > This series adds an interface for efficient writes when data contains all > zeros. It also takes advantage of this new interface by extending the > copy-on-read feature to perform zero-detection. > > The details of efficient zero representations depend on the image format. This > series includes a patch for the QED image format to write special "zero > clusters" that keep the image file compact. In the future qcow2v3 could also > support an efficient zero representation. > > The new BlockDriver interface is called .bdrv_co_write_zeroes() and is > optional. If the interface is not implemented by a BlockDriver then a regular > .bdrv_co_writev() operation will be performed. The public interface is called > bdrv_co_write_zeroes() and can be tested via the new qemu-io write -z option. > > Copy-on-read is extended to detect zeroes and invoke the > .bdrv_co_write_zeroes() interface when possible. As a result we avoid bloating > the image file if the backing file contains zeroes. > > My motivation for this feature is efficient image streaming. The destination > file must stay compact even when copying zeroes from the source file. > > We now only do zero detection for copy-on-read requests, whereas previous > revisions of this patch series scanned all write requests for zeroes. The old > behavior wasted CPU cycles in most cases but we could add a feature to > explicitly scan guest writes for zeroes in the future, if desired. > > v5: > * assert length constraint in buffer_is_zero() [Kevin] > * explain why bdrv_co_write_zeroes() is not suitable for huge requests [Kevin] > > v3: > * Rebased on image streaming series > > v2: > * Introduce .bdrv_co_write_zeroes() [Kevin] > * Perform zero detection only on copy-on-read requests [Kevin] > > Stefan Hajnoczi (6): > cutils: extract buffer_is_zero() from qemu-img.c > block: add .bdrv_co_write_zeroes() interface > block: perform zero-detection during copy-on-read > qed: replace is_write with flags field > qed: add .bdrv_co_write_zeroes() support > qemu-io: add write -z option for bdrv_co_write_zeroes > > block.c | 67 ++++++++++++++++++++++++++---- > block.h | 8 ++++ > block/qed.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++------- > block/qed.h | 7 +++- > block_int.h | 8 ++++ > cutils.c | 35 ++++++++++++++++ > qemu-common.h | 2 + > qemu-img.c | 46 +++------------------ > qemu-io.c | 77 +++++++++++++++++++++++++++++++---- > trace-events | 3 +- > 10 files changed, 305 insertions(+), 73 deletions(-) Thanks, applied all to the block branch. Kevin