最近搞到了NVIDIA Cloud Gaming的vGPU驱动, 但是貌似不支持ESXi, 只有KVM和XenServer驱动. XenServer的激活感觉太烦了, 于是选择试试KVM. 以下示例系统为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

png

安装KVM和相关组件

apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager mdevctl

输入以下命令, 将用户添加到对应用户组:
usermod -aG libvirt $USER && usermod -aG kvm $USER

安装vGPU主机驱动
示例: chmod 744 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

png

向虚拟机添加vGPU设备
创建虚拟机后, 使用 virsh edit vm-name 命令编辑虚拟机的XML文件, 并添加以下字段

<device>
  ...
  <hostdev mode='subsystem' type='mdev' model='vfio-pci'>
    <source>
      <address uuid='uuid'/>
    </source>
  </hostdev>
</device>

png

安装vGPU客户端驱动并获取对应许可

Windows系统安装驱动后使用 nvidia-smi -q | findstr "Product License" 命令查询vGPU设备型号和是否已获取许可

png

删除vGPU设备

echo "1" > /sys/class/mdev_bus/domain\:bus\:slot.function/uuid/remove
mdevctl undefine --uuid uuid

已有 6 条评论

  1. dawson

    大佬 NVIDIA-Linux-x86_64-510.73.06-vgaming-vgpu-kvm.run 这个可以分享下嘛~

  2. 王lu

    NVIDIA-Linux-x86_64-510.73.06-vgaming-vgpu-kvm.run 您好 这个驱动求分享个 下载的可以码

  3. 马大大

    你好 我通过这个创建uuid后
    echo "uuid" > /sys/class/mdev_bus/domain:bus:slot.function/mdev_supported_types/nvidia-*/create
    再次重启服务器 发现创建的uuid的设备没有了 这个有没什么办法可以解决 就是重启后也还在的
    [root@vgpu ~]# ls -l /sys/bus/mdev/devices/
    total 0

    1. 上面写了,通过mdevctl define使uuid持久化

      1. 马大大

        而且再次生成uuid它提示 未找到匹配路径: /sys/class/mdev_bus//mdev_supported_types/nvidia-/name

      2. 马大大

        你好 我按照你说的 mdevctl define使uuid持久化 大部分机器解决了 但是有个别几台是p40显卡 重启后uuid就没有了 然后再重启几次就有了 这个好奇怪 求求大佬有没思路解决
        root@gk001:~# ls -l /sys/bus/mdev/devices/
        total 0

添加新评论