16장. 가상 머신에서 GPU 장치 관리
RHEL 9 호스트에서 VM(가상 머신)의 그래픽 성능을 개선하기 위해 VM에 호스트 GPU를 할당할 수 있습니다.
- GPU를 호스트에서 분리하고 GPU에 대한 전체 제어 권한을 VM에 직접 전달할 수 있습니다.
- 물리적 GPU에서 중재된 장치를 여러 개 생성하고 이러한 장치를 가상 GPU(vGPU)로 여러 게스트에 할당할 수 있습니다. 현재 선택한 NVIDIA GPU에서만 지원되며, 중재된 장치는 단일 게스트에 할당할 수 있습니다.
GPU 할당은 현재 Intel 64 및 AMD64 시스템에서만 지원됩니다.
16.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는 기본적으로 활성화되어 있으므로
iommu=pt
를 추가하여 pass-through 모드로 전환할 수 있습니다.iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.# grubby --args="iommu=pt" --update-kernel DEFAULT
참고pt
옵션은 pass-through 모드에서 사용되는 장치에 대해서만 IOMMU를 활성화하고 호스트 성능을 개선합니다. 그러나 모든 하드웨어가 옵션을 지원하는 것은 아닙니다. 이 옵션이 활성화되지 않은 경우에도 장치를 계속 할당할 수 있습니다.- 호스트를 재부팅합니다.
프로세스
드라이버가 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>
끝점이 호스트 드라이버에 연결되지 않도록 합니다.
이 예에서 GPU를 VM에 할당하려면 오디오 기능에 해당하는 끝점인 <
address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/
> 이 아니라 VFIO-PCI에 끝점을 연결하지 못하도록 합니다.# driverctl set-override 0000:02:00.1 vfio-pci
VM에 GPU 연결
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을
System1
VM의 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 수는 할당된 최대 PCI 장치 수로 제한되며 RHEL 9에서는 현재 64입니다. 그러나 VM에 여러 GPU를 연결하면 게스트의 메모리 매핑 I/O(MMIO)에 문제가 발생하여 VM에서 GPU를 사용할 수 없게 될 수 있습니다.
이러한 문제를 해결하려면 더 큰 64비트 MMIO 공간을 설정하고 확장 64비트 MMIO 공간을 처리할 수 있도록 vCPU 물리적 주소 비트를 구성합니다.
- NVIDIA GPU 장치를 VM에 연결하면 RHEL 9 게스트 운영 체제를 사용하는 VM에 현재 해당 VM의 Wayland 세션이 비활성화되고 대신 Xorg 세션을 로드합니다. 이는 NVIDIA 드라이버와 Wayland 간의 비호환성 때문입니다.