13장. 가상 머신의 GPU 장치 관리
RHEL 8 호스트에서 VM(가상 머신)의 그래픽 성능을 향상시키기 위해 VM에 호스트 GPU를 VM에 할당할 수 있습니다.
- 호스트에서 GPU를 분리하고 GPU의 전체 제어를 VM에 직접 전달할 수 있습니다.
- 물리적 GPU에서 여러 개의 중재된 장치를 생성하고 이러한 장치를 가상 GPU(vGPU)로 여러 게스트에 할당할 수 있습니다. 현재 이 기능은 선택한 NVIDIA GPU에서만 지원되며, 단일 게스트에 중재된 장치 하나만 할당할 수 있습니다.
GPU 할당은 현재 Intel 64 및 AMD64 시스템에서만 지원됩니다.
13.1. 가상 머신에 GPU 할당 링크 복사링크가 클립보드에 복사되었습니다!
호스트 시스템에 연결된 GPU에 액세스하고 제어하려면 GPU의 직접 제어를 VM(가상 머신)으로 전달하도록 호스트 시스템을 구성해야 합니다.
가상 GPU 할당에 대한 정보를 찾고 있는 경우 NVIDIA vGPU 장치 관리를 참조하십시오.
사전 요구 사항
호스트 시스템 커널에서 IOMMU 지원을 활성화해야 합니다.
Intel 호스트에서 VT-d를 활성화해야 합니다.
intel_iommu=on및iommu=pt매개변수를 사용하여 GRUB 설정을 다시 생성합니다.# grubby --args="intel_iommu=on iommu=pt" --update-kernel DEFAULT- 호스트를 재부팅합니다.
AMD 호스트에서 AMD-Vi를 활성화해야 합니다.
AMD 호스트에서 IOMMU는 기본적으로 활성화되어 있으며 add
iommu=pt를 추가하여 통과 모드로 전환할 수 있습니다.the
iommu=pt매개변수를 사용하여 GRUB 설정을 다시 생성합니다.# grubby --args="iommu=pt" --update-kernel DEFAULT참고pt옵션은 통과 모드에서 사용되는 장치에 대해서만 IOMMU를 활성화하고 호스트 성능을 향상시킵니다. 그러나 일부 하드웨어가 옵션을 지원하는 것은 아닙니다. 이 옵션이 활성화되지 않은 경우에도 장치를 계속 할당할 수 있습니다.- 호스트를 재부팅합니다.
- 64비트 ARM 호스트에서 VM에 GPU 할당은 현재 지원되지 않습니다.
절차
드라이버가 GPU에 바인딩되지 않도록 합니다.
GPU가 연결된 PCI 버스 주소를 식별합니다.
# lspci -Dnn | grep VGA 0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)호스트의 그래픽 드라이버가 GPU를 사용하지 못하게 합니다. 이렇게 하려면 pci-stub 드라이버와 함께 GPU PCI ID를 사용합니다.
예를 들어 다음 명령을 사용하면 10de:11fa 버스에 연결된 GPU에 드라이버가 바인딩되지 않습니다.
# grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT- 호스트를 재부팅합니다.
선택 사항: 제한 사항을 지원하여 오디오와 같은 특정 GPU 기능을 VM으로 전달할 수 없는 경우 IOMMU 그룹 내에서 끝점의 드라이버 바인딩을 수정하여 필요한 GPU 기능만 통과할 수 있습니다.
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>엔드포인트가 호스트 드라이버에 연결되지 않도록 합니다.
이 예에서 VM에 GPU를 할당하려면
<address domain='0x0000' bus='0x02' slot='0x00' function='0x00' function='0x1'/>오디오 기능에 해당하는 엔드포인트를 방지하고 대신 VFIO-PCI에 엔드포인트를 연결합니다.# driverctl set-override 0000:02:00.1 vfio-pci
GPU를 VM에 연결합니다
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>- 파일을 호스트 시스템에 저장합니다.
파일을 VM의 XML 구성과 병합합니다.
예를 들어 다음 명령은 GPU XML 파일 GPU-Assign.xml을
System1VM의 XML 구성 파일과 병합합니다.# virsh attach-device System1 --file /home/GPU-Assign.xml --persistent Device attached successfully.참고GPU는 VM에 보조 그래픽 장치로 연결됩니다. 기본 그래픽 장치로 GPU를 할당하는 것은 지원되지 않으며, Red Hat은 VM의 XML 구성에서 기본 에뮬레이션 그래픽 장치를 제거하지 않는 것이 좋습니다.
검증
-
장치가 VM의 XML 구성의 <
devices> 섹션에 나타납니다. 자세한 내용은 샘플 가상 머신 XML 구성에서 참조하십시오.
알려진 문제
VM에 연결할 수 있는 GPU 수는 현재 RHEL 8이 64인 할당된 PCI 장치 최대 수로 제한됩니다. 그러나 여러 GPU를 VM에 연결하면 게스트에서 메모리 매핑된 I/O(MMIO)에 문제가 발생할 수 있으므로 VM에서 GPU를 사용할 수 없습니다.
이러한 문제를 해결하려면 더 큰 64비트 MMIO 공간을 설정하고 64비트 MMIO 공간을 확장할 수 있도록 vCPU 물리적 주소 비트를 구성합니다.
- RHEL 8 게스트 운영 체제를 사용하는 VM에 NVIDIA GPU 장치를 연결하면 현재 해당 VM에서 Wayland 세션이 비활성화되고 대신 Xorg 세션을 로드합니다. 이는 NVIDIA 드라이버와 Wayland 간의 비호환성 때문입니다.