原出处:VMWare中的处理器数量和每个处理器的内核数量概念及查询方法

慕雪对原文进行了一定修改和细化

一、概念:

当我们使用vm来创建虚拟机的时候,一定会经历下面的选项。那就是给虚拟机配置分配的cpu核心数量。但vm这里的说法和我们日常生活中对CPU的X核X线程的说法并不统一。就容易混淆一些概念。

先来说说这里三个选项的含义吧

处理器数量 :虚拟的CPU颗数。

每个处理器的内核数量:虚拟的CPU内核数。

处理器内核总数:处理器内核总数 = 处理器数量 * 每个处理器的内核数量。

处理器内核总数 对应的是 物理CPU的线程数(逻辑处理器数量)。

所以配置虚拟机时,我们只需要关心 CPU实际的线程数 是多少就行了,即配置的 处理器内核总数 < CPU实际的线程数 就行了。

注:我们电脑上的一个CPU,一般都会有多个内核(单核/双核/四核/六核/八核/十六核),而一个内核一般对应一个线程。但通过Intel的超线程技术,一个核心可以对应两个线程,即可以同时运行两个线程,并行处理两个任务。

大小核怎么办?

不过,现在的新intel cpu又出现了大小核的说法。不过这并不影响我们来判断到底应该怎么配置。比如下图是不带大小核设计的8代i7 CPU在官网上的详细参数

image-20230706154158601

而下图是最新的带大小核的13代i9在官网上的详细参数

image-20230706154226600

我们可以看到,即便新的出现了性能核(大核)、能效核(小核)这样的设计,但其依旧没有脱离内核数和线程数这两个参数。

我们依旧可以依照传统的办法,通过线程数来判断应该给虚拟机的CPU上的配置

1
虚拟机的处理器内核总数 < 实际CPU的线程数

而AMD的Cpu暂时还没有出现大小核的设计,也是按照这个办法进行VM虚拟机的配置就OK了!

二、查看电脑配置参数方法:

1、网上查询对应的CPU参数,一般可以去官网查询得到

image-20230706154733449

image-20230706154710269

2、打开windows的任务管理器,先展开视图,再找到“性能”界面。

  • 内核:即CPU核心数。
  • 逻辑处理器:即线程数。

9750h

image-20230706154645555

3、右键 “我的电脑”–“管理”–“设备管理器”

“处理器”项下面显示几条记录即代表有几个逻辑处理器(线程数)。

image-20230706154824878

三、配置论证参考

知道了自己的CPU线程数,就可以来验证一下我们的理论是否正确了

1
虚拟机的处理器内核总数 < 实际CPU的线程数

实际硬件参数: 6核12线程

配置成功

配置失败

四、linux查看cpu核心数/线程数

我使用下图的配置了一个deepin的虚拟机

image-20230706160100381

进了虚拟机,打开终端后,可以用下方的几个命令来查询你的cpu数量是否和上文所述一致

1
2
3
4
5
6
7
8
9
# 查看cpu核心数
# 对应vm处理器数量
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
# 查看每个cpu的内核数量
# 对应vm每个处理器的内核数量
cat /proc/cpuinfo | grep "cpu cores" | uniq
# 查看线程数
# 对应vm的处理器内核总数
cat /proc/cpuinfo | grep "processor" | wc -l

可以看到,在deepin里面执行这些命令的结果和预期完全一致!是4核心8线程的系统!

1
2
3
4
5
6
$ cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
4
$ cat /proc/cpuinfo | grep "cpu cores" | uniq
cpu cores : 2
$ cat /proc/cpuinfo | grep "processor" | wc -l
8

总结

根据上面的操作,可以确定,只要你配置的处理器内核总数小于你CPU的实际线程数,就不会出现问题。但一般情况下,我们还是遵循最常用的一个核心两个线程配置,将每个处理器的内核数量设置为2,再去对应设置处理器数量,比如

  • 处理器数量2,每个处理器的内核数量2(2核4线程)
  • 处理器数量4,每个处理器的内核数量2(4核8线程)
  • 处理器数量6,每个处理器的内核数量2(6核12线程)
  • 以此类推

处理器数量最好设置为2的倍数,毕竟你也没听说过3核和5核的CPU吧?😂不过vm似乎也不允许选择奇数。

在我的使用场景中,vm是用来装linux进行学习和开发的。对于不带GUI的linux来说,2核4线程都是杠杠的了。更吃紧的还是内存!如果是不带GUI的linux,建议2G起步,4G往上足够用。

需要注意的是,如果你和我一样,需要用vscode的remote-ssh功能连接linux进行代码编写,那最好是4G内存起步!(2G实测有点卡,1G根本没法用)