Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

16.7. GPU 장치 할당

게스트에 GPU를 할당하려면 다음 방법 중 하나를 사용합니다.
  • GPU PCI 장치 할당 - 이 방법을 사용하면 호스트에서 GPU 장치를 제거하고 단일 게스트에 할당할 수 있습니다.
  • NVIDIA vGPU Assignment - 이 방법을 사용하면 물리적 GPU에서 여러 개의 중재 장치를 생성하고 이러한 장치를 여러 게스트에 가상 GPU로 할당할 수 있습니다. 이는 선택한 NVIDIA GPU에서만 지원되며, 하나의 중재 장치만 게스트에 할당할 수 있습니다.

16.7.1. GPU PCI 장치 할당

Red Hat Enterprise Linux 7은 비VGA 그래픽 장치로 다음 PCIe 기반 GPU 장치의 PCI 장치 할당을 지원합니다.
  • NVIDIA Quadro K-Series, M-Series, P-Series 및 이후 아키텍처 (모델 2000 시리즈 이상)
  • NVIDIA StatefulSet K-Series, M-Series 및 이후 아키텍처
참고
VM에 연결할 수 있는 GPU 수는 RHEL 7에서 현재 32개인 할당된 PCI 장치의 최대 수로 제한됩니다. 그러나 여러 GPU를 가상 머신에 연결하면 게스트에서 메모리 매핑된 I/O(MMIO)에 문제가 발생할 수 있으므로 VM에서 GPU를 사용할 수 없습니다.
이러한 문제를 해결하려면 더 큰 64비트 MMIO 공간을 설정하고 64비트 MMIO 공간을 확장할 수 있도록 vCPU 물리적 주소 비트를 구성합니다.
게스트 가상 머신에 GPU를 할당하려면 호스트 머신에서 I/O Memory Management Unit(IOMMU)을 활성화하고 lspci 명령을 사용하여 GPU 장치를 식별하고, 호스트에서 장치를 분리하고, 게스트에 연결한 다음, 게스트에서 Xorg를 구성해야 합니다.

절차 16.13. 호스트 머신 커널에서 IOMMU 지원 활성화

  1. 커널 명령행 편집

    Intel VT-d 시스템의 경우 IOMMU는 intel_iommu=oniommu=pt 매개변수를 커널 명령 줄에 추가하여 활성화됩니다. AMD-Vi 시스템의 경우 필요한 옵션은 iommu=pt 입니다. 이 옵션을 활성화하려면 다음과 같이 GRUB_CMDLINX_LINUX 행을 /etc/sysconfig/grub 설정 파일에 편집하거나 추가합니다.
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt"
    
    참고
    IOMMU에 대한 자세한 내용은 부록 E. IOMMU 그룹 작업 을 참조하십시오.
  2. 부트 로더 구성 다시 생성

    적용할 커널 명령줄 변경 사항의 경우 grub2-mkconfig 명령을 사용하여 부트 로더 구성을 다시 생성합니다.
    # grub2-mkconfig -o /etc/grub2.cfg
    UEFI 기반 호스트를 사용하는 경우 대상 파일은 /etc/grub2-efi.cfg 여야 합니다.
  3. 호스트 재부팅

    변경 사항을 적용하려면 호스트 시스템을 재부팅합니다.
    # reboot

절차 16.14. 호스트 물리적 머신 드라이버에 바인딩에서 GPU 장치 제외

