16장. 가상 머신에서 GPU 장치 관리
RHEL 10 호스트에서 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
# grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
Copy to Clipboard Copied! - 호스트를 재부팅합니다.
AMD 호스트에서 AMD-Vi를 활성화해야 합니다.
AMD 호스트에서 IOMMU는 기본적으로 활성화되어 있으므로
iommu=pt
를 추가하여 pass-through 모드로 전환할 수 있습니다.iommu=pt
매개변수를 사용하여 GRUB 설정을 다시 생성합니다.grubby --args="iommu=pt" --update-kernel DEFAULT
# grubby --args="iommu=pt" --update-kernel DEFAULT
Copy to Clipboard Copied! 참고pt
옵션은 pass-through 모드에서 사용되는 장치에 대해서만 IOMMU를 활성화하고 호스트 성능을 개선합니다. 그러나 모든 하드웨어가 옵션을 지원하는 것은 아닙니다. 이 옵션이 활성화되지 않은 경우에도 장치를 계속 할당할 수 있습니다.- 호스트를 재부팅합니다.
프로세스
드라이버가 GPU에 바인딩되지 않도록 합니다.
GPU가 연결된 PCI 버스 주소를 식별합니다.
lspci -Dnn | grep VGA
# lspci -Dnn | grep VGA 0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
Copy to Clipboard Copied! 호스트의 그래픽 드라이버가 GPU를 사용하지 못하도록 합니다. 이렇게 하려면 pci-stub 드라이버와 함께 GPU PCI ID를 사용합니다.
예를 들어 다음 명령은 드라이버가 10de:11fa 버스에 연결된 GPU에 바인딩되지 않도록 합니다.
grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
# grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
Copy to Clipboard Copied! - 호스트를 재부팅합니다.
선택 사항: 오디오와 같은 특정 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
# virsh nodedev-dumpxml pci_0000_02_00_0
Copy to Clipboard Copied! <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>
<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>
Copy to Clipboard Copied! 끝점이 호스트 드라이버에 연결되지 않도록 합니다.
이 예에서 GPU를 VM에 할당하려면 오디오 기능에 해당하는 끝점인 <
address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/
> 이 아니라 VFIO-PCI에 끝점을 연결하지 못하도록 합니다.driverctl set-override 0000:02:00.1 vfio-pci
# driverctl set-override 0000:02:00.1 vfio-pci
Copy to Clipboard Copied!
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>
<hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </source> </hostdev>
Copy to Clipboard Copied! - 호스트 시스템에 파일을 저장합니다.
파일을 VM의 XML 구성과 병합합니다.
예를 들어 다음 명령은 GPU XML 파일 GPU-Assign.xml을
System1
VM의 XML 구성 파일과 병합합니다.virsh attach-device System1 --file /home/GPU-Assign.xml --persistent
# virsh attach-device System1 --file /home/GPU-Assign.xml --persistent Device attached successfully.
Copy to Clipboard Copied! 참고GPU가 VM에 보조 그래픽 장치로 연결됩니다. GPU를 기본 그래픽 장치로 할당하는 것은 지원되지 않으며 Red Hat은 VM의 XML 구성에서 기본 에뮬레이션 그래픽 장치를 제거하는 것이 좋습니다.
검증
-
장치는 VM의 XML 구성의
<devices
> 섹션에 표시됩니다.