距离上次更新本文已经过去了 595 天,文章部分内容可能已经过时,请注意甄别

原出处: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 上的配置

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

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

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

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

image-20230706154733449

image-20230706154710269

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

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

9750h

image-20230706154645555

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

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

image-20230706154824878

三、配置论证参考

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

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

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

配置成功

配置失败

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

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

image-20230706160100381

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

bash
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 线程的系统!

bash
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 根本没法用)