restrictions for virtiofs (related to commit: 88957116c9 for libvirt 6.9.0)

Masayoshi Mizuma msys.mizuma at gmail.com
Fri Oct 2 23:15:14 UTC 2020


On Fri, Oct 02, 2020 at 11:31:32AM -0400, Masayoshi Mizuma wrote:
> Hello Jan, and Michal,
> 
> commit: 88957116c9 ("qemu: Use memory-backend-* for regular guest memory") gets
> the system memory sharable without numa config.
> The qemu options with the patch will be like as:
> 
>   -machine pc-q35-5.2,accel=kvm,usb=off,vmport=off,smm=on,dump-guest-core=off,memory-backend=pc.ram \
>   -object memory-backend-file,id=pc.ram,mem-path=/var/lib/libvirt/qemu/ram/2-Test/pc.ram,share=yes,size=17179869184 \
> 
> So, we can remove the numa restriction of virtiofs, right?
> The patch to remove that is the bottom of this email.
> 
> And, 88957116c9 seems to introduce another restriction which we
> cannot create numa nodes on the machine. I got the following
> message when I set the numa config and started the VM:
> 
>    2020-10-02T00:31:46.780374Z qemu-system-x86_64: '-machine memory-backend' and '-numa memdev' properties are mutually exclusive

It seems that this isn't a restriction for virtiofs. It's a bug introduced
by commit: 88957116c9. <numa> element doesn't work regardless of virtiofs config...

- Masa

> 
> qemu rejects the -machine memory-backend' and '-numa memdev' because it
> may cause crash. commit: ea81f98bce ("numa: prevent usage of -M memory-backend
> and -numa memdev at the same time") introduced the check.
> 
> Do you have any ideas to solve above?
> 
> ===================================================================
> From: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
> Date: Fri, 2 Oct 2020 10:50:06 -0400
> Subject: [PATCH] qemu: Remove the number of numa restriction for virtiofs
> 
> virtiofs requires at least one numa node to access the system
> memory as shared memory.
> 
> 88957116c9 ("qemu: Use memory-backend-* for regular guest memory")
> gets the system memory sharable without the numa config.
> 
> Let's remove the number of numa restriction for virtiofs.
> 
> Signed-off-by: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
> ---
>  src/qemu/qemu_validate.c | 44 ++++++++++++++++++++--------------------
>  1 file changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> index a212605579..b5372e7499 100644
> --- a/src/qemu/qemu_validate.c
> +++ b/src/qemu/qemu_validate.c
> @@ -3475,36 +3475,36 @@ qemuValidateDomainDefVirtioFSSharedMemory(const virDomainDef *def)
>      size_t numa_nodes = virDomainNumaGetNodeCount(def->numa);
>      size_t i;
>  
> -    if (numa_nodes == 0) {
> +    if ((!numa_nodes) && (def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_SHARED)) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                       _("virtiofs requires one or more NUMA nodes"));
> +                       _("virtiofs requires shared memory"));
>          return -1;
> -    }
> -
> -    for (i = 0; i < numa_nodes; i++) {
> -        virDomainMemoryAccess node_access =
> -            virDomainNumaGetNodeMemoryAccessMode(def->numa, i);
> +    } else {
> +        for (i = 0; i < numa_nodes; i++) {
> +            virDomainMemoryAccess node_access =
> +                virDomainNumaGetNodeMemoryAccessMode(def->numa, i);
>  
> -        switch (node_access) {
> -        case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT:
> -            if (def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_SHARED) {
> +            switch (node_access) {
> +            case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT:
> +                if (def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_SHARED) {
> +                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                                   _("virtiofs requires shared memory"));
> +                    return -1;
> +                }
> +                break;
> +            case VIR_DOMAIN_MEMORY_ACCESS_SHARED:
> +                break;
> +            case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE:
>                  virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                                 _("virtiofs requires shared memory"));
>                  return -1;
> -            }
> -            break;
> -        case VIR_DOMAIN_MEMORY_ACCESS_SHARED:
> -            break;
> -        case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE:
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                           _("virtiofs requires shared memory"));
> -            return -1;
>  
> -        case VIR_DOMAIN_MEMORY_ACCESS_LAST:
> -        default:
> -            virReportEnumRangeError(virDomainMemoryAccess, node_access);
> -            return -1;
> +            case VIR_DOMAIN_MEMORY_ACCESS_LAST:
> +            default:
> +                virReportEnumRangeError(virDomainMemoryAccess, node_access);
> +                return -1;
>  
> +            }
>          }
>      }
>      return 0;
> -- 
> 2.27.0
> 
> Thanks,
> Masa
> 




More information about the libvir-list mailing list