On Fri, Jul 04, 2025 at 07:07:53PM +0200, Ján Tomko via Devel wrote:
> From: Ján Tomko <jto...@redhat.com>
> 
> For any vhost-user device to work, the memory needs to be marked as
> shared.
> 
> What we recommend to users (e.g. in the virtiofs quide [0]) is:
>   <memoryBacking>
>     <source type='memfd'/>
>     <access mode='shared'/>
>   </memoryBacking>
> 
> Technically, only the access mode is needed:
>   <memoryBacking>
>     <access mode='shared'/>
>   </memoryBacking>
> But this results in libvirt assuming the file backend.
> 
> Switch this case to use memfd which should offer better performance,
> and less disk usage, at the cost of eating unswappable RAM.

The latter is a pretty significant cost, that I think has a non-trivial
risk of creating deployment regressions for apps.

It is not uncommon for mgmt apps to over-commit RAM, and if we're
switching to a backend that's unswappable, this over-commit will
now be more likely trigger the OOM killer. I don't think we can
take that risk with a change like this.

Any app that supports virtiofs will long have known the need to
add memfd, so I don't think we win much by changing the default
for that use case.

> 
> [0] https://libvirt.org/kbase/virtiofs.html
> 
> Signed-off-by: Ján Tomko <jto...@redhat.com>
> ---
>  src/qemu/qemu_command.c                                  | 9 +++++++--
>  tests/qemuxmlconfdata/disk-vhostvdpa.x86_64-latest.args  | 2 +-
>  .../net-vhostuser-multiq.x86_64-latest.args              | 2 +-
>  .../net-vhostuser-passt.x86_64-latest.args               | 2 +-
>  tests/qemuxmlconfdata/net-vhostuser.x86_64-latest.args   | 2 +-
>  .../schema-reorder-domain-subelements.x86_64-latest.args | 2 +-
>  .../qemuxmlconfdata/vhost-user-fs-ccw.s390x-latest.args  | 2 +-
>  7 files changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 7658cc4d39..ca9d4d6609 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -3417,8 +3417,13 @@ qemuBuildMemoryBackendProps(virJSONValue 
> **backendProps,
>          if (!priv->memPrealloc)
>              prealloc = true;
>  
> -    } else if (!nvdimmPath &&
> -               def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_MEMFD) {
> +    } else if ((!nvdimmPath &&
> +                def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_MEMFD) ||
> +               (systemMemory &&
> +                memAccess &&
> +                !useHugepage &&
> +                def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_NONE &&
> +                virQEMUCapsGet(priv->qemuCaps, 
> QEMU_CAPS_OBJECT_MEMORY_MEMFD))) {
>          backendType = "memory-backend-memfd";
>  
>          if (useHugepage &&
> diff --git a/tests/qemuxmlconfdata/disk-vhostvdpa.x86_64-latest.args 
> b/tests/qemuxmlconfdata/disk-vhostvdpa.x86_64-latest.args
> index 93d2ef0d98..04732df68a 100644
> --- a/tests/qemuxmlconfdata/disk-vhostvdpa.x86_64-latest.args
> +++ b/tests/qemuxmlconfdata/disk-vhostvdpa.x86_64-latest.args
> @@ -14,7 +14,7 @@ 
> XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
>  -accel tcg \
>  -cpu qemu64 \
>  -m size=219136k \
> --object 
> '{"qom-type":"memory-backend-file","id":"pc.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
> +-object 
> '{"qom-type":"memory-backend-memfd","id":"pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
>  -overcommit mem-lock=off \
>  -smp 1,sockets=1,cores=1,threads=1 \
>  -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> diff --git a/tests/qemuxmlconfdata/net-vhostuser-multiq.x86_64-latest.args 
> b/tests/qemuxmlconfdata/net-vhostuser-multiq.x86_64-latest.args
> index 4ea3d4eebd..ac5c8b7652 100644
> --- a/tests/qemuxmlconfdata/net-vhostuser-multiq.x86_64-latest.args
> +++ b/tests/qemuxmlconfdata/net-vhostuser-multiq.x86_64-latest.args
> @@ -14,7 +14,7 @@ 
> XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
>  -accel tcg \
>  -cpu qemu64 \
>  -m size=219136k \
> --object 
> '{"qom-type":"memory-backend-file","id":"pc.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
> +-object 
> '{"qom-type":"memory-backend-memfd","id":"pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
>  -overcommit mem-lock=off \
>  -smp 1,sockets=1,cores=1,threads=1 \
>  -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> diff --git a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args 
> b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args
> index afbbe188cf..ee395deffe 100644
> --- a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args
> +++ b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args
> @@ -14,7 +14,7 @@ 
> XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
>  -accel tcg \
>  -cpu qemu64 \
>  -m size=219136k \
> --object 
> '{"qom-type":"memory-backend-file","id":"pc.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
> +-object 
> '{"qom-type":"memory-backend-memfd","id":"pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
>  -overcommit mem-lock=off \
>  -smp 1,sockets=1,cores=1,threads=1 \
>  -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> diff --git a/tests/qemuxmlconfdata/net-vhostuser.x86_64-latest.args 
> b/tests/qemuxmlconfdata/net-vhostuser.x86_64-latest.args
> index f5925c77fe..74454d3d24 100644
> --- a/tests/qemuxmlconfdata/net-vhostuser.x86_64-latest.args
> +++ b/tests/qemuxmlconfdata/net-vhostuser.x86_64-latest.args
> @@ -14,7 +14,7 @@ 
> XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
>  -accel tcg \
>  -cpu qemu64 \
>  -m size=219136k \
> --object 
> '{"qom-type":"memory-backend-file","id":"pc.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
> +-object 
> '{"qom-type":"memory-backend-memfd","id":"pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
>  -overcommit mem-lock=off \
>  -smp 1,sockets=1,cores=1,threads=1 \
>  -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> diff --git 
> a/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest.args 
> b/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest.args
> index 76df9c30b0..5fb594df87 100644
> --- 
> a/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest.args
> +++ 
> b/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest.args
> @@ -14,7 +14,7 @@ 
> XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-passtvhostuu/.config \
>  -accel kvm \
>  -cpu qemu64 \
>  -m size=16777216k \
> --object 
> '{"qom-type":"memory-backend-file","id":"pc.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-passtvhostuu/pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":17179869184}'
>  \
> +-object 
> '{"qom-type":"memory-backend-memfd","id":"pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":17179869184}'
>  \
>  -overcommit mem-lock=off \
>  -smp 16,sockets=16,cores=1,threads=1 \
>  -uuid d79698e0-46b2-4459-87ee-7c762990dd6e \
> diff --git a/tests/qemuxmlconfdata/vhost-user-fs-ccw.s390x-latest.args 
> b/tests/qemuxmlconfdata/vhost-user-fs-ccw.s390x-latest.args
> index 72ca38c305..eed9af8bb1 100644
> --- a/tests/qemuxmlconfdata/vhost-user-fs-ccw.s390x-latest.args
> +++ b/tests/qemuxmlconfdata/vhost-user-fs-ccw.s390x-latest.args
> @@ -14,7 +14,7 @@ 
> XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
>  -accel tcg \
>  -cpu qemu \
>  -m size=219136k \
> --object 
> '{"qom-type":"memory-backend-file","id":"s390.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/s390.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
> +-object 
> '{"qom-type":"memory-backend-memfd","id":"s390.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"size":224395264}'
>  \
>  -overcommit mem-lock=off \
>  -smp 1,sockets=1,cores=1,threads=1 \
>  -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> -- 
> 2.50.0
> 

With 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 :|

Reply via email to