前言

最近一段时间在搞 EVE Online 的脚本,而由于一个脚本程序在单台电脑上只支持开到最多15个端,故决定使用虚拟机。由于如果没有图形设备的话游戏根本跑不起来,vmware的3D加速功能性能实在堪忧,服务器只装了一张GT710,虚拟化之后完全带不动游戏,直通的方案也是同样的问题:只有一张显卡,没法分给多个虚拟机使用,于是最后决定使用Hyper-V的GPU分区(GPU-PV)功能

 

硬件平台

硬件方面用的是之前捡来的DL360p Gen8,两颗E5-2670 V2,8G x4内存加上一张GT710,算是废物利用了没什么好说的,唯一需要注意的一点是HP的服务器如果PCI-E插槽插了什么非HPE设备的话会导致风扇转速提升(其他品牌的服务器我不清楚,但大概率也会有相同的问题),服务器放在机柜里的话基本不用在意这些,当然了,如果你很在意这个问题并且你和我一样使用的是HP Gen8服务器,可以参考iLO Fan Hack

系统要求

我的虚拟机和宿主机使用的都是Windows 10 21H1版本,理论上20H2和Windows11应该都是可以的,但我没试过,至于判断的标准很简单,win+r运行dxdiag,显示-驱动程序-驱动程序模型:WDDM版本≥2.7即可

ps. Windows server 2019 就是1809版本,故不支持GPU-P功能

但是实际运行来看最好是要保证宿主机和虚拟机的系统版本一致,不然也会报错

安装

根据正常操作流程安装Hyper-V,创建好交换机和虚拟机,关闭虚拟机的检查点功能之后用管理员权限打开PowerShell,运行下面的命令

$vm = "你的虚拟机名称"

Remove-VMGpuPartitionAdapter -VMName $vm
Add-VMGpuPartitionAdapter -VMName $vm
Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionVRAM 1
Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionVRAM 11
Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionVRAM 10
Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionEncode 1
Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionEncode 11
Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionEncode 10
Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionDecode 1
Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionDecode 11
Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionDecode 10
Set-VMGpuPartitionAdapter -VMName $vm -MinPartitionCompute 1
Set-VMGpuPartitionAdapter -VMName $vm -MaxPartitionCompute 11
Set-VMGpuPartitionAdapter -VMName $vm -OptimalPartitionCompute 10
Set-VM -GuestControlledCacheTypes $true -VMName $vm
Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 32GB -VMName $vm
Start-VM -Name $vm

运行完成之后等待虚拟机开机,连接上之后进入设备管理器查看显卡是否已经能被识别,由于Nvidia屏蔽了家用显卡(AMD应该也屏蔽了,但我手上没有AMD的卡故没有测试)的虚拟化功能,所以此时虽然已经可以在设备管理器看到显卡已被正确识别,但仍然无法安装驱动,必须要手动复制宿主机的以下驱动文件到虚拟机上:

先将

C:\Windows\System32\nvapi64.dll

复制到System32文件夹中,再创建

C:\Windows\System32\HostDriverStore
C:\Windows\System32\HostDriverStore\FileRepository

两个文件夹,在宿主机里打开设备管理器找到显卡-驱动-驱动程序详细信息,拉到最下面

找到一个nv开头的文件夹,在

C:\Windows\System32\DriverStore\FileRepository

文件夹中找到这个文件夹,复制到虚拟机上面刚创建的\FileRepository 文件夹内,重启虚拟机,打开设备管理器可以看到显卡已经可以正确识别并工作了

运行dxdiag,在呈现一栏可以再检查一下设备是否正常运转

ps. 不要使用Hyper-V的增强会话进行连接,增强会话模式会禁用Direct3D 加速,宿主机驱动更新之后要同步把文件再拷贝到虚拟机一次,不然会报错

性能测试

刚弄好还没试过,感官上感觉基本没什么性能损耗

EVE特效全低再64fps左右,宿主机显卡占用到54%,基本是710的性能了

其他问题

为什么不用RemoteFX

RemoteFX由于存在安全漏洞已被Microsoft移除:CVE-2020-1036 KB4570006

并且RemoteFX存在显存分配上的bug,最高256MiB的显存只能拿来跑分

2 对 “[家用显卡虚拟化]Hyper-V 配置GPU分区”的想法;

发表回复

您的电子邮箱地址不会被公开。