]> xenbits.xensource.com Git - libvirt.git/commitdiff
numa: avoid failure in nodememstats on non-NUMA systems
authorViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Fri, 22 Sep 2017 14:12:23 +0000 (16:12 +0200)
committerJohn Ferlan <jferlan@redhat.com>
Thu, 9 Nov 2017 22:11:51 +0000 (17:11 -0500)
libvirt reports a fake NUMA topology in virConnectGetCapabilities
even if built without numactl support. The fake NUMA topology consists
of a single cell representing the host's cpu and memory resources.
Currently this is the case for ARM and s390[x] RPM builds.

A client iterating over NUMA cells obtained via virConnectGetCapabilities
and invoking virNodeGetMemoryStats on them will see an internal failure
"NUMA isn't available on this host" from virNumaGetMaxNode. An example
for such a client is VDSM.

Since the intention seems to be that libvirt always reports at least
a single cell it is necessary to return "fake" node memory statistics
matching the previously reported fake cell in case NUMA isn't supported
on the system.

Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
src/util/virhostmem.c

index a9ba2784ac91579eabf4d16683af2da6c84ef6bc..11efe8c5029f545317664f0e1ab5d65608f6844e 100644 (file)
@@ -267,6 +267,14 @@ virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED,
         FILE *meminfo;
         int max_node;
 
+        /*
+         * Even if built without numactl, libvirt claims
+         * to have a one-cells NUMA topology. In such a
+         * case return the statistics for the entire host.
+         */
+        if (!virNumaIsAvailable() && cellNum == 0)
+            cellNum = VIR_NODE_MEMORY_STATS_ALL_CELLS;
+
         if (cellNum == VIR_NODE_MEMORY_STATS_ALL_CELLS) {
             if (VIR_STRDUP(meminfo_path, MEMINFO_PATH) < 0)
                 return -1;