7.2. 配置 NIC 分区
您可以通过为 Red Hat OpenStack Platform (RHOSP)管理网络和供应商网络配置单一根 I/O 虚拟化(SR-IOV)虚拟功能(VF)来减少每个主机所需的 NIC 数量。当您将单个高速 NIC 划分为多个 VF 时,您可以将 NIC 用于 control 和 data plane 流量。此功能已在 Intel Fortville NIC 和 Mellanox CX-5 NIC 上进行验证。
流程
- 为您选择的角色打开 NIC 配置文件。
为接口类型
sriov_pf
添加一个条目,以配置主机可使用的物理功能:- type: sriov_pf name: <interface_name> use_dhcp: false numvfs: <number_of_vfs> promisc: <true/false>
-
将
<interface_name
> 替换为接口名称。 -
将
<number_of_vfs
> 替换为 VF 的数量。 -
可选:将
<true/false>
替换为true
来设置 promiscuous 模式,设置为false
来禁用 promiscuous 模式。默认值为true
。
注意numvfs
参数取代了网络配置模板中的 NeutronSriovNum
VFs 参数。红帽不支持在部署后修改NeutronSriovNumVFs
参数或numvfs
参数。如果在部署后修改任一参数,这可能会给该物理功能(PF)上运行 SR-IOV 端口的正在运行的实例造成中断。在这种情况下,您必须硬重启这些实例,以便 SR-IOV PCI 设备再次可用。-
将
为接口类型
sriov_vf
添加条目,以配置主机可以使用的虚拟功能:- type: <bond_type> name: internal_bond bonding_options: mode=<bonding_option> use_dhcp: false members: - type: sriov_vf device: <pf_device_name> vfid: <vf_id> - type: sriov_vf device: <pf_device_name> vfid: <vf_id> - type: vlan vlan_id: get_param: InternalApiNetworkVlanID spoofcheck: false device: internal_bond addresses: - ip_netmask: get_param: InternalApiIpSubnet routes: list_concat_unique: - get_param: InternalApiInterfaceRoutes
-
将
<bond_type
> 替换为所需的绑定类型,如linux_bond
。您可以在绑定中为其他绑定应用 VLAN 标签,如ovs_bond
。 将
<bonding_option
> 替换为以下支持的绑定模式之一:-
active-backup
balance-slb
注意不支持 LACP 绑定。
-
在
members
部分中,指定sriov_vf
作为绑定的接口类型。注意如果您使用 OVS 网桥作为接口类型,则只能在
sriov_pf
设备的sriov_vf
上配置一个 OVS 网桥。单个sriov_pf
设备中的多个 OVS 网桥可能会导致 VF 间的数据包重复,并降低性能。-
将
<pf_device_name
> 替换为 PF 设备的名称。 -
如果使用
linux_bond
,则必须分配 VLAN 标签。如果设置了 VLAN 标签,请确保为与单个sriov_pf
设备关联的每个 VF 设置唯一标签。同一 VLAN 上不能有两个来自同一 PF 的 VF。 -
将
<vf_id
> 替换为 VF 的 ID。适用的 VF ID 范围从零开始,并以最大 VF 数结束。 - 禁用欺骗检查。
-
在
sriov_vf
上为 VF 上的linux_bond
应用 VLAN 标签。
-
将
要为实例保留 VF,请在环境文件中包括
NovaPCIPassthrough
参数,例如:NovaPCIPassthrough: - address: "0000:19:0e.3" trusted: "true" physical_network: "sriov1" - address: "0000:19:0e.0" trusted: "true" physical_network: "sriov2"
director 识别主机 VF,并生成可供实例使用的 VF 的 PCI 地址。
在所有需要 NIC 分区的节点中启用
IOMMU
。例如,如果要对 Compute 节点进行 NIC 分区,请使用该角色的KernelArgs
参数启用 IOMMU:parameter_defaults: ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"
注意当您首次在角色配置中添加
KernelArgs
参数时,overcloud 节点会自动重启。如果需要,您可以禁用自动重新引导节点,然后在每个 overcloud 部署后手动执行节点重启。使用其他环境文件将角色文件和环境文件添加到堆栈中,并部署 overcloud:
(undercloud)$ openstack overcloud deploy --templates \ -r os-net-config.yaml -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yaml
验证
以
heat-admin
用户身份登录 overcloud Compute 节点,并检查 VF 的数量:[heat-admin@overcloud-compute-0 heat-admin]$ sudo cat /sys/class/net/p4p1/device/sriov_numvfs 10 [heat-admin@overcloud-compute-0 heat-admin]$ sudo cat /sys/class/net/p4p2/device/sriov_numvfs 10
显示 OVS 连接:
[heat-admin@overcloud-compute-0]$ sudo ovs-vsctl show b6567fa8-c9ec-4247-9a08-cbf34f04c85f Manager "ptcp:6640:127.0.0.1" is_connected: true Bridge br-sriov2 Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure datapath_type: netdev Port phy-br-sriov2 Interface phy-br-sriov2 type: patch options: {peer=int-br-sriov2} Port br-sriov2 Interface br-sriov2 type: internal Bridge br-sriov1 Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure datapath_type: netdev Port phy-br-sriov1 Interface phy-br-sriov1 type: patch options: {peer=int-br-sriov1} Port br-sriov1 Interface br-sriov1 type: internal Bridge br-ex Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure datapath_type: netdev Port br-ex Interface br-ex type: internal Port phy-br-ex Interface phy-br-ex type: patch options: {peer=int-br-ex} Bridge br-tenant Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure datapath_type: netdev Port br-tenant tag: 305 Interface br-tenant type: internal Port phy-br-tenant Interface phy-br-tenant type: patch options: {peer=int-br-tenant} Port dpdkbond0 Interface dpdk0 type: dpdk options: {dpdk-devargs="0000:18:0e.0"} Interface dpdk1 type: dpdk options: {dpdk-devargs="0000:18:0a.0"} Bridge br-tun Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure datapath_type: netdev Port vxlan-98140025 Interface vxlan-98140025 type: vxlan options: {df_default="true", egress_pkt_mark="0", in_key=flow, local_ip="152.20.0.229", out_key=flow, remote_ip="152.20.0.37"} Port br-tun Interface br-tun type: internal Port patch-int Interface patch-int type: patch options: {peer=patch-tun} Port vxlan-98140015 Interface vxlan-98140015 type: vxlan options: {df_default="true", egress_pkt_mark="0", in_key=flow, local_ip="152.20.0.229", out_key=flow, remote_ip="152.20.0.21"} Port vxlan-9814009f Interface vxlan-9814009f type: vxlan options: {df_default="true", egress_pkt_mark="0", in_key=flow, local_ip="152.20.0.229", out_key=flow, remote_ip="152.20.0.159"} Port vxlan-981400cc Interface vxlan-981400cc type: vxlan options: {df_default="true", egress_pkt_mark="0", in_key=flow, local_ip="152.20.0.229", out_key=flow, remote_ip="152.20.0.204"} Bridge br-int Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure datapath_type: netdev Port int-br-tenant Interface int-br-tenant type: patch options: {peer=phy-br-tenant} Port int-br-ex Interface int-br-ex type: patch options: {peer=phy-br-ex} Port int-br-sriov1 Interface int-br-sriov1 type: patch options: {peer=phy-br-sriov1} Port patch-tun Interface patch-tun type: patch options: {peer=patch-int} Port br-int Interface br-int type: internal Port int-br-sriov2 Interface int-br-sriov2 type: patch options: {peer=phy-br-sriov2} Port vhu4142a221-93 tag: 1 Interface vhu4142a221-93 type: dpdkvhostuserclient options: {vhost-server-path="/var/lib/vhost_sockets/vhu4142a221-93"} ovs_version: "2.13.2"
以
heat-admin
用户身份登录 OVS-DPDK SR-IOV Compute 节点并检查 Linux 绑定:[heat-admin@overcloud-computeovsdpdksriov-1 ~]$ cat /proc/net/bonding/<bond_name> Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eno3v1 MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 Peer Notification Delay (ms): 0 Slave Interface: eno3v1 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 4e:77:94:bd:38:d2 Slave queue ID: 0 Slave Interface: eno4v1 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 4a:74:52:a7:aa:7c Slave queue ID: 0
列出 OVS 绑定:
[heat-admin@overcloud-computeovsdpdksriov-1 ~]$ sudo ovs-appctl bond/show ---- dpdkbond0 ---- bond_mode: balance-slb bond may use recirculation: no, Recirc-ID : -1 bond-hash-basis: 0 updelay: 0 ms downdelay: 0 ms next rebalance: 9491 ms lacp_status: off lacp_fallback_ab: false active slave mac: ce:ee:c7:58:8e:b2(dpdk1) slave dpdk0: enabled may_enable: true slave dpdk1: enabled active slave may_enable: true
如果您使用 NovaPCIPassthrough
将 VF 传递给实例,请通过 为 SR-IOV 部署实例进行测试。