Image streaming copies data from the backing file into the image file. It is important to represent zero regions from the backing file efficiently during streaming, otherwise the image file grows to the full virtual disk size and loses sparseness.
There are two ways to implement zero write detection, they are subtly different: 1. Allow image formats to provide efficient representations for zero regions. QED does this with "zero clusters" and it has been discussed for qcow2v3. 2. During streaming, check for zeroes and skip writing to the image file when zeroes are detected. However, there are some disadvantages to #2 because it leaves unallocated holes in the image file. If image streaming is aborted before it completes then it will be necessary to reread all unallocated clusters from the backing file upon resuming image streaming. Potentionally worse is that a backing file over a slow remote connection will have the zero regions fetched again and again if the guest accesses them. #1 avoids these problems because the image file contains information on which regions are zeroes and do not need to be refetched. This patch series implements #1 with the existing QED zero cluster feature. In the future we can add qcow2v3 zero clusters too. We can also implement #2 directly in the image streaming code as a fallback when the BlockDriver does not support zero detection #1 itself. That way we get the best possible zero write detection, depending on the image format. Here is a qemu-iotest to verify that zero write detection is working: http://repo.or.cz/w/qemu-iotests/stefanha.git/commitdiff/226949695eef51bdcdea3e6ce3d7e5a863427f37 Stefan Hajnoczi (3): block: add zero write detection interface qed: add zero write detection support qemu-io: add zero write detection option block.c | 16 +++++++++++ block.h | 2 + block/qed.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ block_int.h | 13 +++++++++ qemu-io.c | 35 ++++++++++++++++++++----- 5 files changed, 132 insertions(+), 15 deletions(-) -- 1.7.6.3