6.3. NIC 파티션 설정
이 기능은 일반적으로 RHOSP(Red Hat OpenStack Platform) 16.1.2에서 사용할 수 있으며 Intel Fortville NIC 및 Mellanox CX-5 NIC에서 검증됩니다.
RHOSP 호스트에서 VF(가상 기능)를 사용할 수 있도록 SR-IOV(단일 루트 I/O 가상화)를 구성할 수 있습니다.
단일 고속 NIC를 여러 VF로 분할하면 컨트롤 및 데이터 플레인 트래픽 모두에 NIC를 사용할 수 있습니다.
절차
- 선택한 역할에 대한 NIC 구성 파일을 엽니다.
sriov_pf
인터페이스 유형 항목을 추가하여 호스트에서 사용할 수 있는 물리적 기능을 구성합니다.- type: sriov_pf name: <interface name> use_dhcp: false numvfs: <number of vfs> promisc: <true/false> #optional (Defaults to true)
참고numvfs
매개변수는 네트워크 구성 템플릿의NeutronSriovNumVFs
매개변수를 대체합니다. Red Hat은 배포 후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
)으로 바꿉니다.ovs_bond
와 같은 다른 본딩의 본딩에 VLAN 태그를 적용할 수 있습니다. <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 태그를 할당해야 합니다. -
<vf_id>
를 VF의 ID로 바꿉니다. 적용 가능한 VF ID 범위는 0에서 시작되고 최대 VF 수에서 1을 뺀 값으로 끝납니다.
-
-
스푸핑 검사를 비활성화하고 VF를 통해
linux_bond
의sriov_vf
에 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
를 활성화합니다. 예를 들어 컴퓨팅 노드의 NIC 파티셔닝을 사용하려면 해당 역할에KernelArgs
매개변수를 사용하여 IOMMU를 활성화합니다.parameter_defaults: ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"
다른 환경 파일을 사용하여 스택에 역할 파일 및 환경 파일을 추가하고 오버클라우드를 배포합니다.
(undercloud)$ openstack overcloud deploy --templates \ -r os-net-config.yaml -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yaml
NIC 분할 구성 예
VF를 통해 Linux 본딩을 구성하려면
스푸핑 검사를 비활성화하고 VLAN 태그를
.sriov_vf
에 적용하십시오- type: linux_bond name: bond_api bonding_options: "mode=active-backup" members: - type: sriov_vf device: eno2 vfid: 1 vlan_id: get_param: InternalApiNetworkVlanID spoofcheck: false - type: sriov_vf device: eno3 vfid: 1 vlan_id: get_param: InternalApiNetworkVlanID spoofcheck: false addresses: - ip_netmask: get_param: InternalApiIpSubnet routes: list_concat_unique: - get_param: InternalApiInterfaceRoutes
다음 예제를 사용하여 VF에서 OVS 브리지를 구성합니다.
- type: ovs_bridge name: br-bond use_dhcp: true members: - type: vlan vlan_id: get_param: TenantNetworkVlanID addresses: - ip_netmask: get_param: TenantIpSubnet routes: list_concat_unique: - get_param: ControlPlaneStaticRoutes - type: ovs_bond name: bond_vf ovs_options: "bond_mode=active-backup" members: - type: sriov_vf device: p2p1 vfid: 2 - type: sriov_vf device: p2p2 vfid: 2
VF에서 OVS 사용자 브리지를 구성하려면 VLAN 태그를
ovs_user_bridge
매개변수에 적용합니다.- type: ovs_user_bridge name: br-link0 use_dhcp: false mtu: 9000 ovs_extra: - str_replace: template: set port br-link0 tag=_VLAN_TAG_ params: _VLAN_TAG_: get_param: TenantNetworkVlanID addresses: - ip_netmask: get_param: TenantIpSubnet routes: list_concat_unique: - get_param: TenantInterfaceRoutes members: - type: ovs_dpdk_bond name: dpdkbond0 mtu: 9000 ovs_extra: - set port dpdkbond0 bond_mode=balance-slb members: - type: ovs_dpdk_port name: dpdk0 members: - type: sriov_vf device: eno2 vfid: 3 - type: ovs_dpdk_port name: dpdk1 members: - type: sriov_vf device: eno3 vfid: 3
검증
VF 수를 확인합니다.
[root@overcloud-compute-0 heat-admin]# cat /sys/class/net/p4p1/device/sriov_numvfs 10 [root@overcloud-compute-0 heat-admin]# cat /sys/class/net/p4p2/device/sriov_numvfs 10
Linux 본딩 확인.
[root@overcloud-compute-0 heat-admin]# cat /proc/net/bonding/intapi_bond Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: p4p1_1 MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: p4p1_1 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 16:b4:4c:aa:f0:a8 Slave queue ID: 0 Slave Interface: p4p2_1 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: b6:be:82:ac:51:98 Slave queue ID: 0 [root@overcloud-compute-0 heat-admin]# cat /proc/net/bonding/st_bond Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: p4p1_3 MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: p4p1_3 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 9a:86:b7:cc:17:e4 Slave queue ID: 0 Slave Interface: p4p2_3 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: d6:07:f8:78:dd:5b Slave queue ID: 0
OVS 본딩을 나열합니다.
[root@overcloud-compute-0 heat-admin]# ovs-appctl bond/show ---- bond_prov ---- bond_mode: active-backup bond may use recirculation: no, Recirc-ID : -1 bond-hash-basis: 0 updelay: 0 ms downdelay: 0 ms lacp_status: off lacp_fallback_ab: false active slave mac: f2:ad:c7:00:f5:c7(dpdk2) slave dpdk2: enabled active slave may_enable: true slave dpdk3: enabled may_enable: true ---- bond_tnt ---- bond_mode: active-backup bond may use recirculation: no, Recirc-ID : -1 bond-hash-basis: 0 updelay: 0 ms downdelay: 0 ms lacp_status: off lacp_fallback_ab: false active slave mac: b2:7e:b8:75:72:e8(dpdk0) slave dpdk0: enabled active slave may_enable: true slave dpdk1: enabled may_enable: true
OVS 연결을 표시합니다.
[root@overcloud-compute-0 heat-admin]# ovs-vsctl show cec12069-9d4c-4fa8-bfe4-decfdf258f49 Manager "ptcp:6640:127.0.0.1" is_connected: true Bridge br-tenant fail_mode: standalone Port br-tenant Interface br-tenant type: internal Port bond_tnt Interface "dpdk0" type: dpdk options: {dpdk-devargs="0000:82:02.2"} Interface "dpdk1" type: dpdk options: {dpdk-devargs="0000:82:04.2"} Bridge "sriov2" Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port "phy-sriov2" Interface "phy-sriov2" type: patch options: {peer="int-sriov2"} Port "sriov2" Interface "sriov2" type: internal Bridge br-int Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port "int-sriov2" Interface "int-sriov2" type: patch options: {peer="phy-sriov2"} Port br-int Interface br-int type: internal Port "vhu93164679-22" tag: 4 Interface "vhu93164679-22" type: dpdkvhostuserclient options: {vhost-server-path="/var/lib/vhost_sockets/vhu93164679-22"} Port "vhu5d6b9f5a-0d" tag: 3 Interface "vhu5d6b9f5a-0d" type: dpdkvhostuserclient options: {vhost-server-path="/var/lib/vhost_sockets/vhu5d6b9f5a-0d"} Port patch-tun Interface patch-tun type: patch options: {peer=patch-int} Port "int-sriov1" Interface "int-sriov1" type: patch options: {peer="phy-sriov1"} Port int-br-vfs Interface int-br-vfs type: patch options: {peer=phy-br-vfs} Bridge br-vfs Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port phy-br-vfs Interface phy-br-vfs type: patch options: {peer=int-br-vfs} Port bond_prov Interface "dpdk3" type: dpdk options: {dpdk-devargs="0000:82:04.5"} Interface "dpdk2" type: dpdk options: {dpdk-devargs="0000:82:02.5"} Port br-vfs Interface br-vfs type: internal Bridge "sriov1" Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port "sriov1" Interface "sriov1" type: internal Port "phy-sriov1" Interface "phy-sriov1" type: patch options: {peer="int-sriov1"} Bridge br-tun Controller "tcp:127.0.0.1:6633" is_connected: true fail_mode: secure Port br-tun Interface br-tun type: internal Port patch-int Interface patch-int type: patch options: {peer=patch-tun} Port "vxlan-0a0a7315" Interface "vxlan-0a0a7315" type: vxlan options: {df_default="true", in_key=flow, local_ip="10.10.115.10", out_key=flow, remote_ip="10.10.115.21"} ovs_version: "2.10.0"
NovaPCIPassthrough를
사용하여 VF를 인스턴스에 전달한 경우 SR-IOV 인스턴스를 배포하여 테스트합니다.