[libvirt] PATCH: Make UML/LXC drivers robust with bad NUMA data

Daniel Veillard veillard at redhat.com
Thu Aug 13 11:08:01 UTC 2009


On Thu, Aug 13, 2009 at 11:58:16AM +0100, Daniel P. Berrange wrote:
> commit e2052c24f39c71b3b8e92a983287f72176d73c77
> Author: Daniel P. Berrange <berrange at redhat.com>
> Date:   Thu Aug 13 11:56:31 2009 +0100
> 
>     Make LXC / UML drivers robust against NUMA topology brokenness
>     
>     Some kernel versions expose broken NUMA topology for some machines.
>     This causes the LXC/UML drivers to fail to start. QEMU driver was
>     already fixed for this problem
>     
>     * src/lxc_conf.c: Log and ignore failure to populate NUMA info
>     * src/uml_conf.c: Log and ignore failure to populate NUMA info
> 

> +    /* Some machines have problematic NUMA toplogy causing
> +     * unexpected failures. We don't want to break the QEMU
> +     * driver in this scenario, so log errors & carry on
> +     */
> +    if (nodeCapsInitNUMA(caps) < 0) {
> +        virCapabilitiesFreeNUMAInfo(caps);

   Hum, right now this doesn't reset caps.nnumaCell

> +        VIR_WARN0("Failed to query host NUMA topology, disabling NUMA capabilities");
> +    }
>  
>      /* XXX shouldn't 'borrow' KVM's prefix */
>      virCapabilitiesSetMacPrefix(caps, (unsigned char []){ 0x52, 0x54, 0x00 });
> diff --git a/src/uml_conf.c b/src/uml_conf.c
> index 48e05a8..4f756d4 100644
> --- a/src/uml_conf.c
> +++ b/src/uml_conf.c
> @@ -45,6 +45,7 @@
>  #include "nodeinfo.h"
>  #include "verify.h"
>  #include "bridge.h"
> +#include "logging.h"
>  
>  #define VIR_FROM_THIS VIR_FROM_UML
>  
> @@ -63,8 +64,14 @@ virCapsPtr umlCapsInit(void) {
>                                     0, 0)) == NULL)
>          goto no_memory;
>  
> -    if (nodeCapsInitNUMA(caps) < 0)
> -        goto no_memory;
> +    /* Some machines have problematic NUMA toplogy causing
> +     * unexpected failures. We don't want to break the QEMU
> +     * driver in this scenario, so log errors & carry on
> +     */
> +    if (nodeCapsInitNUMA(caps) < 0) {
> +        virCapabilitiesFreeNUMAInfo(caps);
> +        VIR_WARN0("Failed to query host NUMA topology, disabling NUMA capabilities");
> +    }
>  
>      if ((guest = virCapabilitiesAddGuest(caps,
>                                           "uml",

  Patch looks fine but IMHO we should add
    caps->host.nnumaCell = 0;
in virCapabilitiesFreeNUMAInfo() to be 100% sure

   once done, ACK

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list