[PATCH 0/5] NUMA CPUs 'auto-fill' for incomplete topologies

Daniel Henrique Barboza danielhb413 at gmail.com
Mon Jun 1 17:50:36 UTC 2020


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

-- 
2.26.2




More information about the libvir-list mailing list