Hi Team,

We are using Kolla Ansible for our OpenStack Caracal (2024.1) deployment across two production sites. We have observed that the Nova scheduler is currently allocating virtual machines (VMs) only on a single NUMA socket of the compute host.
Since our flavors do not include the property hw:numa_nodes='2', the scheduler places all vCPUs and memory for a VM on a single NUMA node, leaving the other NUMA socket(s) underutilized.
In our testing, we added the hw:numa_nodes='2' property to the flavor and confirmed that the scheduler can now distribute vCPUs across both NUMA sockets. However, this configuration led to 20–30% memory performance degradation, likely due to cross-NUMA memory access.

We also noticed that once this property is set, the scheduler always attempts to spread vCPUs across two NUMA sockets — even when there are sufficient resources available on a single NUMA node.

We are looking for a way to achieve conditional NUMA placement — ideally:

- If a single NUMA node has enough capacity, schedule the VM entirely on that node.

- Otherwise, allow the scheduler to spread the VM across multiple NUMA nodes.

We would appreciate any suggestions or best practices to:
Improve NUMA-aware scheduling efficiency,Better utilize both NUMA sockets without significant memory performance penalties, andAvoid forcing cross-NUMA allocation unless necessary.

Has anyone in the community implemented or tuned Nova in a way that balances these requirements effectively?

Thanks in advance for your insights and recommendations.

Thanks