NumaTopololgyFilter Not behaving as expected (returns 0 hosts)
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Compute (nova) |
Invalid
|
Low
|
Stephen Finucane |
Bug Description
I have a system with 32 cores (2 sockets, 8 cores, hyperthreading enabled).
The NUMA topology as follows:
numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 65501 MB
node 0 free: 38562 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 65535 MB
node 1 free: 63846 MB
node distances:
node 0 1
0: 10 20
1: 20 10
I have defined an flavor in Openstack with 12 vcpus as follows:
nova flavor-show c4.3xlarge
+------
| Property | Value |
+------
| OS-FLV-
| OS-FLV-
| disk | 40 |
| extra_specs | {"hw:cpu_policy": "dedicated", "hw:numa_nodes": "1"} |
| id | 1d76a225-
| name | c4.3xlarge |
| os-flavor-
| ram | 24576 |
| rxtx_factor | 1.0 |
| swap | 8192 |
| vcpus | 12 |
+------
I expect to be able to launch two instances of this flavor on the 32 core host, one contained within each NUMA node.
When I launch two instances, the first succeeds, but the second fails. The instance xml is attached, along with the system capabilities.
If I change hw:numa_nodes = 2, then I can launch two copies of the instance.
N.B for the purposes of testing I have disabled all vcpu_pin and isolcpu settings.
This was tested on RDO Kilo running on CentOS 7.
I had to upgrade the hypervisor with packages from the ovirt master branch in order to support NUMA pinning.
tags: | added: numa |
Changed in nova: | |
assignee: | nobody → Dave Johnston (dave-johnston) |
Some more info.
When I change hw:numa_nodes = 2 in my 12 vCPU flavor, I can launch 2 instances.
I can also launch a 4vcpu flavor that has the following extra_specs:
{"hw:cpu_policy": "dedicated", "hw:numa_nodes": "2"}
If then enable vcpu_pin_set in nova, with the following: 23,10-15, 24-31
vcpu_pin_set = 2-7,16-
i.e. I want to pin to all vcpus apart from 0,1 and 8,,9 (the first two from each NUMA node).
If I now try to launch the two 12vCPU instances + 1 4 vCPU instance, the smaller instance fails.
The two 12 vCPU instances get the following pinning
<cputune> 12288</ shares> '4-5,7, 10,12-13, 20-21,23, 26,28-29' />
<shares>
<vcpupin vcpu='0' cpuset='4'/>
<vcpupin vcpu='1' cpuset='20'/>
<vcpupin vcpu='2' cpuset='7'/>
<vcpupin vcpu='3' cpuset='23'/>
<vcpupin vcpu='4' cpuset='5'/>
<vcpupin vcpu='5' cpuset='21'/>
<vcpupin vcpu='6' cpuset='10'/>
<vcpupin vcpu='7' cpuset='26'/>
<vcpupin vcpu='8' cpuset='12'/>
<vcpupin vcpu='9' cpuset='28'/>
<vcpupin vcpu='10' cpuset='13'/>
<vcpupin vcpu='11' cpuset='29'/>
<emulatorpin cpuset=
</cputune>
and
<cputune> 12288</ shares> '4-5,7, 10,12-13, 20-21,23, 26,28-29' />
<shares>
<vcpupin vcpu='0' cpuset='4'/>
<vcpupin vcpu='1' cpuset='20'/>
<vcpupin vcpu='2' cpuset='7'/>
<vcpupin vcpu='3' cpuset='23'/>
<vcpupin vcpu='4' cpuset='5'/>
<vcpupin vcpu='5' cpuset='21'/>
<vcpupin vcpu='6' cpuset='10'/>
<vcpupin vcpu='7' cpuset='26'/>
<vcpupin vcpu='8' cpuset='12'/>
<vcpupin vcpu='9' cpuset='28'/>
<vcpupin vcpu='10' cpuset='13'/>
<vcpupin vcpu='11' cpuset='29'/>
<emulatorpin cpuset=
</cputune>
I have excluded 0,1 and 8,9 but I belive 16,17 from NUMA node 1 and 24,25 from NUMA node 2 should still be available for the small instance.