本作品采用知识共享署名 3.0 未移植许可协议授权。
http://creativecommons.org/licenses/by/3.0/legalcode
向 Tripleo 添加 SR-IOV¶
SR-IOV 是一种扩展 PCI Express 规范的规范,它允许 PCIe 设备表现为多个独立的物理 PCIe 设备。
SR-IOV 提供一个或多个虚拟功能 (VF) 和一个物理功能 (PF)
虚拟功能 (VF) 是“轻量级”PCIe 功能,包含必要的数据移动资源,但具有经过仔细最小化的配置资源集。
物理功能 (PF) 是完整的 PCIe 功能,包含 SR-IOV 扩展功能。该功能用于配置和管理 SR-IOV 功能。
VF 可以像专用 PCIe 设备一样附加到虚拟机,从而大大提高 SR-IOV 网卡的网络性能。
问题描述¶
目前,SR-IOV 功能的安装和配置是在 Overcloud 部署后手动完成的。它应该通过 tripleo 实现自动化。
目前,SR-IOV 的硬件能力识别都是手动完成的,并且应该在自检期间实现自动化。硬件检测还为操作员提供配置 Heat 模板所需的数据。
提议的变更¶
概述¶
Ironic Python Agent 将发现以下硬件详细信息并将其存储在 swift blob 中 -
支持 SR-IOV 的网卡:应读取 /sys/bus/pci/devices/…/sriov_totalvfs 并检查其是否非零,以便确定网卡是否支持 SR-IOV
BIOS 中的 VT-d 或 IOMMU 支持:应读取 CPU 标志以识别支持情况。
DIB 默认应包含该软件包 - openstack-neutron-sriov-nic-agent。
不具备上述任何功能的节点不能用于具有 SR-IOV 的 COMPUTE 角色
SR-IOV 驱动程序应通过持久模块加载脚本在启动时加载。这些持久模块加载脚本应由 Puppet 清单创建。
T-H-T 应提供以下详细信息
supported_pci_vendor_devs - 配置在运行 neutron-server 的节点中的 vendor-id/product-id 对
vf 的最大数量 - 跨重启持久化
物理设备映射 - 在计算节点中添加物理设备映射 ml2_conf_sriov.ini 文件
在运行 Neutron 服务器的节点上,Puppet 应
在 /etc/neutron/plugin.ini 文件中启用 sriovnicswitch mechanism_drivers = openvswitch,sriovnicswitch 此配置在 OpenvSwitch 旁边启用 SR-IOV 机制驱动程序。
在 /etc/neutron/plugin.ini 文件中设置 SR-IOV 的 VLAN 范围,该文件位于网络节点 network_vlan_ranges = <物理网络名称 SR-IOV 接口>:<VLAN 最小值> :<VLAN 最大值> 例如:network_vlan_ranges = fabric0:15:20
如果与 /etc/neutron/plugins/ml2/ml2_conf_sriov.ini 中的“15b3:1004,8086:10ca”不同,则配置 vendor-id/product-id 对 supported_pci_vendor_devs = 15b3:1004,8086:10ca,<vendor-id:product-id>
配置 neutron-server.service 以使用 ml2_conf_sriov.ini 文件 [Service] Type=notify User=neutron ExecStart=/usr/bin/neutron-server –config-file /usr/share/neutron/neutron-dist.conf –config-file /etc/neutron/neutron.conf –config-file /etc/neutron/plugin.ini –config-file /etc/neutron/plugins/ml2/ml2_conf_sriov.ini –log-file /var/log/neutron/server.log
在运行 nova scheduler 的节点上,Puppet 应
将 PciPassthroughFilter 过滤器添加到 scheduler_default_filters 列表中。这需要完成才能允许正确调度 SR-IOV 设备
在每个 COMPUTE+SRIOV 节点上,Puppet 应配置 /etc/nova/nova.conf
将可用的 VF 与每个物理网络关联起来 例如:pci_passthrough_whitelist={“devname”: “enp5s0f1”, “physical_network”:”fabric0”}
PCI passthrough 允许列表条目使用以下语法:[“device_id”: “<id>”,] [“product_id”: “<id>”,] [“address”: “[[[[<domain>]:]<bus>]:][<slot>][.[<function>]]” | “devname”: “以太网接口名称”,] “physical_network”:”网络标签字符串”
需要从代理配置中排除的 VF 应添加到 [sriov_nic]/exclude_devices 中。T-H-T 应配置此项。
每个主机支持多个允许列表条目。
Puppet 应
设置操作员配置的 VF 最大数量 echo required_max_vfs > /sys/bus/pci/devices/…/sriov_numvfs Puppet 还会验证 required_max_vfs,以确保它不超过设备上支持的最大值。
在 ‘/etc/neutron/plugins/ml2/sriov_agent.ini’ 文件中启用 NoopFirewallDriver。
[securitygroup] firewall_driver = neutron.agent.firewall.NoopFirewallDriver
将映射添加到 /etc/neutron/plugins/ml2/sriov_agent.ini 文件。例如:physical_device_mappings = fabric0:enp4s0f1 在此示例中,fabric0 是物理网络,而 enp4s0f1 是物理功能
Puppet 应在 Compute 上启动 SR-IOV 代理
systemctl enable neutron-sriov-nic-agent.service
systemctl start neutron-sriov-nic-agent.service
替代方案¶
无
安全影响¶
目前我们没有支持 SR-IOV 的防火墙驱动程序。安全组将仅在计算主机的 SR-IOV 端口上禁用。
其他最终用户影响¶
无
性能影响¶
SR-IOV 为物理服务器上的每个虚拟机提供接近原生 I/O 性能。参考 - http://goo.gl/HxZvXX
其他部署者影响¶
操作员应确保 BIOS 支持计算节点上的 VT-d/IOMMU 虚拟化技术。
需要在 Compute+SRIOV 节点中启用 IOMMU。启动参数 (intel_iommu=on 或 amd_iommu=pt) 应使用第一个启动脚本 (THT) 添加到 grub.conf 中。
部署后,操作员应
在创建 VM (nova boot) 之前创建 neutron 端口 neutron port-create fabric0_0 –name sr-iov –binding:vnic-type direct
使用所需的 flavor 和 SR-IOV 端口 ID 创建 VM 例如:nova boot –flavor m1.small –image <image id> –nic port-id=<port id> vnf0
开发人员影响¶
无
实现¶
负责人¶
主要负责人
karthiks
sanjayu
工作项¶
如上述“Proposed changes”中所述
依赖项¶
我们依赖于可组合角色,因为 SR-IOV 特定的更改是我们将在特定的计算节点上需要的,而不是通常在所有节点上需要的。蓝图 - https://blueprints.launchpad.net/tripleo/+spec/composable-services-within-roles
测试¶
由于 SR-IOV 需要特定的硬件支持,因此无法在 CI 下测试此功能。我们需要第三方 CI 来验证它。
文档影响¶
操作员需要执行的手动步骤应记录下来。例如:配置 VT-d、IOMMU 的 BIOS,以及部署后配置。
参考文献¶
虚拟网络 SR-IOV 支持 https://goo.gl/eKP1oO
在 OpenStack 中启用 SR-IOV 功能 https://docs.openstack.org/liberty/networking-guide/adv_config_sriov.html
SR-IOV 简介 http://goo.gl/m7jP3
CPU pinning 和 NUMA 拓扑的设置过程 http://goo.gl/TXxuhv
/sys/bus/pci/devices/…/sriov_totalvfs - 此文件出现在支持 SR-IOV 的物理 PCIe 设备上。 https://linuxkernel.org.cn/doc/Documentation/ABI/testing/sysfs-bus-pci