第 7 章 部署 SR-IOV 技术
在 Red Hat OpenStack Platform NFV 部署中,当您通过虚拟资源从实例直接访问共享 PCIe 资源时,您可以使用单一根 I/O 虚拟化(SR-IOV)实现更高的性能。
7.1. 配置 SR-IOV
要使用单一根 I/O 虚拟化(SR-IOV)部署 Red Hat OpenStack Platform(RHOSP),请配置具有 SR-IOV 功能的共享 PCIe 资源,以便实例可以请求直接访问。
以下 CPU 分配、内存分配和 NIC 配置是示例,可能与您的用例不同。
先决条件
有关如何在部署 overcloud 前安装和配置 undercloud 的详情,请参阅 Director 安装和使用指南。
注意不要手动编辑 director heat 模板修改的
/etc/tuned/cpu-partitioning-variables.conf
中的任何值。-
访问
stack
用户的 undercloud 主机和凭据。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:[stack@director ~]$ source ~/stackrc
生成一个名为
roles_data_compute_sriov.yaml
的新角色数据文件,其中包含Controller
和ComputeSriov
角色:(undercloud)$ openstack overcloud roles \ generate -o /home/stack/templates/roles_data_compute_sriov.yaml \ Controller ComputeSriov
ComputeSriov
是 RHOSP 安装提供的自定义角色,除了默认的计算服务外,还包括NeutronSriovAgent
和NeutronSriovHostConfig
服务。要准备 SR-IOV 容器,请在生成
overcloud_images.yaml
文件时包括neutron-sriov.yaml
和roles_data_compute_sriov.yaml
文件。$ sudo openstack tripleo container image prepare \ --roles-file ~/templates/roles_data_compute_sriov.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-sriov.yaml \ -e ~/containers-prepare-parameter.yaml \ --output-env-file=/home/stack/templates/overcloud_images.yaml
如需有关 容器镜像准备 的更多信息,请参阅 Director 安装和使用指南中的准备容器镜像。
在环境文件目录中,创建
/usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml
文件的副本:$ cp /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml /home/stack/templates/network-environment-sriov.yaml
在您的
network-environment-sriov.yaml
文件的parameter_defaults
下添加以下参数,为您的集群和硬件配置 SR-IOV 节点:NeutronNetworkType: 'vlan' NeutronNetworkVLANRanges: - tenant:22:22 - tenant:25:25 NeutronTunnelTypes: ''
要确定每个 PCI 设备类型的
vendor_id
和product_id
,请在具有 PCI 卡的物理服务器中使用以下命令之一:要从部署的 overcloud 返回
vendor_id
和product_id
,请使用以下命令:# lspci -nn -s <pci_device_address> 3b:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [<vendor_id>: <product_id>] (rev 02)
如果您尚未部署 overcloud,返回
vendor_id
和product_id
(PF),请使用以下命令:(undercloud) [stack@undercloud-0 ~]$ openstack baremetal introspection data save <baremetal_node_name> | jq '.inventory.interfaces[] | .name, .vendor, .product'
在
network-environment-sriov.yaml
文件中为 SR-IOV 计算节点配置角色特定参数:ComputeSriovParameters: IsolCpusList: "1-19,21-39" KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=1-19,21-39" TunedProfileName: "cpu-partitioning" NeutronBridgeMappings: - tenant:br-link0 NeutronPhysicalDevMappings: - tenant:p7p1 NovaComputeCpuDedicatedSet: '1-19,21-39' NovaReservedHostMemory: 4096
注意NovaVcpuPinSet
参数现已弃用,并被用于专用固定工作负载的NovaComputeCpuDedicatedSet
替代。在
network-environment-sriov.yaml
文件中为 SR-IOV 计算节点配置 PCI 透传设备:ComputeSriovParameters: ... NovaPCIPassthrough: - vendor_id: "<vendor_id>" product_id: "<product_id>" address: <NIC_address> physical_network: "<physical_network>" ...
-
将
<vendor_id
> 替换为 PCI 设备的厂商 ID。 -
将
<product_id
> 替换为 PCI 设备的产品 ID。 -
将
<NIC_address
> 替换为 PCI 设备的地址。有关如何配置address
参数的详情,请参考 为实例创建配置计算服务指南中的 配置 NovaPCIPassthrough。 使用 PCI 设备所在的物理网络的名称替换
<physical_network>
。注意在配置 PCI 透传时不要使用
devname
参数,因为 NIC 的设备名称可能会改变。要在 PF 上创建 Networking 服务(neutron)端口,请指定vendor_id
、product_id
以及NovaPCIPassthrough
中的 PCI 设备地址,并使用--vnic-type direct-physical
选项创建端口。要在虚拟功能(VF)上创建网络服务端口,在NovaPCIPassthrough
中指定vendor_id
和product_id
,并使用--vnic-type direct
选项创建端口。vendor_id
和product_id
参数的值可能在物理功能(PF)和 VF 上下文之间不同。有关如何配置NovaPCIPassthrough
的更多信息,请参阅 为实例创建配置计算服务指南中的 配置 NovaPCIPassthrough 的指南。
-
将
在
compute.yaml
网络配置模板中配置启用了 SR-IOV 的接口。要创建 SR-IOV VF,将接口配置为独立 NIC:- type: sriov_pf name: p7p3 mtu: 9000 numvfs: 10 use_dhcp: false defroute: false nm_controlled: true hotplug: true promisc: false - type: sriov_pf name: p7p4 mtu: 9000 numvfs: 10 use_dhcp: false defroute: false nm_controlled: true hotplug: true promisc: false
注意numvfs
参数取代了网络配置模板中的 NeutronSriovNum
VFs 参数。红帽不支持在部署后修改NeutronSriovNumVFs
参数或numvfs
参数。如果在部署后修改任一参数,这可能会给该 PF 上带有 SR-IOV 端口的运行实例造成中断。在这种情况下,您必须硬重启这些实例,以便 SR-IOV PCI 设备再次可用。确保默认过滤器列表包含
AggregateInstanceExtraSpecsFilter
的值:NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','Serve rGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','AggregateInstanceExt raSpecsFilter']
-
运行
overcloud_deploy.sh
脚本。