1 选择所需vGPU类型

  1. 查询GPU 支持的 mdev 类型列表

    [root@vgpu ~]# ls /sys/class/mdev_bus/*/mdev_supported_types
    /sys/class/mdev_bus/0000:3b:00.0/mdev_supported_types:
    nvidia-157  nvidia-214  nvidia-243  nvidia-288  nvidia-289  nvidia-63  nvidia-64  nvidia-65  nvidia-66  nvidia-67  nvidia-68  nvidia-69  nvidia-70  nvidia-71
    
    /sys/class/mdev_bus/0000:af:00.0/mdev_supported_types:
    nvidia-157  nvidia-214  nvidia-243  nvidia-288  nvidia-289  nvidia-63  nvidia-64  nvidia-65  nvidia-66  nvidia-67  nvidia-68  nvidia-69  nvidia-70  nvidia-71
  2. 查询 GRID vGPU 用户手册《*-grid-vgpu-user-guide.pdf》,P4 在桌面虚拟化下支持的 vGPU 类型

    1-nvidia-support-vgpu-type-in-virtual-desktops.png

  3. 选择所需 vGPU 类型(以 P4-1B 为例),查询 P4-1B 对应的 mdev 类型

    [root@vgpu ~]# grep -n "P4-1B" /sys/class/mdev_bus/*/mdev_supported_types/nvidia-*/name
    /sys/class/mdev_bus/0000:3b:00.0/mdev_supported_types/nvidia-243/name:1:GRID P4-1B4
    /sys/class/mdev_bus/0000:3b:00.0/mdev_supported_types/nvidia-71/name:1:GRID P4-1B
    /sys/class/mdev_bus/0000:af:00.0/mdev_supported_types/nvidia-243/name:1:GRID P4-1B4
    /sys/class/mdev_bus/0000:af:00.0/mdev_supported_types/nvidia-71/name:1:GRID P4-1B
    可以看到 GRID P4-1B 的 mdev 类型是 nvidia-71
  4. 查看该类型可支持的 vGPU 数量

    [root@vgpu ~]# cat /sys/class/mdev_bus/*/mdev_supported_types/nvidia-71/available_instances
    8
    8

2 手动创建 vGPU

  1. 生成uuid

    [root@vgpu ~]# uuidgen
    a2b1a1fe-117c-4d96-8a92-daf0f877dc36
  2. 创建 0000:3b:00.0 上 nvidia-71 类型 vGPU

    [root@vgpu ~]# echo "a2b1a1fe-117c-4d96-8a92-daf0f877dc36" > /sys/class/mdev_bus/0000:3b:00.0/mdev_supported_types/nvidia-71/create
  3. 查看是否创建成功

    [root@vgpu ~]# ls -l /sys/bus/mdev/devices/
    total 0
    lrwxrwxrwx 1 root root 0 Jan 19 15:56 a2b1a1fe-117c-4d96-8a92-daf0f877dc36 -> ../../../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/a2b1a1fe-117c-4d96-8a92-daf0f877dc36
  4. 通过 virsh 查看设备信息

    [root@vgpu ~]# virsh nodedev-list | grep mdev
    mdev_a2b1a1fe_117c_4d96_8a92_daf0f877dc36
    [root@vgpu ~]# 
    [root@vgpu ~]# virsh nodedev-dumpxml mdev_a2b1a1fe_117c_4d96_8a92_daf0f877dc36
    <device>
      <name>mdev_a2b1a1fe_117c_4d96_8a92_daf0f877dc36</name>
      <path>/sys/devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/a2b1a1fe-117c-4d96-8a92-daf0f877dc36</path>
      <parent>pci_0000_3b_00_0</parent>
      <driver>
        <name>vfio_mdev</name>
      </driver>
      <capability type='mdev'>
        <type id='nvidia-71'/>
        <iommuGroup number='1'/>
      </capability>
    </device>
  5. 创建 vGPU XML 描述文件

    [root@vgpu ~]# vim /data/1-1-vGPU.xml
    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='a2b1a1fe-117c-4d96-8a92-daf0f877dc36'/>
      </source>
    </hostdev>

