On Mon, 04/22 16:06, Stefan Hajnoczi wrote: > On Mon, Apr 22, 2013 at 10:07:57AM +0800, Fam Zheng wrote: > > Add image create option "zeroed-grain" to enable zeroed-grain GTE > > feature of vmdk sparse extents. When this option is on, header version > > of newly created extent will be 2 and VMDK4_FLAG_ZG flag bit will be > > set. > > Signed-off-by: Fam Zheng <f...@redhat.com> > > --- > > block/vmdk.c | 22 +++++++++++++++++----- > > 1 file changed, 17 insertions(+), 5 deletions(-) > > Is there a way to upgrade an image file to use zeroed-grain GTEs once > the file has been created? >
Yes. We have discussed this on IRC. Here's how we do it: - If file version is 2 and zeroed-grain GTE bit set in header, we can support bdrv_co_write_zeroes (this patch series implemented). - If the file version is 2, we can enable zeroed-grain flag in header on bdrv_co_write_zeroes, and use zeroed-grain GTE. (need another patch to update the header). - Otherwize, -ENOTSUP For background, here's how vmware uses this feature: - On shrinking a *child* disk (e.g.: vmware-vdiskmanager -k child.vmdk), if the child cluster is filled with zero, then the image version is upgraded to 2 and zeroed-grian flag is set, and zeroed-grain GTE is used to clear out the cluster, no need to take care of parent cluster allocation and actual data at all. That's where the efficiency comes. -- Fam