[libvirt] [PATCH] qemu: check if numa cell's cpu range match with cpu topology count

Peter Krempa pkrempa at redhat.com
Mon Jun 10 07:42:11 UTC 2019


On Fri, Jun 07, 2019 at 16:22:08 -0300, Maxiwell S. Garcia wrote:
> If the XML doesn't have numa cells, this check is not necessary. But
> if numa cells are present, it must match with cpu topology count.

You should also describe that you are fixing the warning in the VM log
file that says that the non-full NUMA topologies will be deprecated.

> 
> Signed-off-by: Maxiwell S. Garcia <maxiwell at linux.ibm.com>
> ---
>  src/qemu/qemu_domain.c | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
> 
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 4d3a8868b2..ab81b9a5be 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -4173,15 +4173,24 @@ qemuDomainDefValidate(const virDomainDef *def,
>      if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS)) {
>          unsigned int topologycpus;
>          unsigned int granularity;
> +        unsigned int numacpus;
>  
>          /* Starting from QEMU 2.5, max vCPU count and overall vCPU topology
>           * must agree. We only actually enforce this with QEMU 2.7+, due
>           * to the capability check above */
> -        if (virDomainDefGetVcpusTopology(def, &topologycpus) == 0 &&
> -            topologycpus != virDomainDefGetVcpusMax(def)) {
> -            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                           _("CPU topology doesn't match maximum vcpu count"));
> -            goto cleanup;
> +        if (virDomainDefGetVcpusTopology(def, &topologycpus) == 0) {
> +            if (topologycpus != virDomainDefGetVcpusMax(def)) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("CPU topology doesn't match maximum vcpu count"));
> +                goto cleanup;
> +            }
> +
> +            numacpus = virDomainNumaGetCPUCountTotal(def->numa);
> +            if ((numacpus != 0) && (topologycpus != numacpus)) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("CPU topology doesn't match numa CPU count"));
> +                goto cleanup;
> +            }
>          }

I'm afraid that this might cause regressions. We've ignored the
relationship between the cpu count and NUMA topology for far too long to
have enough possible users that this might break with.

I think we can do this only if it is bound to a new capability so that
it's rejected only for new qemus and thus does not break retroactively.

Until the new version is used we should also probably just add all
non-enumerated vCPUs into the first NUMA node, because that is what qemu
would do anyways.

Also it might require some docs changes.

Additionally you also need to correct the check in qemuDomainSetVcpusMax
to do the same thing.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190610/fe7b6979/attachment-0001.sig>


More information about the libvir-list mailing list