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
signature.asc
Description: OpenPGP digital signature