基于 I/O (PCIe) 的 NUMA 调度¶
https://blueprints.launchpad.net/nova/+spec/input-output-based-numa-scheduling
基于 I/O 的 NUMA 调度将为分配了主机 PCI 设备的虚拟机添加智能 NUMA 节点放置支持。
问题描述¶
拥有两个或多个处理器的现代服务器具有非统一内存架构 (NUMA)。这意味着,访问直接连接到某个处理器的内存与访问直接连接到同一服务器中另一个处理器的内存时,存在不同的内存性能和延迟特性。 类似地,PCIe I/O 设备,例如网络接口卡 (NIC),可能更紧密地与某个处理器相关联,而不是另一个处理器。
在多 NUMA 节点平台上,最佳配置是将虚拟机所需的所有主机资源与相同的主机 NUMA 节点关联起来,这将减少或消除跨 NUMA 节点内存流量。
要到达远程 NUMA 节点,内存请求必须遍历 CPU 之间的互连链路,并使用远程 NUMA 节点关联的内存控制器来访问远程节点。 这会给远程 NUMA 节点内存访问带来延迟惩罚。
默认虚拟机放置策略是使用来自任何 NUMA 节点的任何可用物理 CPU (pCPU)。 此蓝图通过确保绑定到 PCI 设备的虚拟机被调度到与虚拟机的 pCPU 和内存分配关联的 NUMA 节点上,来优化 Openstack 虚拟机放置。
用例¶
运行工作负载的虚拟机需要使用主机上的网络和内存资源。 对于资源需求适合单个 NUMA 节点的用例,理想配置的系统应将所有虚拟机资源与相同的 NUMA 节点关联起来。 NFV 代表一个特别重要的用例,但对于其他更“传统”的云和企业工作负载,也存在显著的好处。
项目优先级¶
Kilo 优先级列表当前未定义。 但是,根据目前拟议的优先级列表,它将属于“性能”类别。
提议的变更¶
扩展 PCI 设备模型,添加 NUMA 节点字段。
Libvirt 版本 > 1.2.6 将提供主机 PCI 设备的 NUMA 节点,我们将存储此信息在 nova DB 中,以便在虚拟机放置阶段使用。
扩展 libvirt 配置的 PCI 设备功能。
扩展 libvirt 驱动程序以捕获 PCI 设备的 numa 节点。
扩展 PCI 设备跟踪器以跟踪 PCI 设备 NUMA 节点使用情况。
Nova 调度将得到增强,以考虑虚拟机的 PCI 设备需求以及可用于放置的节点。
NUMA 拓扑过滤器将被修改,以确保虚拟机被调度到请求的主机 NUMA 节点上。
备选方案¶
Libvirt 支持与 NUMA 守护程序 (numad) 集成,该守护程序监控 NUMA 拓扑和使用情况。 它尝试为最佳 NUMA 局部性定位虚拟机,并动态调整以适应不断变化的系统条件。 这不足够,因为我们需要在 nova 中实现这种智能,用于主机选择和节点部署。
数据模型影响¶
PciDevice 模型将被扩展,以添加一个标识 PCI 设备关联的 NUMA 节点的字段。
numa_node = Column(Integer, nullable=True)
一个 DB 迁移脚本将使用 ALTER_TABLE 在 nova DB 的 pci_devices 表中添加一个新列。
REST API 影响¶
REST API 将不会发生变化。
安全影响¶
此蓝图不会引入任何新的安全问题。
通知影响¶
此蓝图不会引入新的通知。
其他最终用户影响¶
此蓝图不会增加任何其他最终用户影响。
性能影响¶
将虚拟机的 PCI 设备和 RAM 分配与相同的 NUMA 节点关联,提供了一种最佳配置,与默认的 libvirt 虚拟机放置策略相比,可以提高 I/O 吞吐量并降低内存延迟。
此功能会增加一些调度开销,但此开销将提高主机性能。
其他部署者影响¶
要使用此功能,部署者必须使用能够向操作系统报告 NUMA 相关信息的硬件。
开发人员影响¶
此蓝图不会对开发人员产生任何影响。
实现¶
负责人¶
- 主要负责人
James Chapman
- 其他贡献者
Przemyslaw Czesnowicz Sean Mooney Adrian Hoban
工作项¶
向 pci_device 对象添加 NUMA 节点属性
使用 libvirt 发现主机 PCI 设备 NUMA 节点关联
启用 nova compute 将 PCI 设备 NUMA 节点关联与 nova DB 同步
启用 libvirt 驱动程序配置虚拟机,并使用请求的 PCI 设备 NUMA 节点关联
启用 nova 调度程序决定哪个主机最适合支持虚拟机
启用 libvirt 驱动程序决定将虚拟机放置在哪个 NUMA 节点上
依赖项¶
此功能的依赖项已包含在 Juno 版本中。
测试¶
将添加单元测试以验证这些修改。
文档影响¶
此功能不会添加新的调度过滤器,而是扩展现有的 NUMA 拓扑过滤器。 我们将根据需要添加文档。
参考资料¶
无