PCI Passthrough / SR-IOV
PCI Passthrough
nova.conf
내에 아래 내용을 추가한다. 여러개의 장치를 Passthrough
할 경우에는 []
로 묶어서 목록형태로 나열한다.
[filter_scheduler] enabled_filters = AvailabilityZoneFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter available_filters = nova.scheduler.filters.all_filters [pci] passthrough_whitelist = [{ "devname": "ens6", "physical_network": "physnet2" }, { "vendor_id": "10de", "product_id": "13c2" }] alias = { "vendor_id":"10de", "product_id":"13c2", "device_type":"type-PF", "name":"GTX970" }
Openstack SR-IOV
알려진 제한사항
QoS(Quality of Service) 사용 시 max_burst_kbps
(버스트 오버 max_kbps
)는 지원되지 않습니다. 또한 max_kbps
는 Mbps
로 반올림됩니다.
SR-IOV
를 사용하는 경우 보안 그룹이 지원되지 않으므로 방화벽 드라이버를 비활성화해야 합니다. 이 작업은 neutron.conf
파일에서 수행할 수 있습니다 .
[securitygroup] firewall_driver = noop
SR-IOV
는 OpenStack Dashboard(horizon)
에 통합되지 않습니다. 사용자는 CLI 또는 API를 사용하여 SR-IOV
인터페이스를 구성해야 합니다.
Network Interface별 사전 준비
Mellanox CONNECTX-4/CONNECTX-5/CONNECTX-6 SR-IOV
Intel X550 SR-IOV
SR-IOV 구성
1. 커널 파라메터 설정 IOMMU
grubby --update-kernel=ALL --args="intel_iommu=on iommu=pt" grubby --update-kernel=ALL --args="amd_iommu=on iommu=pt" dracut -f -v
2. SR-IOV device 설정
echo "echo '8' > /sys/class/net/ens6/device/sriov_numvfs" >> /etc/rc.local
kolla-ansible 설정
globals.yml 설정
/etc/kolla/globals.yml
... enable_neutron_sriov: "yes" ...
neutron 설정
/etc/kolla/config/neutron/tp-compute3/sriov_agent.ini
tp-compute3
노드의 장치를 SR-IOV
할당하려고 할때
[sriov_nic] physical_device_mappings = sriovnet1:ens6 exclude_devices = [securitygroup] firewall_driver = neutron.agent.firewall.NoopFirewallDriver
/etc/kolla/config/neutron/ml2_conf.ini
[ml2] type_drivers = flat,vlan,vxlan,geneve tenant_network_types = vxlan mechanism_drivers = ovn,openvswitch,l2population,sriovnicswitch extension_drivers = port_security [ml2_type_vlan] network_vlan_ranges = physnet1,sriovnet1 [ml2_type_flat] flat_networks = physnet1,sriovnet1 [ml2_type_vxlan] vni_ranges = 1:1000
nova 설정
/etc/kolla/config/nova.conf
에 아래 설정 추가
- GPU Passthrough
[pci] passthrough_whitelist = { "vendor_id": "10de", "product_id":"20f1" }
- SR-IOV
[pci] passthrough_whitelist = { "devname": "ens6", "physical_network": "physnet2" }
이렇게 하면 Compute 서비스에 ens6
에 속한 모든 VF
가 인스턴스로 전달될 수 있으며 공급자 네트워크 physnet2
에 속한다고 알려줍니다.
다른방법으로 아래처럼 id
를 직접 기입해도 됨, 반드시 PF
장치의 값을 넣어야 한다. VF
장치값을 넣으면 안됨.
passthrough_whitelist = { "vendor_id": "8086", "product_id":"1563", "physical_network": "physnet2" }
여러 장치를 Passthrough
할경우엔 아래와같이 적용
[pci] passthrough_whitelist = [{ "devname": "ens6", "physical_network": "physnet2" }, { "vendor_id": "10de", "product_id": "13c2" }] alias = { "vendor_id":"10de", "product_id":"13c2", "device_type":"type-PF", "name":"GTX970" }
3. Launching instances with SR-IOV ports
openstack network create --provider-physical-network sriovnet1 \ --provider-network-type vlan --provider-segment 319 \ sriov-net openstack subnet pool create --share --pool-prefix 10.33.19.0/24 \ --default-prefix-length 24 shared-default-subnetpool-v4 openstack subnet create --network sriov-net \ --subnet-pool shared-default-subnetpool-v4 \ sriov-subnet net_id=$(openstack network show sriov-net -c id -f value) openstack port create --network $net_id --vnic-type direct sriov-port port_id=$(openstack port show sriov-port -c id -f value) openstack server create --availability-zone sriov --flavor c1_r2_d30 --image rhel8 \ --nic port-id=$port_id test-sriov