On 19 Jun 2024, at 8:54, Justin <justin0@safe-mbox.com> 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 withthe documentation? To, me, it appeared fairly clear that discard=unmapwould punch holes, and thus the inverse setting would stop holepunching.
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