15장. 가상 머신에서 GPU 장치 관리

RHEL 9 호스트에서 VM(가상 머신)의 그래픽 성능을 향상시키기 위해 호스트 GPU를 VM에 할당할 수 있습니다.

  • GPU를 호스트에서 분리하고 GPU의 전체 제어를 VM에 직접 전달할 수 있습니다.
  • 물리적 GPU에서 여러 개의 중재 장치를 생성하고 이러한 장치를 여러 게스트에 가상 GPU(vGPU)로 할당할 수 있습니다. 이는 현재 선택한 NVIDIA GPU에서만 지원되며, 단일 게스트에 중재된 장치 한 개만 할당할 수 있습니다.

15.1. 가상 머신에 GPU 할당

호스트 시스템에 연결된 GPU에 액세스하고 제어하려면 GPU에 대한 직접 제어를 VM(가상 머신)으로 전달하도록 호스트 시스템을 구성해야 합니다.

참고

가상 GPU 할당에 대한 정보를 찾고 있는 경우 NVIDIA vGPU 장치 관리를 참조하십시오.

사전 요구 사항

  • 호스트 시스템 커널에서 IOMMU 지원을 활성화해야 합니다.

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

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

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

      AMD 호스트에서 IOMMU는 기본적으로 활성화되어 있으므로 iommu=pt 를 추가하여 통과 모드로 전환할 수 있습니다.

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

        # grubby --args="iommu=pt" --update-kernel DEFAULT
        참고

        pt 옵션은 통과 모드에서 사용되는 장치에 대해서만 IOMMU를 활성화하고 더 나은 호스트 성능을 제공합니다. 그러나 모든 하드웨어가 옵션을 지원하는 것은 아닙니다. 이 옵션이 활성화되어 있는지 여부에 관계없이 장치를 할당할 수 있습니다.

      2. 호스트를 재부팅합니다.

절차

  1. 드라이버가 GPU에 바인딩되지 않도록 합니다.

    1. GPU가 연결된 PCI 버스 주소를 식별합니다.

      # lspci -Dnn | grep VGA
      0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
    2. 호스트의 그래픽 드라이버가 GPU를 사용하지 못하도록 합니다. 이 작업을 수행하려면 pci-stub 드라이버와 함께 GPU의 PCI ID를 사용합니다.

      예를 들어 다음 명령은 드라이버가 10de:11fa 버스에 연결된 GPU에 바인딩하지 못하도록 합니다.

      # grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
    3. 호스트를 재부팅합니다.
  2. 선택 사항: 지원 제한으로 인해 오디오와 같은 특정 GPU 함수를 VM으로 전달할 수 없는 경우 필요한 GPU 함수만 전달하도록 IOMMU 그룹 내의 끝점의 드라이버 바인딩을 수정할 수 있습니다.

    1. GPU 설정을 XML로 변환하고 호스트 드라이버에 연결하지 못하도록 하려는 끝점의 PCI 주소를 기록해 둡니다.

      이렇게 하려면 pci_ 접두사를 주소에 추가하고 구분 기호를 밑줄로 변환하여 GPU의 PCI 버스 주소를 libvirt 호환 형식으로 변환합니다.

      예를 들어 다음 명령은 0000:02:00.0 버스 주소에 연결된 GPU의 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>
        <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>
    2. 엔드포인트가 호스트 드라이버에 연결하지 못하도록 합니다.

      이 예에서 GPU를 VM에 할당하려면 < address domain='0x0000' bus='0x02' slot='0x00' function='0x00'/ > , 을 통해 호스트 오디오 드라이버에 연결하고 끝점을 VFIO- PCI에 연결하는 대신 VFIO- PCI에 연결하는 것을 방지합니다.

      # driverctl set-override 0000:02:00.1 vfio-pci
  3. GPU를 VM에 연결

    1. PCI 버스 주소를 사용하여 GPU에 대한 XML 구성 파일을 만듭니다.

      예를 들어 GPU 버스 주소의 매개변수를 사용하여 다음 XML 파일 GPU-Assign.xml을 생성할 수 있습니다.

      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
    2. 호스트 시스템에 파일을 저장합니다.
    3. 파일을 VM의 XML 구성과 병합합니다.

      예를 들어 다음 명령은 GPU XML 파일 GPU-Assign.xml을 System1 VM의 XML 구성 파일과 병합합니다.

      # virsh attach-device System1 --file /home/GPU-Assign.xml --persistent
      Device attached successfully.
      참고

      GPU는 VM에 보조 그래픽 장치로 연결됩니다. 기본 그래픽 장치로 GPU를 할당하는 것은 지원되지 않으며, Red Hat은 VM의 XML 구성에서 기본 에뮬레이션 그래픽 장치를 제거하지 않는 것이 좋습니다.

검증

알려진 문제

  • VM에 연결할 수 있는 GPU 수는 할당된 PCI 장치 최대 수로 제한됩니다. RHEL 9는 현재 64입니다. 그러나 여러 GPU를 VM에 연결하면 게스트에서 메모리 매핑된 I/O(MMIO)에 문제가 발생할 수 있으므로 VM에서 GPU를 사용할 수 없습니다.

    이러한 문제를 해결하려면 더 큰 64비트 MMIO 공간을 설정하고 64비트 MMIO 공간을 확장할 수 있도록 vCPU 물리적 주소 비트를 구성합니다.

  • RHEL 9 게스트 운영 체제를 사용하는 VM에 NVIDIA GPU 장치를 연결하면 현재 해당 VM에서 Wayland 세션이 비활성화되고 대신 Xorg 세션을 로드합니다. 이는 NVIDIA 드라이버와 Wayland 간의 비호환성 때문입니다.