[libvirt] [PATCH RFC]:tolerate numa_node_size64 < 0 because nodeid might start from 1 instead of 0
Peter Krempa
pkrempa at redhat.com
Thu Jul 11 13:53:49 UTC 2013
On 07/08/13 16:03, hejia hejia wrote:
> In nodeGetFreeMemory/nodeGetCellsFreeMemory, they will calculate the free
> memory of every nodes. They assumed that nodeid of NUMA machine must be
> continuous and start from 0.
> But here is a counter-example:
>
> # numactl -H
> available: 1 nodes (1)
> node 1 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
> node 1 size: 16340 MB
> node 1 free: 11065 MB
>
> test results before this patch:
> #virsh freecell
> error: internal error Failed to query NUMA free memory
> #virsh freecell 0
> error: internal error Failed to query NUMA free memory for node: 0
>
> after this patch:
> # virsh freecell
> Total: 15772580 KiB
> # virsh freecell 0
> 0: 0 KiB
>
> --- libvirt/src/nodeinfo.c.orig 2013-07-08 04:25:11.970351101 -0500
> +++ libvirt/src/nodeinfo.c 2013-07-08 09:00:30.834471495 -0500
> @@ -1717,10 +1717,6 @@ nodeGetCellsFreeMemory(unsigned long lon
> for (numCells = 0, n = startCell; n <= lastCell; n++) {
> long long mem;
> if (numa_node_size64(n, &mem) < 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("Failed to query NUMA free memory for node: %d"),
> - n);
You leave an empty block here
> - goto cleanup;
> }
> freeMems[numCells++] = mem;
> }
> @@ -1743,9 +1739,6 @@ nodeGetFreeMemory(void)
> for (n = 0; n <= numa_max_node(); n++) {
> long long mem;
> if (numa_node_size64(n, &mem) < 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - "%s", _("Failed to query NUMA free memory"));
> - goto cleanup;
and here too.
> }
> freeMem += mem;
> }
I'll be re-posting this patch with the problems fixed soon.
Peter
More information about the libvir-list
mailing list