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

Daniel Henrique Barboza posted 5 patches 3 years, 10 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20200601175041.1607723-1-danielhb413@gmail.com
There is a newer version of this series
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
[PATCH 0/5] NUMA CPUs 'auto-fill' for incomplete topologies
Posted by Daniel Henrique Barboza 3 years, 10 months ago
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

Re: [PATCH 0/5] NUMA CPUs 'auto-fill' for incomplete topologies
Posted by Daniel Henrique Barboza 3 years, 10 months ago
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
>