16.5. SR-IOV 네트워킹 장치 관리
에뮬레이션된 가상 장치는 종종 하드웨어 네트워크 장치보다 더 많은 CPU 및 메모리를 사용합니다. 이렇게 하면 VM(가상 머신)의 성능이 제한될 수 있습니다. 그러나 가상화 호스트의 모든 장치가 SR-IOV(Single Root I/O Virtualization)를 지원하는 경우 이 기능을 사용하여 장치 성능을 개선하고 VM의 전반적인 성능을 향상시킬 수 있습니다.
16.5.1. SR-IOV란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV(Single-root I/O Virtualization)는 단일 PCI Express(PCIe) 장치가 호스트 시스템에 VF( 가상 기능 )라는 여러 개의 PCI 장치를 제공할 수 있는 사양입니다. 다음 각 장치:
- 원래 PCIe 장치와 동일하거나 유사한 서비스를 제공할 수 있습니다.
- 호스트 PCI 버스의 다른 주소에 나타납니다.
- VFIO 할당을 사용하여 다른 VM에 할당할 수 있습니다.
예를 들어 단일 SR-IOV 가능 네트워크 장치는 여러 VM에 VF를 제공할 수 있습니다. 모든 VF는 동일한 물리적 카드, 동일한 네트워크 연결 및 동일한 네트워크 케이블을 사용하지만 각 VM은 자체 하드웨어 네트워크 장치를 직접 제어하고 호스트의 추가 리소스를 사용하지 않습니다.
SR-IOV 작동 방식
SR-IOV 기능은 다음과 같은 PCIe 기능을 도입하여 가능합니다.
- 물리적 기능(PF) - 호스트에 장치의 기능(예: 네트워킹)을 제공하는 PCIe 함수이지만 VF 세트를 생성하고 관리할 수도 있습니다. 각 SR-IOV 가능 장치에는 하나 이상의 PF가 있습니다.
- VF(가상 기능) - 독립 장치로 작동하는 경량 PCIe 함수입니다. 각 VF는 PF에서 파생됩니다. 장치가 보유할 수 있는 최대 VF 수는 장치 하드웨어에 따라 다릅니다. 각 VF는 한 번에 단일 VM에만 할당할 수 있지만 VM에 여러 VF가 할당될 수 있습니다.
VM은 VF를 가상 장치로 인식합니다. 예를 들어 SR-IOV 네트워크 장치에서 생성한 VF는 물리적 네트워크 카드가 호스트 시스템에 표시되는 것과 동일한 방식으로 할당된 VM의 네트워크 카드로 표시됩니다.
그림 16.1. SR-IOV 아키텍처
이점
에뮬레이션된 장치가 아닌 SR-IOV VF를 사용할 때의 주요 이점은 다음과 같습니다.
- 성능 개선
- 호스트 CPU 및 메모리 리소스의 사용 감소
예를 들어 vNIC로 VM에 연결된 VF는 물리적 NIC와 거의 동일한 수준에서 수행되며 반가상화 또는 에뮬레이션된 NIC보다 훨씬 우수합니다. 특히 단일 호스트에서 여러 VF를 동시에 사용하면 성능 이점이 중요할 수 있습니다.
단점
- PF 구성을 수정하려면 먼저 PF에서 노출되는 VF 수를 0으로 변경해야 합니다. 따라서 이러한 VF에서 제공하는 장치를 할당된 VM에서 제거해야 합니다.
- SR-IOV VF를 포함하여 VFIO 할당 장치가 연결된 VM은 다른 호스트로 마이그레이션할 수 없습니다. 할당된 장치를 에뮬레이션 장치와 페어링하여 이러한 제한 사항을 해결할 수 있는 경우도 있습니다. 예를 들어 할당된 네트워킹 VF를 에뮬레이션된 vNIC에 결합하고 마이그레이션 전에 VF를 제거할 수 있습니다.
- 또한 VFIO가 할당된 장치에는 VM 메모리 고정이 필요하므로 VM의 메모리 소비가 증가하고 VM에서 메모리 볼링 사용을 방지할 수 있습니다.
16.5.2. 가상 머신에 SR-IOV 네트워킹 장치 연결 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV 네트워킹 장치를 VM(가상 머신)에 연결하려면 호스트의 SR-IOV 가능 네트워크 인터페이스에서 VF(가상 기능)를 생성하고 VF를 지정된 VM에 장치로 할당해야 합니다. 자세한 내용은 다음 지침을 참조하십시오.
사전 요구 사항
호스트의 CPU 및 펌웨어는 I/O Memory Management Unit(IOMMU)을 지원합니다.
- Intel CPU를 사용하는 경우 Directed I/O(VT-d)에 대한 Intel Virtualization Technology를 지원해야 합니다.
- AMD CPU를 사용하는 경우 AMD-Vi 기능을 지원해야 합니다.
호스트 시스템은ACS(Access Control Service)를 사용하여 PCIe 토폴로지에 대한 직접 메모리 액세스(DMA) 격리를 제공합니다. 시스템 벤더에서 이를 확인합니다.
자세한 내용은 SR-IOV 구현을 위한 하드웨어 고려 사항을 참조하십시오.
물리적 네트워크 장치는 SR-IOV를 지원합니다. 시스템의 네트워크 장치가 SR-IOV를 지원하는지 확인하려면
lspci -v명령을 사용하고 출력에서SR-IOV(Single Root I/O Virtualization)를 찾습니다.# lspci -v [...] 02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0 Memory at fcba0000 (32-bit, non-prefetchable) [size=128K] [...] Capabilities: [150] Alternative Routing-ID Interpretation (ARI) Capabilities: [160] Single Root I/O Virtualization (SR-IOV) Kernel driver in use: igb Kernel modules: igb [...]VF를 생성하는 데 사용할 호스트 네트워크 인터페이스가 실행 중입니다. 예를 들어 eth1 인터페이스를 활성화하고 실행 중인지 확인하려면 다음을 수행하십시오.
# ip link set eth1 up # ip link show eth1 8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state autoSR-IOV 장치 할당이 작동하려면 호스트 BIOS 및 커널에서 IOMMU 기능을 활성화해야 합니다. 이렇게 하려면 다음을 수행합니다.
Intel 호스트에서 VT-d를 활성화합니다.
intel_iommu=on및iommu=pt매개변수를 사용하여 GRUB 설정을 다시 생성합니다.# grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL- 호스트를 재부팅합니다.
AMD 호스트에서 AMD-Vi를 활성화합니다.
iommu=pt매개변수를 사용하여 GRUB 설정을 다시 생성합니다.# grubby --args="iommu=pt" --update-kernel=ALL- 호스트를 재부팅합니다.
프로세스
선택 사항: 네트워크 장치에서 사용할 수 있는 최대 VF 수를 확인합니다. 이렇게 하려면 다음 명령을 사용하고 eth1 을 SR-IOV 호환 네트워크 장치로 교체합니다.
# cat /sys/class/net/eth1/device/sriov_totalvfs 7다음 명령을 사용하여 VF(가상 기능)를 생성합니다.
# echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs명령에서 다음을 교체합니다.
- PF에서 생성할 VF 수를 포함하는 VF-number 입니다.
- VF를 생성할 네트워크 인터페이스의 이름이 있는 network-interface 입니다.
다음 예제에서는 eth1 네트워크 인터페이스에서 2개의 VF를 생성합니다.
# echo 2 > /sys/class/net/eth1/device/sriov_numvfsVF가 추가되었는지 확인합니다.
# lspci | grep Ethernet 82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)VF를 생성하는 데 사용한 네트워크 인터페이스에 대한 udev 규칙을 생성하여 생성된 VF를 영구적으로 설정합니다. 예를 들어 eth1 인터페이스의 경우
/etc/udev/rules.d/eth1.rules파일을 만들고 다음 행을 추가합니다.ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"이렇게 하면 호스트가 시작될 때
ixgbe드라이버를 사용하는 두 개의 VF를eth1인터페이스에 자동으로 사용할 수 있습니다. 영구 SR-IOV 장치가 필요하지 않은 경우 이 단계를 건너뜁니다.주의현재 Broadcom NetXtreme II BCM57810 어댑터에서 VF를 영구적으로 설정하려고 할 때 위에서 설명한 설정이 올바르게 작동하지 않습니다. 또한 이러한 어댑터에 따라 VF를 Windows VM에 연결하는 것은 현재 신뢰할 수 없습니다.
새로 추가된 VF 인터페이스 장치 중 하나를 실행 중인 VM에 핫플러그합니다.
# virsh attach-interface <vm_name> hostdev 0000:82:10.0 --mac 52:54:00:00:01:01 --managed --live --config--live옵션은 부팅 간 지속성 없이 실행 중인 VM에 장치를 연결합니다.--config옵션을 사용하면 구성을 영구적으로 변경합니다. 장치를 종료 VM에 연결하려면--live옵션을 사용하지 마십시오.--mac옵션은 연결된 인터페이스의 MAC 주소를 지정합니다. 인터페이스의 MAC 주소를 지정하지 않으면 VM에서 52:54:00 로 시작하는 영구 의사 임의 주소를 자동으로 생성합니다.중요VM의 XML 구성 파일의 < hostdev > 섹션에 장치 항목을 수동으로 추가하여 SR-IOV VF를 가상 머신에 할당하는 경우 MAC 주소가 영구적으로 할당되지 않으며 게스트의 네트워크 설정은 일반적으로 모든 호스트 재부팅 시 재구성해야 합니다.
이러한 문제를 방지하려면 이 단계에 설명된 대로
virsh attach-interface명령을 사용합니다.
검증
- 프로시저가 성공하면 게스트 운영 체제는 새 네트워크 인터페이스 컨트롤러를 감지합니다.
16.5.3. SR-IOV 할당에 지원되는 장치 링크 복사링크가 클립보드에 복사되었습니다!
모든 장치를 SR-IOV에 사용할 수 있는 것은 아닙니다. 다음 장치는 RHEL 10에서 SR-IOV와 호환되는 것으로 테스트 및 검증되었습니다.
네트워킹 장치
-
Intel 82599ES 10 Gigabit Ethernet Controller -
ixgbe드라이브 사용 -
Intel Ethernet Controller XL710 시리즈 -
i40e드라이버 사용 -
Intel Ethernet Network Adapter XXV710 -
i40e드라이버 사용 -
Intel 82576 Gigabit Ethernet Controller -
igb드라이버 사용 -
Broadcom NetXtreme II BCM57810 -
bnx2x드라이버 사용 -
QSFP용 이더넷 컨트롤러 E810-C - 스노우
드라이버사용 -
SFC9220 10/40G Ethernet Controller -
sfc드라이버 사용 -
FastLinQ QL41000 Series 10/25/40/50GbE Controller -
qede드라이버 사용 - Mellanox MT27710 이더넷 어댑터 카드
- Mellanox MT2892 제품군 [ConnectX-6 Dx]
- Mellanox MT2910 [ConnextX-7]