vmware 中给 VM 设置 cpu 如何设置才是合理的?

2022-09-06 11:55:18 +08:00
 chackchackGO

针对大多数家用台式电脑或笔记本的这种单 CPU 情况而言, 如何设置最好?
之所以这么问是因为我一直不能完全理解 'Number of processors' 和 'Number of cores per processor'这 2 个字段的意义.

我本以为是 'Number of processors' 指 '完整的一块物理 CPU' 的数量, 例如一颗 Intel I7-9750H CPU 就代表一块.
'Number of cores per processor' 即指代针对每块物理 cpu 所共享给虚拟机的核心数量. 例如 6 核的 I7-9750H 我可以共享出去 1~6 核.
但是学长跟我讲不是这样理解的..涉及到 NUMA 之类的较深层的 cpu 概念. 听的我云里雾里,而且搜到的资料也不多的样子.

按照上图设置之后的 win10 虚拟机仍然操作不流畅, 其余设置是 8G 内存和 100G 的 nvme 固态

5036 次点击
所在节点    问与答
23 条回复
FrankAdler
2022-09-06 12:54:28 +08:00
你理解的是对的,虚拟几个 cpu 然后每个 cpu 的核数,截图里 4 和 1 调换下
你学长是在吹牛逼吗还是觉得自己知道的多强行在这个场景炫技?
chackchackGO
2022-09-06 14:09:03 +08:00
@FrankAdler 实际测试了一下(切换设置并用 cpu-z 跑分), 的确是按照我的理解才正确. 感谢.
不过忘记了提了一个问题: 针对支持超线程的 cpu, 可给虚拟机分配的 cores 数量是物理 cores*2 对吗?
ysc3839
2022-09-06 15:22:15 +08:00
我自己是把虚拟机的核心数设置成宿主机的线程数,不确定这么做会不会因为虚拟机内系统无法看到 CPU 线程导致调度策略不好,但是如果不设置成线程数的话等于超线程没有被利用了。
iloveayu
2022-09-06 17:16:23 +08:00
这个 Processors 选项配置,是指你创建的虚拟机,虚拟出的硬件 CPU 规格是什么样的。
Number of processors ,这个是指你要给你的虚拟机,虚拟出多少颗 CPU ,表现在 Windows 操作系统上,就是系统信息 CPU 描述里的 Socket 数量。
Number of cores 1 cpu ,这个是指,你虚拟出来的虚拟硬件,每颗 CPU 上有多少个核心(和宿主机有无超线程无关)。
如果按照你截图种的配置,那么你安装完 win10 后,在系统信息里,可以看到 4 核心 4 个 socket 的字样。
如果调换这两个配置,你创建出的虚机,更符合一台 PC 的真实状况,也就是单路 4 核。
这两种配置方式,在 guest vm 里任务管理器里数框框,都是 4 个框。
如果宿主机是 i7-9750h ( 6c12t ),开了超线程的情况下,total processor cores ,最大不能超过 12 。
所以如果你想获得比较好的虚拟机 CPU 性能,可以考虑 1x8 都是可以的。
另外,“win10 虚拟机仍然操作不流畅”,这说明你用的是真的 VMware Workstation ,卡就对啦,VMware tools 3D 性能不行,厂商也不想优化没办法。
cubecube
2022-09-06 17:23:14 +08:00
1,4 和 4,1 效果是一样的。之前看过文档
chackchackGO
2022-09-06 17:32:57 +08:00
@iloveayu 按照 4 processors, 1 core 的设置 任务管理器里显示的是 2 sockets, 2 virtual processors. windows 好怪哦
FrankAdler
2022-09-06 17:36:24 +08:00
@chackchackGO 是可以按照超线程的数量来分配的,比如我 6c12t ,虚拟机编译的时候分配 12c ,宿主机里全部跑满全部框框
icyalala
2022-09-06 17:37:23 +08:00
虽然你也基本没说错,但建议还是了解一下 NUMA 概念和 Windows Processor Groups:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/
Windows 不同版本支持的 CPU socket 上限也是不一样的
chackchackGO
2022-09-06 17:39:07 +08:00
@cubecube 麻烦指路一下文档地址.

