本文最后更新于 116 天前,其中的信息可能已经有所发展或是发生改变。
以下示例系统为Ubuntu20.04
开启IOMMU
编辑 /etc/default/grub 文件中 GRUB_CMDLINE_LINUX 字段的内容为:
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"
若系统以Legacy模式启动, 输入命令: grub-mkconfig -o /boot/grub/grub.cfg
若系统以UEFI模式启动, 输入命令: grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
安装KVM和相关组件
apt install -y --no-install-recommends qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager mdevctl
将用户添加到对应用户组:
usermod -aG libvirt $USER && usermod -aG kvm $USER
安装vGPU主机驱动
示例:
chmod 777 NVIDIA-Linux-x86_64-510.73.06-vgaming-vgpu-kvm.run && ./NVIDIA-Linux-x86_64-510.73.06-vgaming-vgpu-kvm.run
创建vGPU设备
1.使用 lspci | grep NVIDIA 命令查看可用GPU的总线位置
2.使用 nvidia-smi vgpu -s 命令查看受支持的vGPU类型
3.使用 nvidia-smi vgpu -c 命令查看可创建的vGPU类型
4.查看对应vGPU设备的路径
grep -l "vgpu-type" /sys/class/mdev_bus/domain\:bus\:slot.function/mdev_supported_types/nvidia-*/name
5.查看对应vGPU设备的可创建数量
cat /sys/class/mdev_bus/domain\:bus\:slot.function/mdev_supported_types/nvidia-*/available_instances
6.为vGPU设备生成通用唯一标识符(UUID)并创建对应的实例, 并使mdev设备文件持久化
uuidgen echo "uuid" > /sys/class/mdev_bus/domain\:bus\:slot.function/mdev_supported_types/nvidia-*/create mdevctl define --auto --uuid uuid
若是在支持SR-IOV的GPU(Ampere架构及以后)上创建mdev设备, 需使用以下命令为sysfs文件系统中的物理GPU启用虚拟功能:
/usr/lib/nvidia/sriov-manage -e domain:bus:slot.function
额外选项: 输入下方命令以暂时禁用帧速率限制器(FRL)和启用 Unified Memory
echo "frame_rate_limiter=0, enable_uvm=1, enable_debugging=1, enable_profiling=1" > /sys/bus/mdev/devices/uuid/nvidia/vgpu_params
向虚拟机添加vGPU设备
创建虚拟机后, 使用 virsh edit vm-name 命令编辑虚拟机的XML文件, 并添加以下字段:
<device> ... <hostdev mode='subsystem' type='mdev' model='vfio-pci'> <source> <address uuid='uuid'/> </source> </hostdev> </device>
安装vGPU客户端驱动并获取对应许可
Windows系统安装驱动后使用 nvidia-smi -q | findstr “Product License” 命令查询vGPU设备型号和是否已获取许可
删除vGPU设备
echo "1" > /sys/class/mdev_bus/domain\:bus\:slot.function/uuid/remove mdevctl undefine --uuid uuid