[家用显卡虚拟化]Hyper-V 配置GPU分区
前言
最近一段时间在搞 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的显存只能拿来跑分
想了解一下, 读取Eve内存数据, 是用github上开源的那个c#程序嘛?
我没用过那个欸