검색

16.2.2. SR-IOV 사용

download PDF
이 섹션에서는 PCI 패스스루를 사용하여 SR-IOV 가능 멀티포트 네트워크 카드의 가상 기능을 네트워크 장치로 할당하는 방법을 설명합니다.
SR-IOV VF(가상 기능)는 virsh edit 또는 virsh attach-device 명령을 사용하여 <hostdev> 에 장치 항목을 추가하여 가상 머신에 할당할 수 있습니다. 그러나 일반 네트워크 장치와 달리 SR-IOV VF 네트워크 장치에는 고유한 영구 MAC 주소가 없으므로 호스트가 재부팅될 때마다 새 MAC 주소가 할당되기 때문에 문제가 발생할 수 있습니다. 이로 인해 호스트를 재부팅한 후 게스트에 동일한 VF가 할당되더라도 게스트가 새 MAC 주소를 갖는 네트워크 어댑터를 결정합니다. 결과적으로 게스트는 매번 새로운 하드웨어가 연결되었다고 생각하며 일반적으로 게스트의 네트워크 설정을 재구성해야 합니다.
libvirt 에는 <interface type='hostdev'> 인터페이스 장치가 포함되어 있습니다. 이 인터페이스 장치를 사용하여 libvirt 는 먼저 표시된 네트워크별 하드웨어/switch 초기화를 수행합니다(예: MAC 주소, VLAN 태그 또는 802.1Qbh 가상 포트 매개 변수 설정 등) 게스트에 PCI 장치 할당을 수행합니다.
<interface type='hostdev'> 인터페이스 장치를 사용하려면 다음을 수행해야 합니다.
  • SR-IOV 가능 네트워크 카드
  • Intel VT-d 또는 AMD IOMMU 확장 기능을 지원하는 호스트 하드웨어
  • 할당할 VF의 PCI 주소입니다.
중요
SR-IOV 장치를 가상 머신에 할당하려면 호스트 하드웨어에서 Intel VT-d 또는 AMD IOMMU 사양을 지원해야 합니다.
Intel 또는 AMD 시스템에 SR-IOV 네트워크 장치를 연결하려면 다음 절차를 따르십시오.

