1 选择所需vGPU类型
查询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
查询 GRID vGPU 用户手册《*-grid-vgpu-user-guide.pdf》,P4 在桌面虚拟化下支持的 vGPU 类型
选择所需 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
查看该类型可支持的 vGPU 数量
[root@vgpu ~]# cat /sys/class/mdev_bus/*/mdev_supported_types/nvidia-71/available_instances 8 8
2 手动创建 vGPU
生成uuid
[root@vgpu ~]# uuidgen a2b1a1fe-117c-4d96-8a92-daf0f877dc36
创建 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
查看是否创建成功
[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
通过 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>
创建 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 虚机
- 拷贝 Windows7 虚机镜像到 vGPU 服务器,本文以 /data/Windows-7-VDesk.qcow2 为例
使用 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.
使用 Spice remote viewer 或 virt-manager 或 RDP(Windows 远程桌面)访问虚机
推荐直接使用 RDP 协议访问,在 vGPU 驱动安装完成后,Spice、Virt-manager 无法获取虚机桌面图像
可以看到当前仅有一块 QXL 显卡
3.2 挂载 vGPU
使用 virsh attach-device 命令挂载 vGPU 设备
[root@vgpu ~]# virsh attach-device vGPU-Win7 /data/1-1-vGPU.xml --persistent Device attached successfully
虚机中查看 vGPU 设备
可以看到新增了一个无法启动的 “标准 VGA 图形适配器” ,这个设备就是新挂载上还未被驱动的 vGPU
3.3 安装 Grid vGPU 驱动
拷贝 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 的最新版本驱动
运行驱动安装程序,解压到默认安装目录
解压完成后自动打开驱动安装程序,同意协议并继续
选择精简模式安装
如果在安装过程中提示 “Windows 安全” 对话框,需选择 始终安装此驱动程序软件
安装完成后选择马上重新启动,重启虚机
重启后打开设备管理器可以看到 vGPU 已经正常识别成 NVIDIA GRID P4-1B 设备并处于运行中
3.4 配置 License 信息
- 桌面右键,点击打开 NVIDIA 控制面板
打开 NVIDIA 控制面板后,点击左侧的 许可 - 管理许可证,进入管理许可证页面
- 在管理许可证页面输入License Server 的 IP 地址和端口号,端口号默认为 7070
填写完成后点击右下角的 应用 按钮,应用许可证设置
关掉并重新打开 NVIDIA 控制面板,即可看到系统已获得授权的提示
3.5 简单跑分测试
FurMark 1.25.0.0版本,800*600 OpenGL渲染测试
FPS:min:22, max:24, avg:22
REDTurbineDemo
Total Score:2427
4 Windows10 vGPU虚机实践
4.1 创建 Windows10 虚机
- 拷贝 Windows10 虚机镜像到 vGPU 服务器,本文以 /data/Windows-10-VDesk.qcow2 为例
使用 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.
使用 Spice remote viewer 或 virt-manager 或 RDP(Windows 远程桌面)访问虚机
推荐直接使用 RDP 协议访问,在 vGPU 驱动安装完成后,Spice、Virt-manager 无法获取虚机桌面图像
可以看到当前有一块自带的 QXL 显卡(如果使用 RDP 协议访问会多出一个 Microsoft Remote Display Adapter 显卡)
4.2 挂载 vGPU
使用 virsh attach-device 命令挂载 vGPU 设备
[root@vgpu ~]# virsh attach-device vGPU-Win10 /data/1-1-vGPU.xml --persistent Device attached successfully
虚机中查看 vGPU 设备
可以看到新增了一个无法启动的 “Microsoft 基本显示适配器” ,这个设备就是新挂载上还未被驱动的 vGPU
4.3 安装 Grid vGPU 驱动
拷贝 Nvidia Grid 驱动到虚机中,文件名类似于:*_grid_win10_server2016_server2019_64bit_international.exe
本文后续以 Grid10 版本为例安装 Grid vGPU 驱动
Grid10 为支持 Windows7 / Windows10 的最新版本驱动
运行驱动安装程序,解压到默认安装目录
解压完成后自动打开驱动安装程序,同意协议并继续
选择精简模式安装
安装完成后选择马上重新启动,重启虚机
重启后打开设备管理器可以看到 vGPU 已经正常识别成 NVIDIA GRID P4-1B 设备并处于运行中
4.4 配置 License 信息
- 桌面右键,点击打开 NVIDIA 控制面板
打开 NVIDIA 控制面板后,点击左侧的 许可 - 管理许可证,进入管理许可证页面
- 在管理许可证页面输入License Server 的 IP 地址和端口号,端口号默认为 7070
填写完成后点击右下角的 应用 按钮,应用许可证设置
关掉并重新打开 NVIDIA 控制面板,即可看到系统已获得授权的提示
4.5 简单跑分测试
FurMark 1.25.0.0版本,800*600 OpenGL渲染测试
FPS:min:48, max:49, avg:48
REDTurbineDemo
Total Score:2137