Hyper-V 显卡虚拟化详解

目前各类虚拟平台都很成熟了,但基本是一CPU虚拟化为核心,对于GPU的虚拟化利用可选择的硬件非常有限,而且性价比极低,功耗也很爆炸,如果只是家用,并不建议上昂贵的专业卡,以下就是家用显卡(包括核显和独显)在Hyper-V平台下虚拟化的详细操作过程。建议不要去尝试ESXI和PVE的家用显卡vGPU方案,几乎行不通,而且可复制性差,效果很玄学。

当然,即便是Hyper-V平台,目前Intel和NVdia的家用显卡支持良好,AMD却不太理想,因此下面仅提到了intel和NVdia

安装Hype-V

windows10、windows11专业版本自带就有,需要开启一下。

控制面板-启用或关闭Windows功能(或者:设置-应用-可选功能-更多Windows功能)进入,勾选:
[Hyper-V]和[Windows虚拟机监控程序平台]两项,后者可以不开启(具体功能此处不讨论)。

新建虚拟机

建议和宿主机相同的版本,最大限度保证后续vGPU的驱动;具体安装过程不是此次的重点,此处省略。
我是在Windows11 22H2下安装的同版本虚拟机。

重要提示:

进行下面的操作前,请关闭虚拟机的[使用自动检查点]选项!!!

给虚拟机配置vGPU

管理员身份运行powershell(以下操作实在宿主机上进行的!)执行以下命令:

$vm = "Speaker"

说明:把虚拟机赋值给变量$vm方便下面操作,我的虚拟机名称为Speaker(注意不能包含中文)。

Get-VMHostPartitionableGpu

说明:获取你的支持虚拟化的GPU清单(稍旧的版本用Get-VMpartitionableGpu比如win10)

输出可用于虚拟化的显卡列表.jpg

我的输出结果:
a, 显卡名/标识(注意是冒号后面的完整内容,实际上就是“显卡路径”)
b, 显卡厂商:8086-Intel(我的就是核显UHD770),10DE代表Nvdia

Add-VMGpuPartitionAdaper -VMName $vm -InstancePath "显卡路径"

说明:给虚拟机添加虚拟显卡

通过我上面的输出,如果我要给虚拟机添加我的Intel UHD770核显用作虚拟显卡,应该执行如下命令:

Add-VMGpuPartitionAdapter -VMName $vm -InstancePath "\\?\PCI#VEN_8086&DEV_4680&SUBSYS_86941043&REV_0C#3&11583659&0&10#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"

当然,如果你和我一样只有一张显卡(我就只有UHD770核显),那么直接执行:

Add-VMGpuPartitionAdapter -VMName $vm

即可(不带显卡路径,默认第一张)。

Set-VMGpuPartitionAdapter -VMName $vm

说明:设置虚拟显卡

Set-VM -VMName $vm -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1GB -HighMemoryMappedIoSpace 8GB

说明:设置虚拟显卡MMIO地址范围/大小(建议3060及以上32GB,核显8GB)

虚拟机安装显卡驱动

虚拟开机后,从宿主机复制:

C:\Windows\System32\DriverStore\FileRepository

目录里面以iidg开头的所有文件夹,并粘贴到虚拟机的

C:\Windows\System32\HostDriverStore\FileRepository

目录下。

这里需要注意:

iigd开头的是Intel显卡的驱动,nv开头的是Nvdia显卡的驱动;还有就是没有的文件夹要手动创建!

复制完驱动,重启一下系统,在设备管理器里面可以看到UHD770已经正常运行了。

虚拟机内的配置

到了上面一步,虽然vGpu正常运行,但是由于远程桌面调用的是cpu模拟的Remote Display Adapter,所以实际访问后还需要一些配置。

1.组策略设置(gpedit.msc进入)

依次进入:计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境

启用以下内容:

组策略设置.jpg

a. 将硬件图形适配器应用于所有远程桌面服务会话
b. 为远程桌面连接设置 H.264/AVC 444图形模式的优先级
c. 配置远程桌面连接的 H.264?AVC 硬件编码
d. 配置 RemoteFX 数据的压缩
e. 为专门针对 Windows Server 2008 R2 SP1 设计的 RemoteFX 客户端启用 RemoteFX 编码
f. 为远程桌面连接使用 WDDM 图形显示驱动程序

然后向下点开 RemoteFX for Windows Server 2008 R2 并启用所有项目,即:

a. 配置 RemoteFX
b. 使用 RemoteFX 时优化视觉体验
c. 为远程桌面服务会话优化视觉体验

2.注册表设置(regedit进入)

依次进入:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations

新建 DWORD(32位)值,名称为 DWMFRAMEINTERVAL 并设置值为16进制的f或者10进制的15。

此操作可以解除远程30帧的限制。

3.重启系统

到这里已经可以愉快地使用vGPU了(不用管任务管理器是否显示)。

其他

如果虚拟机不需要显卡了

Remove-VMGpuPartitionAdapter -VMName $vm