VM 作用域 SR-IOV NUMA 亲和性策略

https://blueprints.launchpad.net/nova/+spec/vm-scoped-sriov-numa-affinity

在 Queens 版本中 [1],添加了支持通过 PCI 别名指定 PCI NUMA 亲和性策略的功能。这项工作建立在 Juno 版本中引入的先前功能之上 [2],该功能引入了 PCI 设备的严格 NUMA 亲和性;然而,Queens 功能并未解决 neutron SR-IOV 接口的 NUMA 亲和性问题,而原始 Juno 增强功能也强制执行了该问题。本规范旨在为所有 PCI 直通设备提供一个按 VM 的机制来设置 VM 范围内的 NUMA 亲和性策略,包括但不限于 neutron SR-IOV 接口 (vnic_type=direct,direct-phyical,macvtap,virtio-forwarder)

问题描述

在某些环境中,服务器的外形尺寸受到限制,阻止 PCI 设备在服务器上的所有 NUMA 节点上物理安装,例如高密度刀片/多服务器系统或非标准外形尺寸的设备。在这种环境下,应用于所有 neutron SR-IOV 接口的默认传统策略会阻止 VM 在非本地 NUMA 节点上使用 SR-IOV,如果 VM 具有 NUMA 拓扑(使用 CPU pinning、vPMEM、hugepages 或显式请求 NUMA 拓扑)。

为了通过 neutron 端口在这样的环境中远程使用 SR-IOV 设备,操作员被迫配置来宾虚拟机具有多个 NUMA 节点,或者禁用主机服务器上的 NUMA 报告。两种选项都会以不同的方式降低来宾虚拟机和主机的性能。虽然具有多个虚拟 NUMA 节点的 VM 在内存受限的工作负载中可以优于具有相同资源和单个 NUMA 节点的 VM,但这只有在工作负载感知 NUMA 的情况下才成立。如果对未感知 NUMA 的工作负载强制执行两节点 NUMA 拓扑,可能会导致跨 NUMA 流量增加,从而导致吞吐量降低。同样,虽然在某些 HPC 工作负载中禁用硬件级别的 NUMA 报告由于增加了内存带宽而有益,但它会以增加内存延迟为代价,使其不适合实时工作负载,例如 VOIP。

用例

作为在高性能或受限外形尺寸硬件上部署 openstack 的操作员,我希望通过标准的 flavor 额外规格指定 SR-IOV 设备的按 VM NUMA 亲和性策略。

作为租户或 VNF 供应商,我希望能够通过镜像属性自定义我的 VM 的亲和性,以便表达我的工作负载的 NUMA 亲和性要求。

提议的变更

本规范建议通过添加新的 flavor 额外规格 hw:pci_numa_affinity_policyhw_pci_numa_affinity_policy 镜像元数据属性,将 [1] 中引入的 PCI NUMA 亲和性策略扩展到所有 PCI 和 SR-IOV 设备,包括 neutron 端口。

新的属性将接受以下三个值之一:requiredpreferredlegacy,如 [1] 中定义。如果使用 flavor 别名请求 PCI 设备,flavor 或镜像中指定的 NUMA 亲和性策略将优先于主机 PCI 别名中设置的任何策略。如果在 flavor 或镜像中未指定 PCI NUMA 亲和性策略,则基于别名的 PCI 直通将回退到别名中设置的策略。如果在 flavor 或镜像中未设置策略,并且别名中也未设置策略,则将继续使用传统策略。对于 neutron SR-IOV 接口,如果在 flavor 或镜像中未设置策略,则将使用传统策略。

注意

Queens 规范 [1] 最初包含建议的 flavor 和镜像属性,但在实施过程中被删除,因为促使该功能的原始 neutron 端口用例未包含在规范中。因此,虽然 Queens 功能解决了基于 flavor 的 PCI 直通的 NUMA 亲和性问题,但没有可用的机制来指定 neutron SR-IOV 接口的策略。

备选方案

如果未指定策略,我们可以将默认策略更改为 preferred。这将优化那些不关心 NUMA 亲和性的人的情况,但代价是需要那些关心的人指定策略。由于这将是升级时的行为变化,因此我们不建议采取这种方法。

我们可以启用每个接口的 NUMA 亲和性策略。这与本提案并不互斥,并将作为附加功能单独提出。基于 flavor 和镜像的方法涵盖了 80% 的用例,而无需更改 neutron api,这些用例可以通过每个接口的 NUMA 亲和性策略来实现。

数据模型影响

镜像元数据对象和相关的通知对象将被更新以包含新的 PCI NUMA 亲和性字段。由于 PCI 请求规范对象已经具有基于别名的直通的 NUMA 亲和性策略字段,因此不需要其他数据模型更改。

REST API 影响

不会直接更改任何现有的 API。但是,将引入一个新的 flavor 额外规格。

安全影响

通知影响

镜像元数据属性有效负载将扩展为包含新的属性字段。预计不会有其他影响。

其他最终用户影响

为了利用此功能,操作员和租户需要修改他们的镜像和 flavor,以添加 hw:pci_numa_affinity_policyhw_pci_numa_affinity_policy 属性。

性能影响

由于调度器已经断言了传统的 PCI 亲和性,因此传递策略以断言它不应影响整体调度时间。根据所选策略,来宾虚拟机的性能可能会根据该策略表达的保证而提高或降低。

其他部署者影响

正如先前启用 SR-IOV/PCI 设备的 NUMA 亲和性所要求的,必须启用 PCI 直通和 NUMA 拓扑过滤器。

开发人员影响

升级影响

实现

负责人

主要负责人

sean-k-mooney

功能联络人

功能联络人

sean-k-mooney

工作项

依赖项

测试

由于此功能与 SR-IOV 相关,因此无法通过 tempest 在上游 gate 中进行测试。将提供单元测试以断言策略是否正确地传递到现有的 PCI 分配代码,并且可以根据需要扩展现有的功能测试。

由于此功能只是提供了一种指定 PCI 亲和性策略的另一种方式,因此代码更改很小,并且可以利用大部分现有的测试覆盖范围。

文档影响

将提供发布说明和对现有用户 flavor 文档的更新,并且 glance metadefs 应更新以反映新的镜像属性。

参考资料

历史

修订

发布名称

描述

Ussuri

引入