Linux KVM使用NVIDIA vGPU实践

Linux KVM使用NVIDIA vGPU实践

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
    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
    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-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
    4-windows7-unpackage-nvidia-display-driver.png
  3. 解压完成后自动打开驱动安装程序,同意协议并继续
    5-windows7-nvidia-driver-install-agree-license.png
    5-windows7-nvidia-driver-install-agree-license.png
  4. 选择精简模式安装
    6-windows7-nvidia-driver-install-choose-simple-mode.png
    6-windows7-nvidia-driver-install-choose-simple-mode.png

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

    7-windows7-nvidia-driver-install-windows-security.png
    7-windows7-nvidia-driver-install-windows-security.png
  5. 安装完成后选择马上重新启动,重启虚机
    8-windows7-nvidia-driver-install-reboot-system.png
    8-windows7-nvidia-driver-install-reboot-system.png
  6. 重启后打开设备管理器可以看到 vGPU 已经正常识别成 NVIDIA GRID P4-1B 设备并处于运行中
    9-windows7-success-driver-vgpu-device.png
    9-windows7-success-driver-vgpu-device.png

3.4 配置 License 信息

  1. 桌面右键,点击打开 NVIDIA 控制面板
  2. 打开 NVIDIA 控制面板后,点击左侧的 许可 – 管理许可证,进入管理许可证页面
    10-windows7-nvidia-control-pannel.png
    10-windows7-nvidia-control-pannel.png
  3. 在管理许可证页面输入License Server 的 IP 地址和端口号,端口号默认为 7070
  4. 填写完成后点击右下角的 应用 按钮,应用许可证设置
    11-windows7-enter-license-server-information.png
    11-windows7-enter-license-server-information.png
  5. 关掉并重新打开 NVIDIA 控制面板,即可看到系统已获得授权的提示
    12-windows7-success-get-vpc-authorize.png
    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
    13-windows7-furmark-rank.png
  2. REDTurbineDemo
    Total Score:2427
    14-windows7-redturbinedemo-rank.png
    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
    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
    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
    17-windows10-unpackage-nvidia-display-driver.png
  3. 解压完成后自动打开驱动安装程序,同意协议并继续
    18-windows10-nvidia-driver-install-agree-license.png
    18-windows10-nvidia-driver-install-agree-license.png
  4. 选择精简模式安装
    19-windows10-nvidia-driver-install-choose-simple-mode.png
    19-windows10-nvidia-driver-install-choose-simple-mode.png
  5. 安装完成后选择马上重新启动,重启虚机
    20-windows10-nvidia-driver-install-reboot-system.png
    20-windows10-nvidia-driver-install-reboot-system.png
  6. 重启后打开设备管理器可以看到 vGPU 已经正常识别成 NVIDIA GRID P4-1B 设备并处于运行中
    21-windows10-success-driver-vgpu-device.png
    21-windows10-success-driver-vgpu-device.png

4.4 配置 License 信息

  1. 桌面右键,点击打开 NVIDIA 控制面板
  2. 打开 NVIDIA 控制面板后,点击左侧的 许可 – 管理许可证,进入管理许可证页面
    22-windows10-nvidia-control-pannel.png
    22-windows10-nvidia-control-pannel.png
  3. 在管理许可证页面输入License Server 的 IP 地址和端口号,端口号默认为 7070
  4. 填写完成后点击右下角的 应用 按钮,应用许可证设置
    23-windows10-enter-license-server-information.png
    23-windows10-enter-license-server-information.png
  5. 关掉并重新打开 NVIDIA 控制面板,即可看到系统已获得授权的提示
    24-windows10-success-get-vpc-authorize.png
    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
    25-windows10-furmark-rank.png
  2. REDTurbineDemo
    Total Score:2137
    26-windows10-redturbinedemo-rank.png
    26-windows10-redturbinedemo-rank.png
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容