절차 16.8. Intel 또는 AMD 시스템에 SR-IOV 네트워크 장치 연결

  1. BIOS 및 커널에서 Intel VT-d 또는 AMD IOMMU 사양 활성화

    Intel 시스템에서 BIOS에서 아직 활성화되지 않은 경우 Intel VT-d를 활성화합니다. BIOS 및 커널에서 Intel VT-d를 활성화하는 방법에 대한 도움말은 절차 16.1. “PCI 장치 할당을 위한 Intel 시스템 준비” 을 참조하십시오.
    Intel VT-d가 이미 활성화되어 있고 작동하는 경우 이 단계를 건너뜁니다.
    AMD 시스템에서 BIOS에서 AMD IOMMU 사양이 아직 활성화되지 않은 경우 이를 활성화합니다. BIOS에서 IOMMU 활성화에 대한 도움말은 절차 16.2. “PCI 장치 할당을 위한 AMD 시스템 준비” 을 참조하십시오.
  2. 지원 확인

    SR-IOV 기능이 있는 PCI 장치가 탐지되었는지 확인합니다. 이 예에서는 SR-IOV를 지원하는 Intel 82576 네트워크 인터페이스 카드를 나열합니다. lspci 명령을 사용하여 장치가 감지되었는지 확인합니다.
    # lspci
    03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    다른 모든 장치를 제거하도록 출력이 수정되었습니다.
  3. 가상 함수 활성화

    다음 명령을 실행합니다.
    # echo ${num_vfs} > /sys/class/net/enp14s0f0/device/sriov_numvfs
  4. 가상 함수를 영구적으로 설정

    재부팅할 때 Virtual Functions를 영구적으로 유지하려면 선택한 편집기를 사용하여 다음과 유사한 udev 규칙을 만듭니다. 여기서 원하는 VF 수(이 예에서는 2), 네트워크 인터페이스 카드에서 지원되는 한도까지 지정합니다. 다음 예에서 enp14s0f0 을 PF 네트워크 장치 이름으로 바꾸고 사용 중인 드라이버와 일치하도록 ENV{ID_NET_DRIVER} 값을 조정합니다.
    # vim /etc/udev/rules.d/enp14s0f0.rules
    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe",
    ATTR{device/sriov_numvfs}="2"
    
    이렇게 하면 부팅 시 기능이 활성화됩니다.
  5. 새 가상 함수 검사

    lspci 명령을 사용하여 Intel 82576 네트워크 장치에 연결된 새로 추가된 가상 기능을 나열합니다. (참고로 grep 을 사용하여 Virtual Functions를 지원하는 장치를 검색하려면 grep을 사용하여 가상 함수 를 검색합니다.)
    # lspci | grep 82576
    0b:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    0b:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    0b:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.6 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:10.7 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    0b:11.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
    PCI 장치의 식별자는 lspci 명령의 -n 매개 변수를 사용하여 확인할 수 있습니다. 물리 함수는 0b:00.00b:00.1 에 해당합니다. 모든 가상 함수에는 설명에 가상 기능이 있습니다.
  6. virsh를 사용하여 장치 확인

    libvirt 서비스는 가상 머신에 장치를 추가하기 전에 장치를 인식해야 합니다. libvirtlspci 출력과 유사한 표기법을 사용합니다. 모든 구두점 문자 :.. lspci 출력에서는 밑줄(_)으로 변경됩니다.
    virsh nodedev-list 명령과 grep 명령을 사용하여 사용 가능한 호스트 장치 목록에서 Intel 82576 네트워크 장치를 필터링합니다. 0B 는 이 예제에서 Intel 82576 네트워크 장치의 필터입니다. 시스템에 따라 다를 수 있으며 추가 장치가 발생할 수 있습니다.
    # virsh nodedev-list | grep 0b
    pci_0000_0b_00_0
    pci_0000_0b_00_1
    pci_0000_0b_10_0
    pci_0000_0b_10_1
    pci_0000_0b_10_2
    pci_0000_0b_10_3
    pci_0000_0b_10_4
    pci_0000_0b_10_5
    pci_0000_0b_10_6
    pci_0000_0b_11_7
    pci_0000_0b_11_1
    pci_0000_0b_11_2
    pci_0000_0b_11_3
    pci_0000_0b_11_4
    pci_0000_0b_11_5
    가상 기능 및 물리 함수의 PCI 주소는 목록에 있어야 합니다.
  7. virsh를 사용하여 장치 세부 정보 가져오기

    pci_0000_0b_00_0 은 물리 함수 중 하나이며, pci_0000_0b_10_0 은 해당 물리 함수의 첫 번째 해당 가상 기능입니다. virsh nodedev-dumpxml 명령을 사용하여 두 장치에 대한 장치 세부 정보를 가져옵니다.
    # virsh nodedev-dumpxml pci_0000_03_00_0
    <device>
      <name>pci_0000_03_00_0</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:00.0</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igb</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>3</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x10c9'>82576 Gigabit Network Connection</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='virt_functions'>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x4'/>
          <address domain='0x0000' bus='0x03' slot='0x10' function='0x6'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x2'/>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x4'/>
        </capability>
        <iommuGroup number='14'>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
        </iommuGroup>
      </capability>
    </device>
    # virsh nodedev-dumpxml pci_0000_03_11_5
    <device>
      <name>pci_0000_03_11_5</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:11.5</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>igbvf</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>3</bus>
        <slot>17</slot>
        <function>5</function>
        <product id='0x10ca'>82576 Virtual Function</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='phys_function'>
          <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
        </capability>
        <iommuGroup number='35'>
          <address domain='0x0000' bus='0x03' slot='0x11' function='0x5'/>
        </iommuGroup>
      </capability>
    </device>
    이 예에서는 8단계의 가상 머신에 Virtual Function pci_0000_03_10_2 를 추가합니다. 가상 함수의 버스,슬롯 및 함수 매개 변수는 장치를 추가하는 데 필요합니다.
    예를 들어 이러한 매개변수를 임시 XML 파일(예: /tmp/new-interface.xml )에 복사합니다.
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
         </source>
       </interface>
    참고
    가상 머신이 시작되면 MAC 주소가 구성된 물리적 어댑터에서 제공하는 유형의 네트워크 장치가 표시됩니다. 이 MAC 주소는 호스트 및 게스트 재부팅 시 변경되지 않습니다.
    다음 <interface> 예제에서는 선택적 <mac address>, <virtualport>, <vlan> 요소의 구문을 보여줍니다. 실제로 예제와 같이 둘 다 동시에 사용할 수 없는 <vlan> 또는 <virtualport> 요소를 사용합니다.
    ...
     <devices>
       ...
       <interface type='hostdev' managed='yes'>
         <source>
           <address type='pci' domain='0' bus='11' slot='16' function='0'/>
         </source>
         <mac address='52:54:00:6d:90:02'>
         <vlan>
            <tag id='42'/>
         </vlan>
         <virtualport type='802.1Qbh'>
           <parameters profileid='finance'/>
         </virtualport>
       </interface>
       ...
     </devices>
    MAC 주소를 지정하지 않으면 자동으로 생성됩니다. <virtualport> 요소는 pxeQbh 하드웨어 스위치에 연결할 때만 사용됩니다. <vlan> 요소는 게스트의 장치를 VLAN 태그 42 에 투명하게 배치합니다.
  8. 가상 머신에 가상 기능 추가

    이전 단계에서 만든 임시 파일과 함께 다음 명령을 사용하여 가상 머신에 가상 기능을 추가합니다. 이는 새 장치를 즉시 연결하고 후속 게스트를 다시 시작하기 위해 저장합니다.
    virsh attach-device MyGuest /tmp/new-interface.xml --live --config
    
    virsh attach-device--live 옵션을 지정하면 새 장치가 실행 중인 게스트에 연결됩니다. --config 옵션을 사용하면 향후 게스트가 다시 시작된 후 새 장치를 사용할 수 있습니다.
    참고
    --live 옵션은 게스트가 실행 중인 경우에만 허용됩니다. virsh 는 실행 중인 게스트에서 --live 옵션이 사용되는 경우 오류를 반환합니다.
가상 머신이 새 네트워크 인터페이스 카드를 감지합니다. 이 새 카드는 SR-IOV 장치의 가상 기능입니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.