On Mon, Sep 14, 2020 at 8:32 PM Daniel P. Berrangé <berra...@redhat.com> wrote: > > On Mon, Aug 31, 2020 at 05:01:27PM +0300, Nir Soffer wrote: > > If fallocate() is not supported, posix_fallocate() falls back to > > inefficient allocation, writing one byte for every 4k bytes[1]. This is > > very slow compared with writing zeros. In oVirt we measured ~400% > > improvement in allocation time when replacing posix_fallocate() with > > manually writing zeroes[2]. > > > > We also know that posix_fallocated() does not work well when using OFD > > locks[3]. We don't know the reason yet for this issue yet. > > > > Change preallocate_falloc() to use fallocate() instead of > > posix_falloate(), and fall back to full preallocation if not supported. > > > > Here are quick test results with this change. > > > > Before (qemu-img-5.1.0-2.fc32.x86_64): > > > > $ time qemu-img create -f raw -o preallocation=falloc /tmp/nfs3/test.raw 6g > > Formatting '/tmp/nfs3/test.raw', fmt=raw size=6442450944 > > preallocation=falloc > > > > real 0m42.100s > > user 0m0.602s > > sys 0m4.137s > > > > NFS stats: > > calls retrans authrefrsh write > > 1571583 0 1572205 1571321 > > > > After: > > > > $ time ./qemu-img create -f raw -o preallocation=falloc /tmp/nfs3/test.raw > > 6g > > Formatting '/tmp/nfs3/test.raw', fmt=raw size=6442450944 > > preallocation=falloc > > > > real 0m15.551s > > user 0m0.070s > > sys 0m2.623s > > > > NFS stats: > > calls retrans authrefrsh write > > 24620 0 24624 24567 > > > > [1] > > https://code.woboq.org/userspace/glibc/sysdeps/posix/posix_fallocate.c.html#96 > > [2] https://bugzilla.redhat.com/1850267#c25 > > [3] https://bugzilla.redhat.com/1851097 > > This bug appears to be private to RH employees only, so rather than link > to it, please summarize any important facts in it for benefit of nonn-RH > QEMU contributors.
Thanks, I missed that detail when linking to the bug. The bug is public now. > > Signed-off-by: Nir Soffer <nsof...@redhat.com> > > --- > > block/file-posix.c | 32 +++++++++----------------- > > docs/system/qemu-block-drivers.rst.inc | 11 +++++---- > > docs/tools/qemu-img.rst | 11 +++++---- > > qapi/block-core.json | 4 ++-- > > 4 files changed, 25 insertions(+), 33 deletions(-) > > Regards, > Daniel > -- > |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| > |: https://libvirt.org -o- https://fstop138.berrange.com :| > |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| >