GPU 할당의 경우 이러한 드라이버에서 장치의 동적 unbinding을 지원하지 않으므로 장치를 호스트 드라이버에 바인딩하는 것을 제외하는 것이 좋습니다.
  1. PCI 버스 주소 식별

    장치의 PCI 버스 주소와 ID를 식별하려면 다음 lspci 명령을 실행합니다. 이 예에서는 NVIDIA Quadro 또는 GRID 카드와 같은 VGA 컨트롤러가 사용됩니다.
    # lspci -Dnn | grep VGA
    0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
    
    그 결과 검색 결과에서는 이 장치의 PCI 버스 주소가 0000:02:00.0이고 장치의 PCI ID는 10de:11fa입니다.
  2. 네이티브 호스트 머신 드라이버가 GPU 장치를 사용하지 못하도록 방지

    네이티브 호스트 머신 드라이버가 GPU 장치를 사용하지 못하도록 하려면 pci-stub 드라이버와 함께 PCI ID를 사용할 수 있습니다. 이렇게 하려면 PCI ID를 값으로 사용하여 pci-stub.ids 옵션을 /etc/sysconfig/grub 구성 파일에 있는 GRUB_CMDLINX_LINUX 줄에 추가하십시오. 예를 들면 다음과 같습니다.
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt pci-stub.ids=10de:11fa"
    
    pci-stub에 대한 PCI ID를 추가하려면 쉼표로 구분합니다.
  3. 부트 로더 구성 다시 생성

    이 옵션을 포함하도록 grub2-mkconfig 를 사용하여 부트 로더 구성을 다시 생성합니다.
    # grub2-mkconfig -o /etc/grub2.cfg
    UEFI 기반 호스트를 사용하는 경우 대상 파일은 /etc/grub2-efi.cfg 여야 합니다.
  4. 호스트 시스템 재부팅

    변경 사항을 적용하려면 호스트 시스템을 재부팅합니다.
    # reboot

절차 16.15. 선택 사항: GPU IOMMU 구성 편집

GPU 장치를 연결하기 전에 GPU가 게스트에서 제대로 작동하려면 IOMMU 구성을 편집해야 할 수 있습니다.
  1. GPU의 XML 정보 표시

    먼저 GPU를 XML 형식으로 표시하려면 먼저 pci_ 를 추가하고 구분 기호를 밑줄로 변환하여 PCI 버스 주소를 libvirt 호환 형식으로 변환해야 합니다. 이 예에서 0000:02:00.0 버스 주소로 식별된 GPU PCI 장치는 이전 절차에서얻은 대로 pci_0000_02_00_0 이 됩니다. virsh nodedev-dumpxml 과 함께 장치의 libvirt 주소를 사용하여 XML 구성을 표시합니다.
    # virsh nodedev-dumpxml pci_0000_02_00_0
    
    <device>
     <name>pci_0000_02_00_0</name>
     <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path>
     <parent>pci_0000_00_03_0</parent>
     <driver>
      <name>pci-stub</name>
     </driver>
     <capability type='pci'>
      <domain>0</domain>
      <bus>2</bus>
      <slot>0</slot>
      <function>0</function>
      <product id='0x11fa'>GK106GL [Quadro K4000]</product>
      <vendor id='0x10de'>NVIDIA Corporation</vendor>
         <!-- pay attention to the following lines -->
      <iommuGroup number='13'>
       <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
      </iommuGroup>
      <pci-express>
       <link validity='cap' port='0' speed='8' width='16'/>
       <link validity='sta' speed='2.5' width='16'/>
      </pci-express>
     </capability>
    </device>
    
    XML의 <iommuGroup> 요소를 확인합니다. iommuGroup은 IOMMU 기능 및 PCI 버스 토폴로지로 인해 다른 장치와 분리된 것으로 간주되는 장치 집합을 나타냅니다. 게스트에 할당하려면 iommuGroup 내의 모든 끝점 장치(즉, PCIe 루트 포트, 브리지 또는 스위치 포트가 아닌 장치)는 기본 호스트 드라이버에서 바인딩 해제해야 합니다. 위의 예에서 그룹은 GPU 장치(0000:02:00.0)와 보조 오디오 장치(0000:02:00.1)로 구성됩니다. 자세한 내용은 부록 E. IOMMU 그룹 작업의 내용을 참조하십시오.
  2. IOMMU 설정 조정

    이 예에서는 레거시 인터럽트 지원의 하드웨어 문제로 인해 NVIDIA 오디오 기능의 할당이 지원되지 않습니다. 또한 GPU 오디오 기능은 일반적으로 GPU 자체 없이는 유용하지 않습니다. 따라서 게스트에 GPU를 할당하려면 먼저 기본 호스트 드라이버에서 오디오 기능을 분리해야 합니다. 이 작업은 다음 중 하나를 사용하여 수행할 수 있습니다.

