Hi all,
I've found that if I create a QEMU guest that:
(a) is backed by host hugepages and
(b) specifies a host NUMA memory placement policy
... then the NUMA policy (b) is ignored. It's even possible to start the guest
if the policy specifies that memory must come from non-existant host nodes.
Is this a bug?
(I ask because I suspect that it is a bug, and that it can't be fixed trivially
due to migration considerations. Is that true?)
A few more details:
I do (a) using this in the guest XML:
<memoryBacking> <hugepages/> </memoryBacking>
And (b) using:
<numatune> <memory mode='strict' nodeset='1'>
</numatune>
If the XML contains <cpu><numa><cell ...> and
<numatune><memnode ...> to bind
guest NUMA nodes to host NUMA nodes then the policy is followed and this
behaviour isn't seen. The guest can't be started if the policy specifies
invalid host nodes.
(Strangely, if the host doesn't have the cpuset cgroup mount set up or otherwise
lacks cgroup support, then the policy is not ignored. This appears to be due to
a fallback path in libvirt so it seems like NUMA memory policy is intended to
work in this situation.)
Cheers,
Sam.