最近配置虚拟机的时候,突然发现CPU的数量最高只能选到24了,因为最近没有用到高规格的主机,所以一直没有注意这个问题。发现这个问题还是因为准备装一台搞TensorFlow的虚拟机,本打算给虚拟机配置高一些,没想到发现了只能选到24核这个问题。
因为服务器放到公网上了(成本增加了100块,内网服务器上公网解决方案2.0重磅来袭!),所以我最先怀疑的是有人把我的超线程给关了,于是我就进BIOS看了一下。
可以看到,处理器选项下面的Intel超线程状态为“已启用”,不是这个原因。
那是什么问题呢?我想了想最近可能有影响的几个操作,一是前几天搞macOS用的unlocker工具(macOS unlocker 4.0.5 for VMware ESXi 7.0),但是这个工具我之前用了两三年了没有影响,可以暂时先排除这个原因;二是升级ESXi版本(豁出去了,真机带业务演示一把ESXi 6.7升级7.0 U3),当时做过一些调整;三是安装GPU显卡(切换到WDDM模式,Tesla M4可以用于本地显示输出了!),因为我在给配置了PCI直通的虚拟机启用嵌套虚拟化时,出现了报错,提示嵌套硬件辅助的虚拟化和PCI直通设备不兼容。
因为原因二和原因三的操作时间差不多,一时不好判断。但是GPU直通比较好验证,我们先关闭GPU的硬件直通试一下,在“管理”的“硬件”页签下面,选中GPU设备,点击左上角的“切换直通”。
等直通状态显示为“禁用”之后,我们重新引导主机。
重启之后,硬件直通的状态已经是“禁用”了,但虚拟机配置还是只能选到24核,并且在首页查看硬件配置,CPU的超线程状态还是“已禁用”。
难道是ESXi升级的问题?我找到之前的操作记录,发现做了以下几个操作:
配置命令包含的几个选项都包含hyperthreading字段,这个字段正常就是超线程的意思。当时解决的问题是L1终端故障漏洞,影响范围为VMM、OS和SGX,至少2009-2018年的英特尔处理器都受影响,处理办法是启用ESXi侧通道感知调度程序(SCAv1)或ESXi侧通道感知调度程序v2(SCAv2),看上去配置操作超线程好像和解决方案不太统一啊。
如果在WEB页面查看,在主机的“高级系统设置”中,搜索超线程,有以下几个关联项。
可以看到第二个是启用超线程,状态是true启用状态,也是默认值,没有修改过。
修改过的是第一项和第三项,第一项是不显示安全漏洞告警,应该不影响实际业务,第三项是根据需要限制同一超线程核心同时使用多个逻辑处理器以缓解安全漏洞,看这个描述可能和我的问题有关系。那我们将值修改为false关掉或者重置配置试一下,重新引导服务器生效。
果不其然,就是这个设置的问题,重新引导之后CPU的超线程状态就变成了“是,已启用”的正常状态了。
在虚拟机配置验证一下,CPU配置已经可以选到48核了。
当然,到这里问题就基本解决了,但是我还验证了一下unlocker的问题,因为老版本unlocker工具的兼容性问题,我当时还调整了一些配置,但就跟当时描述的,很多配置都是重启就失效的。
这里批评一下文心一言,他给我的答复让我真就以为就是unlocker的问题了。
结果,/etc/vmware/esx.conf这个配置文件中压根就没有CPU的相关配置。
捎带的,表扬一下通义千问(目前来看,通义千问好像勉强能和ChatGPT-3.5打个平手!)。
虽然方案不是完全正确,但是已经很接近正确方案了,只有一步之遥。如果仅通过这一个技术问题来对比,高下立判!