Port NUMA 亲和性策略

https://bugs.launchpad.net/neutron/+bug/1886798

为“port”对象添加一个新的参数来设置 NUMA 亲和性策略。

问题描述

目前 Nova 允许为 PCI 设备定义“numa_affinity_policy”。这些 PCI 设备可以是网络卡,例如。当使用此物理设备(具有 VNIC 类型“direct”、“direct-physical”、“macvtap”或“virtio-forwarder”的 SR-IOV port)创建 port 时,Nova 将根据 host NUMA 拓扑可用性和与此 PCI 网络设备关联的 NUMA 节点来选择生成虚拟机的 host [1]

但是,对于 SR-IOV 以外的其他后端,目前无法进行此过滤。例如,使用 DPDK 的 Open vSwitch 将运行连接到特定 CPU 核心(以及特定 NUMA 节点)的 PMD 线程 [2]。Nova 通过为每个定义的物理或隧道网络分配一组 NUMA 节点来表示此信息 [3]。如果提供了 port NUMA 亲和性策略,Nova 将在调度期间强制执行它。

提议的变更

此 spec 的目标是创建一个适用于所有 port 的“numa_affinity_policy”参数。此信息将提供给 Nova,Nova 将在调度虚拟机时使用它,而与网络后端无关。

当然,Nova 应该具有网络后端 NUMA 信息拓扑。例如,由于 [3],Nova 可以静态配置物理网络的 NUMA 位置。使用 port “numa_affinity_policy”参数,Nova 调度器将过滤与所需策略匹配的那些 host。

此 spec 涵盖了 [4] 中定义的缺失情况。为每个 port(接口)定义 NUMA 亲和性策略,包括所有类型的 port,而不仅仅是 SR-IOV 接口。它还避免在 Nova flavor 中定义 NUMA 亲和性;相反,可以使用具有不同策略的通用 flavor。

此 spec 建议为“port”对象添加一个新的参数。此参数“numa_affinity_policy”将是一个字符串,定义基于 Nova 中定义的 PCINUMAAffinityPolicy [5] enum 的 NUMA 亲和性策略。该字段可以具有不同的值:“required”、“legacy”和“preferred”。

此信息将在告知 Nova 时填充到“port”字典中。此参数将作为 port 字典中的一个新扩展,以名为“numa_affinity_policy”的新字段添加。默认情况下,此新参数的值将为“None”,以保持向后兼容性。

数据模型影响

将创建一个名为“portnumaaffinitypolicy”的新表

属性名称

类型

CRUD

默认值

验证/转换

port_id

uuid-str

R

numa_affinity_policy

str

CRU

枚举(包括 None)

此子表将依赖于“ports”表。每一行将与“port”行具有 1:1 的关系,并且当“port”行也被删除时,将删除该行。

REST API 影响

“port”API 中的“numa_affinity_policy”参数

NUMA_AFFINITY_POLICY_VALUES = (None, 'required', 'preferred', 'legacy')

RESOURCE_ATTRIBUTE_MAP = {
    'port': {
        'numa_affinity_policy': {
            'allow_post': True,
            'allow_put': True,
            'validate': {'type:values': NUMA_AFFINITY_POLICY_VALUES}
            'default': None,
            'is_visible': True}
    }
}

仅当 port 未绑定时,才能更新该参数。此检查不依赖于 API,而是依赖于服务器。

安全影响

性能影响

操作员 CLI 影响

将在“port”CLI 接口的 create、set 和 unset 命令中添加一个额外的参数。

用于记录资源

openstack port create [--numa-policy-required | --numa-policy-preferred |
                       --numa-policy-legacy]

openstack port set [--numa-policy-required | --numa-policy-preferred |
                    --numa-policy-legacy]

openstack port unset --numa-policy

实现

负责人

主要负责人

Rodolfo Alonso Hernandez <ralonsoh@redhat.com> (IRC: ralonsoh)

测试

  • 单元测试

  • 功能测试

  • API 测试

文档影响

用户文档

  • 为操作员将 CLI 用法添加到网络指南中。

参考资料