14.7. SR-IOV 장치 관리


에뮬레이션된 가상 장치는 종종 하드웨어 네트워크 장치보다 더 많은 CPU 및 메모리를 사용합니다. 이렇게 하면 VM(가상 머신)의 성능이 제한될 수 있습니다. 그러나 가상화 호스트의 모든 장치가 SR-IOV(Single Root I/O Virtualization)를 지원하는 경우 이 기능을 사용하여 장치 성능을 개선하고 VM의 전반적인 성능을 향상시킬 수 있습니다.

14.7.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의 네트워크 카드로 표시됩니다.

그림 14.1. SR-IOV 아키텍처

virt 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에서 메모리 볼링 사용을 방지할 수 있습니다.

14.7.2. 가상 머신에 SR-IOV 네트워킹 장치 연결

SR-IOV 네트워킹 장치를 Intel 또는 AMD 호스트의 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 auto
  • SR-IOV 장치 할당이 작동하려면 호스트 BIOS 및 커널에서 IOMMU 기능을 활성화해야 합니다. 이렇게 하려면 다음을 수행합니다.

    • Intel 호스트에서 VT-d를 활성화합니다.

      1. intel_iommu=oniommu=pt 매개변수를 사용하여 GRUB 설정을 다시 생성합니다.

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
      2. 호스트를 재부팅합니다.
    • AMD 호스트에서 AMD-Vi를 활성화합니다.

      1. iommu=pt 매개변수를 사용하여 GRUB 설정을 다시 생성합니다.

        # grubby --args="iommu=pt" --update-kernel=ALL
      2. 호스트를 재부팅합니다.

프로세스

  1. 선택 사항: 네트워크 장치에서 사용할 수 있는 최대 VF 수를 확인합니다. 이렇게 하려면 다음 명령을 사용하고 eth1 을 SR-IOV 호환 네트워크 장치로 교체합니다.

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
  2. 다음 명령을 사용하여 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_numvfs
  3. VF가 추가되었는지 확인합니다.

    # 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)
  4. 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에 연결하는 것은 현재 신뢰할 수 없습니다.

  5. 새로 추가된 VF 인터페이스 장치 중 하나를 실행 중인 VM에 핫플러그합니다.

    # virsh attach-interface testguest1 hostdev 0000:82:10.0 --managed --live --config

검증

  • 프로시저가 성공하면 게스트 운영 체제는 새 네트워크 인터페이스 카드를 감지합니다.

14.7.3. SR-IOV 할당에 지원되는 장치

모든 장치를 SR-IOV에 사용할 수 있는 것은 아닙니다. 다음 장치는 RHEL 9에서 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 ConnectX-5 이더넷 어댑터 카드
  • Mellanox MT2892 제품군 [ConnectX-6 Dx]
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.