On 12/12/2012 06:46 AM, Paolo Bonzini wrote:
> When mirroring runs, the backing files for the target may not yet be
> ready.  However, this means that a copy-on-write operation on the target
> would fill the missing sectors with zeros.  Copy-on-write only happens
> if the granularity of the dirty bitmap is smaller than the cluster size
> (and only for clusters that are allocated in the source after the job
> has started copying).  So far, the granularity was fixed to 1MB; to avoid
> the problem we detected the situation and required the backing files to
> be available in that case only.
> 
> However, we want to lower the granularity for efficiency, so we need
> a better solution.  The solution is to always copy a whole cluster the
> first time it is touched.  The code keeps a bitmap of clusters that
> have already been allocated by the mirroring job, and only does "manual"
> copy-on-write if the chunk being copied is zero in the bitmap.
> 
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---
>  block/mirror.c             | 60 
> +++++++++++++++++++++++++++++++++++++++-------
>  blockdev.c                 | 15 +++---------
>  tests/qemu-iotests/041     | 21 ++++++++++++++++
>  tests/qemu-iotests/041.out |  4 ++--
>  trace-events               |  1 +
>  5 files changed, 78 insertions(+), 23 deletions(-)

Reviewed-by: Eric Blake <ebl...@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to