절차 16.16. GPU 연결

다음 방법 중 하나를 사용하여 GPU를 게스트에 연결할 수 있습니다.
  1. 가상 머신 관리자 인터페이스 사용. 자세한 내용은 16.1.2절. “virt-manager로 PCI 장치 할당”의 내용을 참조하십시오.
  2. GPU에 대한 XML 구성 조각을 만들고 virsh attach-device 에 연결합니다.
    1. 다음과 유사한 장치에 대한 XML을 만듭니다.
      
      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
      
    2. 이 파일을 파일에 저장하고 virsh attach-device [domain] --persistent 를 실행하여 게스트 구성에 XML을 포함합니다. 할당된 GPU가 게스트 시스템의 기존 에뮬레이션 그래픽 장치 외에 추가됩니다. 할당된 GPU는 가상 머신에서 보조 그래픽 장치로 처리됩니다. 기본 그래픽 장치로 할당이 지원되지 않으며 게스트의 XML에서 에뮬레이션된 그래픽 장치는 제거되지 않아야 합니다.
  3. virsh edit 명령을 사용하여 게스트 XML 구성을 편집하고 적절한 XML 세그먼트를 수동으로 추가합니다.

절차 16.17. 게스트에서 Xorg 설정 확인

게스트의 GPU 버스 주소는 호스트와 다릅니다. 호스트가 GPU를 적절하게 사용할 수 있도록 하려면 할당된 GPU 주소를 사용하도록 게스트의 Xorg 디스플레이 서버를 구성합니다.
  1. 게스트에서 lspci 명령을 사용하여 GPU의 PCI 버스 주소를 확인합니다.
    # lspci | grep VGA
    00:02.0 VGA compatible controller: Device 1234:111
    00:09.0 VGA compatible controller: NVIDIA Corporation GK106GL [Quadro K4000] (rev a1)
    
    이 예에서 버스 주소는 00:09.0입니다.
  2. 게스트의 /etc/X11/xorg.conf 파일에서 탐지된 주소를 사용하여 BusID 옵션을 다음과 같이 추가합니다.
    		Section "Device"
    		    Identifier     "Device0"
    		    Driver         "nvidia"
    		    VendorName     "NVIDIA Corporation"
    		    BusID          "PCI:0:9:0"
    		EndSection
    
    중요
    1단계에서 감지된 버스 주소가 16진수인 경우 구분 기호 간 값을 10진수 시스템으로 변환해야 합니다. 예를 들어 00:0a.0을 PCI:0:10:0으로 변환해야 합니다.
참고
게스트에 할당된 NVIDIA GPU를 사용하는 경우 NVIDIA 드라이버만 지원됩니다. 다른 드라이버가 작동하지 않을 수 있으며 오류를 생성할 수 있습니다. Red Hat Enterprise Linux 7 게스트의 경우 설치 중에 커널 명령행에 modprobe.blacklist=nouveau 옵션을 사용하여 nouveau 드라이버를 블랙리스트로 지정할 수 있습니다. 다른 게스트 가상 머신에 대한 자세한 내용은 운영 체제의 특정 설명서를 참조하십시오.
NVIDIA 드라이버가 로드된 게스트 운영 체제에 따라 게스트는 에뮬레이션된 그래픽과 할당된 그래픽 모두를 동시에 사용하거나 에뮬레이션된 그래픽을 비활성화할 수 있습니다. 할당된 그래픽 프레임버에 대한 액세스는 virt-manager 와 같은 애플리케이션에서 제공되지 않습니다. 할당된 GPU가 물리적 디스플레이에 연결되지 않은 경우 GPU 데스크탑에 액세스하려면 게스트 기반 리모팅 솔루션이 필요할 수 있습니다. 모든 PCI 장치 할당과 마찬가지로 GPU가 할당된 게스트의 마이그레이션이 지원되지 않으며 각 GPU는 단일 게스트에서만 소유됩니다. 게스트 운영 체제에 따라 GPU의 핫 플러그 지원을 사용할 수 있습니다.