> On 19 Jun 2024, at 8:54, Justin wrote:
>
>>I've run strace and I see calls to fallocate with these flags:
>>FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE
>>
>>I've tried passing these options: discard=off,detect-zeroes=off but
>>this does not help. This is the full set of relevant options I'm
>>using:
>>
>>-drive file=/vms/vm0/drive,format=raw,if=virtio,discard=off,detect-zeroes=
>>off
>>
>> You don't need to disable detect-zeros - in my tests it makes dd if=/dev/zero
>> 5 times faster (770 MiB/s -> 3 GiB/s) since zero writes are converted to
>> fallocate(FALLOC_FL_KEEP_SIZE|FALLOC_FL_ZERO_RANGE).
>>
>> The issue seems to be ignoring the discard option when opening the image,
>> and is fixed by this:
>> https://lists.nongnu.org/archive/html/qemu-block/2024-06/msg00198.html
>
> Thanks. When might this patch (or something similar) be merged?
The patch need more work, when the work is done and qemu maintainers are happy
it is a good estimate :-)
>
>> I think the change needs more work to keep the default behavior
>> since most users want sparse images, but it seems to do what you
>> want - keeping images thick.
>
> It seems that this patch is making the code align more closely with
> the documentation? To, me, it appeared fairly clear that discard=unmap
> would punch holes, and thus the inverse setting would stop hole
> punching.
Punching holes is used both for discard (e.g. fstrim in the guest) and for
writing zeros.
I think that discard should work only when you set discard=unmap or
disacard=on, but writing zeros should always punch holes unless you set
discard=off. I don’t think this behavior is documented now but it should be, at
least the intent to keep images sparse when possible.
Nir