Ping On 6/1/20 2:50 PM, Daniel Henrique Barboza wrote:
Hi, This series implements a convenience feature for the case where the user defines an incomplete NUMA topology in the domain, when the sum of all cpus in each NUMA cell is less than the maximum vcpus count of the domain. This is an implementation based on Peter Krempa's suggestion in [1]. The documentation patch (04), aside from documentating this new behavior, while also letting the user know that using incomplete NUMA topologies are not advised. This feature does not break migration ABI. I tested it in a migration using an incomplete NUMA topology domain to migrate to another host with a patched Libvirt. A guest with this NUMA topology, declaring 9 vcpus and short of 7 vcpus to complete the total of 16: <vcpu placement='auto'>16</vcpu> [...] <cpu mode='custom' match='exact' check='none'> <model fallback='forbid'>POWER9</model> <numa> <cell id='0' cpus='0-1,6' memory='3906250' unit='KiB'/> <cell id='1' cpus='2-4' memory='3906250' unit='KiB'/> <cell id='2' cpus='10,12' memory='3906250' unit='KiB'/> <cell id='3' cpus='14' memory='3906250' unit='KiB'/> </numa> </cpu> Successfully migrates to a patched Libvirt, ending up with this topology where the missing VCPUs were added to node 0: <vcpu placement='auto'>16</vcpu> [...] <cpu mode='custom' match='exact' check='none'> <model fallback='forbid'>POWER9</model> <numa> <cell id='0' cpus='0-1,5-9,11,13,15' memory='3932160' unit='KiB'/> <cell id='1' cpus='2-4' memory='3932160' unit='KiB'/> <cell id='2' cpus='10,12' memory='3932160' unit='KiB'/> <cell id='3' cpus='14' memory='3932160' unit='KiB'/> </numa> </cpu> [1] https://www.redhat.com/archives/libvir-list/2019-June/msg00263.html Daniel Henrique Barboza (5): numa_conf.c: add helper functions for cpumap operations qemu_domain.c: NUMA CPUs auto-fill for incomplete topologies qemuxml2xmltest.c: add NUMA vcpus auto fill tests formatdomain.html.in: document the NUMA cpus auto fill feature qemu_validate.c: revert NUMA CPU range user warning docs/formatdomain.html.in | 11 ++++- src/conf/numa_conf.c | 46 ++++++++++++++++++ src/conf/numa_conf.h | 3 ++ src/libvirt_private.syms | 1 + src/qemu/qemu_domain.c | 47 +++++++++++++++++++ src/qemu/qemu_domain.h | 4 ++ src/qemu/qemu_driver.c | 9 ++++ src/qemu/qemu_validate.c | 19 ++------ .../numavcpus-topology-mismatch.xml | 37 +++++++++++++++ ...avcpus-topology-mismatch.x86_64-latest.xml | 38 +++++++++++++++ tests/qemuxml2xmltest.c | 1 + 11 files changed, 201 insertions(+), 15 deletions(-) create mode 100644 tests/qemuxml2argvdata/numavcpus-topology-mismatch.xml create mode 100644 tests/qemuxml2xmloutdata/numavcpus-topology-mismatch.x86_64-latest.xml