ESXi 7.0 开启 NVIDIA 2070 显卡直通 Win10 – 折腾成功的经历

搜了半天攻略没想到最后有个大坑,写一下。本文部分文字借用自参考资料

0. 食用本文之前,假设你已经安装好了ESXi 7.0,并在里面装好了Windows虚拟机。本文不包括这一部分

1. 在机箱里装好显卡

2. 在管理—>硬件PCI设备中搜索nvidia,勾选其中一个后,选择切换直通 。这里我遇到一个很扯淡的情况,就是我的2070显示的4个设备里,随便勾选哪一个,四个勾选框就开始疯狂跳动,网页也基本卡死,点不到切换直通,换了浏览器也不行。最后多刷新几次,勾选了过后马上点才点到了。刷新看下,显示“活动”就弄好了。这步完成后不用重启。

3. 打开SSH(主机-操作-服务-启用SSH),然后ssh进入ESXi

3.1 输入 lspci -v | grep NVIDIA -A1 找到显卡

[root@localhost:~] lspci -v | grep NVIDIA -A1
0000:03:00.0 Display controller VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2070]
         Class 0300: 10de:1f02
--
0000:03:00.1 Multimedia controller Audio device: NVIDIA Corporation TU106 High Definition Audio Controller
         Class 0403: 10de:10f9
--
0000:03:00.2 Serial bus controller USB controller: NVIDIA Corporation TU106 USB 3.1 Host Controller
         Class 0c03: 10de:1ada
--
0000:03:00.3 Serial bus controller : NVIDIA Corporation TU106 USB Type-C UCSI Controller
         Class 0c80: 10de:1adb

找到你显卡最主要的那一条,就是有显卡型号的那一条,比如我这里就是第一条。

然后记录下两个信息,

(1) 第一行开始0000开头的数字,比如我这里是 0000:03:00.0

(2) 第二行的Class最后面的两堆数字,比如我这里是 10de 和 1f02

echo '/device/0000:03:00.0/owner = "passthru"' >> /etc/vmware/esx.conf 

echo '10de  1f02  bridge   false' >> /etc/vmware/passthru.map
echo '10de  1f02  link     false' >> /etc/vmware/passthru.map
echo '10de  1f02  d3d0     false' >> /etc/vmware/passthru.map

其中第一个命令里device后面的序号 和 后面命令里前面两列echo的信息,换成你显卡的上面记录的信息。完成后退出SSH,现在仍然不用着急重启。

6. 打开虚拟机设置,重点为

6.1 预留全部内存

6.2 添加高级参数:虚拟机选项——>高级——>编辑配置参数——>添加参数(hypervisor.cpuid.v0:FALSE

6.3 添加显卡进虚拟机:添加其它设备——>PCI设备 ,有多少加多少,比如上面我的显卡是4条,那就添加4个。如果提示不能添加,则需要关闭[虚拟机选项]里的VBS(基于虚拟化的安全性),和关闭CPU选项下面的所有“向客户机操作系统公开***”

7. 重启主机,完成后重启虚拟机。进设备管理器,【显示适配器】一开始可能识别到了,但是没装驱动所以显示出一个很怪的名字,不担心,直接等一会刷新,win10会自动装驱动

8. 上面都是基本公开的攻略。重点来了,下面我遇到的坑。首先虽然在设备管理器里有显卡,任务管理器里也显示,但使用率极低,打开视频或者游戏还是CPU狂装,gpu不动。

解决方案:在显卡上插个显示器,或者插一个显卡欺骗器(淘宝),然后注意,【在win10里面重启电脑】,不要用ESXi控制重启win10。

重启后,win10会检测到两个显示器,只保留其中显卡对应的拿一个。显示设置里,选择【仅在2上显示】,不行就改用另一个。怎么看改好没有——打开任务管理器,查看GPU,点击开始菜单,看看gpu负载上去没有,上去了就对了。否则,重新选一下显示的屏幕

9. 我还遇到另一个问题,就是这之后只要在ESXi里重启了win10,就会识别不出来显卡(任务管理器里没有)。解决也很简单,在win10内部重启一次即可。

10. 后续坑1:没有OpenCL。在GPU-Z里显示OpenCL不可用;passmark跑分也显示OpenCL不可用;命令行直接输入clinfo不报错但完全无输出。查了大量资料过后终于找到了解决(下面参考资料2)

方法:

(1) 在system32下搜索(也可直接用everything搜索)nvopencl,找到nvopencl32.dll和nvopencl64.dll两个文件的路径

(2) 打开注册表编辑器,展开到 HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors 。这里如果Khronos下面没有OpenCL目录,则需要手动添加。在Vendors下添加一个Dword32键

键的名称为上面搜到的nvopencl64.dll的路径,比如我的是C:\Windows\System32\DriverStore\FileRepository\nvmii.inf_amd64_995a8ca55addcada\nvopencl64.dll

键值为0即可

(3) 注册表编辑器展开到 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Khronos\OpenCL\Vendors],添加一个Dword32键

键的名称为上面搜到的nvopencl32.dll的路径,比如我的是C:\Windows\System32\DriverStore\FileRepository\nvmii.inf_amd64_995a8ca55addcada\nvopencl32.dll

键值为0即可

然后命令行输入clinfo就有一大堆信息了,GPU-Z显示OpenCL启用,passmark跑分不报错。

主要参考资料:

  1. https://blog.csdn.net/weixin_45409343/article/details/122478397

  1. Windows: opencl call failed

点击数:1656

美能达283\363\423\7828进入维修模式

管理员密码:12345678

维修模式

机器启动完后,按效用->计数器->检查详细,然后依次按下停止、0、0、停止、0、1,即可进入维修模式,如果开启了CE认证,默认密码是92729272.

点击数:777

bizhub287\367\c226\C7226\c266\c227\C287\C7528进维修模式

适合bizhub287\367\c226\C7226\c266\c227\C287\C7528\c308\c368\454\c454e\458\558\C458\C558\C654E\C754E

1、机器启动完后,依次按下:菜单-计数器-显示小键盘-停止-0-0-停止-0-1,输入密码9272927292729272,点触屏右上角结束键,即进入维修模式。

2、特殊进入维修模式的方法

1.按住复位键打开主电源开关,启动屏幕右上角显示●

2.进入故障重置界面,不要按故障重置,直接输入“停止”“0”“0”“停止”“0”“1”后,输入密码9272927292729272进入维修模式

管理员密码:1234567812345678

点击数:1453