3 Windows7 vGPU虚机实践

3.1 创建 Windows7 虚机

  1. 拷贝 Windows7 虚机镜像到 vGPU 服务器,本文以 /data/Windows-7-VDesk.qcow2 为例
  2. 使用 virt-install 命令创建虚机

    virt-install \
    --name vGPU-Win7 \
    --vcpus sockets=1,cores=4,threads=2 \
    --memory 8192 \
    --disk path=/data/Windows-7-VDesk.qcow2 \
    --network=default,model=virtio \
    --video qxl --channel spicevmc \
    --graphics spice,listen=0.0.0.0,port=6007,tlsport=,defaultMode='insecure' \
    --os-type=windows --os-variant=auto \
    --autostart --noautoconsole \
    --hvm --virt-type kvm \
    --input tablet \
    --boot hd
    Starting install...
    Domain creation completed.
  3. 使用 Spice remote viewer 或 virt-manager 或 RDP(Windows 远程桌面)访问虚机

    推荐直接使用 RDP 协议访问,在 vGPU 驱动安装完成后,Spice、Virt-manager 无法获取虚机桌面图像

    可以看到当前仅有一块 QXL 显卡

    2-windows7-qxl-device.png

3.2 挂载 vGPU

  1. 使用 virsh attach-device 命令挂载 vGPU 设备

    [root@vgpu ~]# virsh attach-device vGPU-Win7 /data/1-1-vGPU.xml --persistent
    Device attached successfully
  2. 虚机中查看 vGPU 设备

    可以看到新增了一个无法启动的 “标准 VGA 图形适配器” ,这个设备就是新挂载上还未被驱动的 vGPU

    3-windows7-unsupport-vgpu-device.png

3.3 安装 Grid vGPU 驱动

  1. 拷贝 Nvidia Grid 驱动到虚机中

    • Grid10 版本以下使用该名称驱动文件

      *_grid_win7_win8_server2012R2_64bit_international.exe:

    • Grid11 版本虽文档中说明不支持 Windows7 但根据验证仍然支持,需使用该名称驱动文件:

      *_grid_server2012R2_64bit_international.exe

      但如无必要,不要在生产环境中的 Windows7 上使用官方未正式支持的 Grid11 版本驱动

    本文后续以 Grid10 版本为例安装 Grid vGPU 驱动

    Grid10 为支持 Windows7 / Windows10 的最新版本驱动
  2. 运行驱动安装程序,解压到默认安装目录

    4-windows7-unpackage-nvidia-display-driver.png

  3. 解压完成后自动打开驱动安装程序,同意协议并继续

    5-windows7-nvidia-driver-install-agree-license.png

  4. 选择精简模式安装

    6-windows7-nvidia-driver-install-choose-simple-mode.png

    如果在安装过程中提示 “Windows 安全” 对话框,需选择 始终安装此驱动程序软件

    7-windows7-nvidia-driver-install-windows-security.png

  5. 安装完成后选择马上重新启动,重启虚机

    8-windows7-nvidia-driver-install-reboot-system.png

  6. 重启后打开设备管理器可以看到 vGPU 已经正常识别成 NVIDIA GRID P4-1B 设备并处于运行中

    9-windows7-success-driver-vgpu-device.png

3.4 配置 License 信息

  1. 桌面右键,点击打开 NVIDIA 控制面板
  2. 打开 NVIDIA 控制面板后,点击左侧的 许可 - 管理许可证,进入管理许可证页面

    10-windows7-nvidia-control-pannel.png

  3. 在管理许可证页面输入License Server 的 IP 地址和端口号,端口号默认为 7070
  4. 填写完成后点击右下角的 应用 按钮,应用许可证设置

    11-windows7-enter-license-server-information.png

  5. 关掉并重新打开 NVIDIA 控制面板,即可看到系统已获得授权的提示

    12-windows7-success-get-vpc-authorize.png

