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