[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Qemu-block] [PATCH] block/mirror: enable detect zeroes
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [Qemu-block] [PATCH] block/mirror: enable detect zeroes when driving mirror |
Date: |
Tue, 22 Nov 2016 11:09:15 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Am 22.11.2016 um 04:45 hat wyang geschrieben:
> On 2016年11月21日 19:34, Kevin Wolf wrote:
> >Am 21.11.2016 um 02:24 hat Yang Wei geschrieben:
> >>In order to preserve sparse disk image, detect_zeroes
> >>should also be enabled when bdrv_get_block_status_above()
> >>returns BDRV_BLOCK_DATA
> >>
> >>Signed-off-by: Yang Wei <address@hidden>
> >Just preserving sparseness is exactly why bdrv_get_block_status_above()
> >is checked, and this happens always.
>
> I have a sparse qcow2 image(virtual size: 20G disk size: 12G),
> # qemu-img info 20G.img
> image: 20G.img
> file format: qcow2
> virtual size: 20G (21474836480 bytes)
> disk size: 12G
> cluster_size: 65536
> Format specific information:
> compat: 1.1
> lazy refcounts: false
> refcount bits: 16
> corrupt: false
>
> and I tried to qemu-img map --output json xxxx.img, as you can see,
> the field of data always is true.
Did you use metadata preallocation? If so, you explicitly requested all
clusters to be allocated.
> >detect_zeroes does not preserve sparseness, but detect zeroes in parts
> >of the source image that are not sparse, and make them sparse in the
> >target image. This means that it has higher overhead (because all
> >sectors need to be processed before copying them) and doesn't result in
> >an exact copy. There may be cases where this is wanted, but in the
> >common case, it's probably not the right mode of operation.
> To be frank, customers are more concerned about sparseness than overhead.
All generalisations are wrong.
We could be talking about the majority of users (the QEMU project
doesn't have customers), but even then I doubt you're right, especially
when using preallocation which is a tool for giving up sparseness in
favour of improved performance of the first write to a cluster.
> >If you really want to detect zeroes, create the target block driver node
> >manually (with detect-zeroes=on) and use the blockdev-mirror QMP command
> >to mirror to it.
> the target block is created by **bdrv_img_create** and opened by
> **bdrv_open** inside qmp_drive_mirror, it also mean than we only
> enable detect-zeroes while
> its opened, i don't find qmp cmd to only enable it, if I understand
> correctly.
That's why I said you use blockdev-mirror instead drive-mirror.
Kevin