3.5 简单跑分测试

  1. FurMark 1.25.0.0版本,800*600 OpenGL渲染测试

    FPS:min:22, max:24, avg:22

    13-windows7-furmark-rank.png

  2. REDTurbineDemo

    Total Score:2427

    14-windows7-redturbinedemo-rank.png

4 Windows10 vGPU虚机实践

4.1 创建 Windows10 虚机

  1. 拷贝 Windows10 虚机镜像到 vGPU 服务器,本文以 /data/Windows-10-VDesk.qcow2 为例
  2. 使用 virt-install 命令创建虚机

    virt-install \
    --name vGPU-Win10 \
    --vcpus sockets=1,cores=4,threads=2 \
    --memory 8192 \
    --disk path=/data/Windows-10-VDesk.qcow2 \
    --network=default,model=virtio \
    --video qxl --channel spicevmc \
    --graphics spice,listen=0.0.0.0,port=6010,tlsport=,defaultMode='insecure' \
    --os-type=windows --os-variant=auto \
    --autostart --noautoconsole \
    --hvm --virt-type kvm \
    --input tablet \
    --boot hd
    Starting install...
    Domain creation completed.
  3. 使用 Spice remote viewer 或 virt-manager 或 RDP(Windows 远程桌面)访问虚机

    推荐直接使用 RDP 协议访问,在 vGPU 驱动安装完成后,Spice、Virt-manager 无法获取虚机桌面图像

    可以看到当前有一块自带的 QXL 显卡(如果使用 RDP 协议访问会多出一个 Microsoft Remote Display Adapter 显卡)

    15-windows10-qxl-device.png

4.2 挂载 vGPU

  1. 使用 virsh attach-device 命令挂载 vGPU 设备

    [root@vgpu ~]# virsh attach-device vGPU-Win10 /data/1-1-vGPU.xml --persistent
    Device attached successfully
  2. 虚机中查看 vGPU 设备

    可以看到新增了一个无法启动的 “Microsoft 基本显示适配器” ,这个设备就是新挂载上还未被驱动的 vGPU

    16-windows10-unsupport-vgpu-device.png

4.3 安装 Grid vGPU 驱动

  1. 拷贝 Nvidia Grid 驱动到虚机中,文件名类似于:*_grid_win10_server2016_server2019_64bit_international.exe

    本文后续以 Grid10 版本为例安装 Grid vGPU 驱动

    Grid10 为支持 Windows7 / Windows10 的最新版本驱动
  2. 运行驱动安装程序,解压到默认安装目录

    17-windows10-unpackage-nvidia-display-driver.png

  3. 解压完成后自动打开驱动安装程序,同意协议并继续

    18-windows10-nvidia-driver-install-agree-license.png

  4. 选择精简模式安装

    19-windows10-nvidia-driver-install-choose-simple-mode.png

  5. 安装完成后选择马上重新启动,重启虚机

    20-windows10-nvidia-driver-install-reboot-system.png

  6. 重启后打开设备管理器可以看到 vGPU 已经正常识别成 NVIDIA GRID P4-1B 设备并处于运行中

    21-windows10-success-driver-vgpu-device.png

4.4 配置 License 信息

  1. 桌面右键,点击打开 NVIDIA 控制面板
  2. 打开 NVIDIA 控制面板后,点击左侧的 许可 - 管理许可证,进入管理许可证页面

    22-windows10-nvidia-control-pannel.png

  3. 在管理许可证页面输入License Server 的 IP 地址和端口号,端口号默认为 7070
  4. 填写完成后点击右下角的 应用 按钮,应用许可证设置

    23-windows10-enter-license-server-information.png

  5. 关掉并重新打开 NVIDIA 控制面板,即可看到系统已获得授权的提示

    24-windows10-success-get-vpc-authorize.png

4.5 简单跑分测试

  1. FurMark 1.25.0.0版本,800*600 OpenGL渲染测试

    FPS:min:48, max:49, avg:48

    25-windows10-furmark-rank.png

  2. REDTurbineDemo

    Total Score:2137

    26-windows10-redturbinedemo-rank.png

感谢阅读,如需交流可通过邮件与我沟通:hczhang.cn@gmail.com