On Mon, Jul 31, 2023 at 11:40:36AM -0400, Stefan Hajnoczi wrote: > 3. Using buffered I/O because O_DIRECT is not universally supported? > > If you can't use O_DIRECT, then qemu-img could be extended to manage its > dirty page cache set carefully. This consists of picking a budget and > writing back to disk when the budget is exhausted. Richard Jones has > shared links covering posix_fadvise(2) and sync_file_range(2): > https://lkml.iu.edu/hypermail/linux/kernel/1005.2/01845.html > https://lkml.iu.edu/hypermail/linux/kernel/1005.2/01953.html > > We can discuss qemu-img code changes and performance analysis more if > you decide to take that direction.
There's a bit more detail in these two commits: https://gitlab.com/nbdkit/libnbd/-/commit/64d50d994dd7062d5cce21f26f0e8eba0e88c87e https://gitlab.com/nbdkit/nbdkit/-/commit/a956e2e75d6c88eeefecd967505667c9f176e3af In my experience this method is much better than using O_DIRECT, it has much fewer sharp edges. By the way, this is a super-useful tool for measuring how much of the page cache is being used to cache a file: https://github.com/Feh/nocache Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html