第 16 章 在虚拟机中管理 GPU 设备
要在 RHEL 10 主机上增强虚拟机(VM)的图形性能,您可以将主机 GPU 分配给虚拟机。
- 您可以将 GPU 从主机分离,并将 GPU 的完全控制直接传给虚拟机。
- 您可以从物理 GPU 创建多个中介设备,并将这些设备作为虚拟 GPU(vGPU)分配给多个客户机。目前仅支持所选的 NVIDIA GPU,且只能为单个客户机分配一个中介设备。
目前只在 Intel 64 和 AMD64 系统上支持 GPU 分配。
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! Toggle word wrap Toggle overflow - 重启主机。
在 AMD 主机上,您必须启用 AMD-Vi。
请注意,在 AMD 主机上,默认启用 IOMMU,您可以添加
iommu=pt
将其切换到直通模式:使用
iommu=pt
参数重新生成 GRUB 配置:grubby --args="iommu=pt" --update-kernel DEFAULT
# grubby --args="iommu=pt" --update-kernel DEFAULT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意pt
选项只为直通模式中使用的设备启用 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! Toggle word wrap Toggle overflow 防止主机的图形驱动程序使用 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! Toggle word wrap Toggle overflow - 重启主机。
可选:如果因为支持限制而无法将某些 GPU 功能(如音频)传递给虚拟机,您可以修改 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! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 防止端点附加到主机驱动程序。
在本例中,要将 GPU 分配给虚拟机,防止与音频功能对应的端点
<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! Toggle word wrap Toggle overflow
将 GPU 附加到虚拟机
使用 PCI 总线地址为 GPU 创建 XML 配置文件。
例如,您可以使用 GPU 总线地址中的参数创建以下 XML 文件,GPU-Assign.xml。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将文件保存到主机系统上。
将文件与虚拟机的 XML 配置合并。
例如,以下命令将 GPU XML 文件 GPU-Assign.xml 与
System1
虚拟机的 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! Toggle word wrap Toggle overflow 注意GPU 是作为辅助图形设备附加到虚拟机的。不支持将 GPU 分配为主图形设备,红帽不建议删除虚拟机 XML 配置中的主模拟图形设备。
验证
-
该设备显示在虚拟机 XML 配置的
<devices
> 部分。