<div dir="ltr"><div><br></div><div>Hi, folks.</div><div><br></div><div>I want to start a discussion about NUMA + SR-IOV environment. I have a two-sockets server. It has two NUMA nodes and only one SR-IOV PCI device. This device is associated with the first NUMA node. I booted a set of VMs with SR-IOV support. Each of these VMs was booted on the first NUMA node. As I understand it happened for better performance (VM should be booted in NUMA node which has PCI device for this VM) [1]. </div><div><br></div><div>But this behavior leaves my 2-sockets machines half-populated. What if I don't care about SR-IOV performance? I just want every VM from *any* of NUMA nodes to use this single SR-IOV PCI device.</div><div><br></div><div>But I can't do it because of behavior of numa_topology_filter. In this filter we want to know if current host has required PCI device [2]. But we want to have this device *only* in some numa cell on this host. It is hardcoded here [3]. If we do *not* pass variable "cells" to the method support_requests() [4] we will boot VM on the current host, if it has required PCI device *on host* (maybe not in the same NUMA node). </div><div><br></div><div>So my question is:</div><div>Is it correct that we *always* want to boot VM in NUMA node associated with requested PCI device and user has no choice?</div><div>Or should we give a choice to the user and let him boot a VM with PCI device, associated with another NUMA node?</div><div><br></div><div><br></div><div>[1] <a href="https://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/input-output-based-numa-scheduling.html">https://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/input-output-based-numa-scheduling.html</a></div><div>[2] <a href="https://github.com/openstack/nova/blob/master/nova/scheduler/filters/numa_topology_filter.py#L85">https://github.com/openstack/nova/blob/master/nova/scheduler/filters/numa_topology_filter.py#L85</a></div><div>[3] <a href="https://github.com/openstack/nova/blob/master/nova/virt/hardware.py#L1246-L1247">https://github.com/openstack/nova/blob/master/nova/virt/hardware.py#L1246-L1247</a></div><div>[4] <a href="https://github.com/openstack/nova/blob/master/nova/pci/stats.py#L277">https://github.com/openstack/nova/blob/master/nova/pci/stats.py#L277</a></div></div>