NUMATopologyFilter filters out a compute from candidates for booting a VM with 'hw:cpu_thread_policy=require' unless cores from all NUMA nodes are enabled in vcpu_pin_set on the compute
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Compute (nova) |
Fix Released
|
Medium
|
Mikhail Chernik | ||
Newton |
Fix Committed
|
Medium
|
Vladik Romanovsky |
Bug Description
The 'require' CPU thread policy allows booting instances on hardware threads siblings only. However, if a compute host has several NUMA nodes and at least one NUMA node does not contribute to a list of pinned CPU cores, NUMATopologyFilter excludes such node from possible targets to an instance.
Steps to reproduce:
1) On a compute with several NUMA nodes vcpu_pin_set key of nova.conf does not contain sibling thread cores from one NUMA node (e.g. they are allocated for OVS with DPDK support)
ex: vcpu_pin_
List of cores on a NUMA node can be obtained with lstopo or numactl -H command:
# numactl -H
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 20 21 22 23 24
node 0 size: 64328 MB
node 0 free: 21952 MB
node 1 cpus: 5 6 7 8 9 25 26 27 28 29
node 1 size: 64510 MB
node 1 free: 30091 MB
Sibling cores can be found with # cat /sys/bus/
# cat /sys/bus/
0,20
1,21
2) Create corresponding flavor
# openstack flavor create pinned.
# openstack flavor set pinned.
3) Boot an instance with created flavor
# openstack server create --flavor pinned.
4) List instances:
# openstack server list
Expected result:
Instance vm1 is booted
Actiual result:
Instance vm1 is in ERROR state with message 'No valid host was found. There are not enough hosts available.' (assuming there are no other computes with sibling thread cores available)
Changed in nova: | |
status: | New → In Progress |
assignee: | nobody → Mikhail Chernik (mchernik) |
tags: | added: mitaka-backport-potential |
Changed in nova: | |
importance: | Undecided → Medium |
tags: | added: numa |
Fix proposed to branch: master /review. openstack. org/334659
Review: https:/