我用 cpuz 测试了一下, [1,4] 的多核分数是 [4,1] 的 2 倍.
shika
2022-09-06 17:47:09 +08:00
在 ESXi 中,我一般只设置总的 vCPU 数,但两种方式确实可以手动指定的,有什么区别没深究,有空我测试一下看看
shika
2022-09-06 17:55:17 +08:00
确定的一件事是 windows 非 server 版的系统比如 win10 专业版是不支持超过两个处理器的,所以只能设置 2 个处理器,然后每个处理器再设置多少个核心。esxi 会根据你选择的操作系统版本自动设置好,只需要设置总的 vcpu 数量。
shika
2022-09-06 18:03:53 +08:00
@chackchackGO 1,4 的性能是 4,1 的两倍这种应该是不太对的,是不是因为 win10 只支持两个处理器的关系
iloveayu
2022-09-06 18:55:05 +08:00
@chackchackGO win10 版本的限制,home 最大支持 1 socket ,pro ent 和 edu 是 2 ,工作站版 是 4
iloveayu
2022-09-06 19:25:08 +08:00
chackchackGO
2022-09-06 19:31:33 +08:00
@shika 我又测试了一下, 看来是的, 分数相差无几.
ysc3839
2022-09-06 19:32:17 +08:00
@cubecube 我比较怀疑是会影响调度的,因为在实际硬件上多 CPU 会因为跨 CPU 通信等问题性能不如多核,可能会影响调度器策略,进而影响最终性能。
wangyuyang3
2022-09-06 19:46:08 +08:00
实测和楼主结果差不多,总线程数一致的情况下,VMware 虚拟机分配“一处理器多内核”比“多处理器一内核”要好得多,在 Linux 系统也是如此。应该就是调度问题。

至于 NUMA 概念,应该主要是为了进一步了解 VMware 提供这种配置选项的原因。不过一般只有服务器 cpu 和多 cpu 平台会涉及到这个领域?

另外 Intel 12 代出现大小核架构以后,VMware 目前调度依旧存在极大问题,无论怎么设置虚拟机 cpu 核心数,都会把主要负载放在小核,进一步导致宿主机卡顿。这个时候设置 cpu 核心数的上限最好剔除掉小核所占的数量,然后任务管理器或 process lasso 设置一下 cpu 相关性,排除 VMware 对小核的调用。
chackchackGO
2022-09-06 20:43:49 +08:00
@wangyuyang3

你在 linux 里怎么测试的?
我为了印证 5 楼 cubecube 的说法, 在 15 楼用 [1, 2] 和 [2, 1] 在 cpu-z 中测试多核分数相差无几. 所以都要相信 5 楼 '两者对调效果一致'的说法了.
可能因为核心数太少了所以分数差别不明显?

linux 里我刚刚尝试用 cpu-x 测试到中途发现它对于 '多处理器, 单核心'的情况下只能对一个 thread 进行 prime numbers 的 bench..所以就一筹莫展了.
iloveayu
2022-09-06 21:11:40 +08:00
@chackchackGO 性能上是否有影响,还得看具体的工作负载,有些情况下,NUMA 后的性能的确是有提升的,需要故意虚拟更多的插槽,减少每插槽上 vCPU 的数量,VMware 的人还有发过 Blog (注意日期,现在不一定又多了多少坑),
https://blogs.vmware.com/vsphere/2013/10/does-corespersocket-affect-performance.html
其实就日常个人使用,VMware Workstation 的情况下,差别不大,估计 VMware workstation 也没对这地方做什么特殊处理,只是模拟环境。
这种情况一般是企业内部,使用 vsphere 全家桶时遇到性能问题才考虑的。
实际场景有些工业相关软件,还有按 server 的 socket 数收 license 钱的奇葩情况呢。
ragnaroks
2022-09-06 21:46:22 +08:00
@wangyuyang3
vmx 可以使用诸如
```ini
processor0.use = "FALSE"
processor1.use = "FALSE"
processor2.use = "FALSE"
processor3.use = "TRUE"
```
的方式绑定线程,如果这里的绑定与分配的线程数量不一致,以数量较小的那个为准

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/878034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX