Mac 中 VMware 虚拟机中涉及的CPU数量 & 内核数量 & 线程数 & 资源分配问题

Posted Ziming.G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac 中 VMware 虚拟机中涉及的CPU数量 & 内核数量 & 线程数 & 资源分配问题相关的知识,希望对你有一定的参考价值。

文章目录

Intro:
今天想在 VMware 上装18.04.5和14.04.6两个版本的 Ubuntu 系统,因为课题用到的某些软件只会兼容特定版本的系统。在安装第二个系统的时候意识到处理器内核的分配问题,考虑应该怎样给这两个系统分配资源,于是自行补习了一些这方面的内容,the following writing will clarify this.

CPU 频率

CPU 主频就是 CPU 运算时的工作频率,单核情况下 CPU 主频是决定 CPU 性能的重要指标。说到CPU主频,就不得不提外频和倍频的概念,它们的关系是:主频=外频×倍频。


CPU & 物理核心 & 逻辑核心

  • CPU 数:独立的中央处理单元的数量,体现在主板上就是有多少个CPU槽位
  • CPU core(物理核心):在每一个CPU上,都可能有多核(core),每个核中都有独立的ALU,FPU,Cache等组件,可以理解为CPU的物理核心数,也就是我们常说4核8线程中的核
  • Processor(逻辑核心):每一个物理核心可以模拟出多个逻辑核心,"超线程"技术就是通过采用特殊的指令,把逻辑内核模拟为物理超线程,这样的核就是processor,是一个处理数据的通道,流水线。可以理解为逻辑核心,比如我们常说的4核8线程中的线程。

前文提到,虽然提高频率能有效提高CPU性能,但收到制作工艺及技术的限制,早在2004年提高频率就遇到了瓶颈,于是Intel/AMD开创了双核 & 多核(core 物理核心)CPU。其实增加核心的数目就是为了增加线程数(processor 逻辑核心),因为操作系统是通过线程来执行任务的,一般情况下它们是1:1对应关系,即单核 CPU 拥有单一线程,四核 CPU 拥有四个线程。

随着科技的发展,我们发现每个内核的性能也变的十分强大,于是Intel引入了超线程技术,即一个内核又被分成两个线程,使核心数与线程数形成1:2的关系,如四核Core i7支持八线程(或叫作八个逻辑核心),大幅提升了其多任务、多线程性能。

  • CPU 个数是在物理层面上安装了几个 CPU,一般的个人电脑是安装了1个 CPU
  • CPU 内核数是指物理层面上,一个 CPU 芯片上集成了几个内核单元,现代 CPU 都是多核的,比如一个CPU上集成了6个内核单元,这个CPU就是6核CPU
  • CPU 线程数是指逻辑层面上的处理单元数,这个技术是Intel的超线程技术,它让操作系统识别到有多个处理单元。即一个内核单元又可以分成两个线程,这样上面提到的6核CPU就可以“假装成”12核,此处的12就是逻辑核心数,6就是物理核心数。
  • 对于一个6核具有超线程技术的CPU:CPU数:物理核心数:逻辑核心数 = 1:6:12

tips:
在 Mac OS 的 terminal 中:

  • 显示物理核心数(CPU数)sysctl hw.physicalcpu
  • 显示逻辑核心数(线程数)sysctl hw.logicalcpu
  • 查看 CPU 型号sysctl machdep.cpu.brand_string
  • 查看 CPU 多少核sysctl -n machdep.cpu.core_count

在自己的 Mac 上执行了以上命令,结果为 MacBook Pro 16-inch: 物理核心数6 逻辑核心数12,实际上也确实是


进程 & 线程

  • 进程:是CPU调度和分配的基本单位 / 系统分配资源的最小单元
  • 线程:是操作系统进行资源分配的基本单位 / 系统分配内核的最小单元,可以实现在CPU上的并行 & 并发,即多个线程可以分配给一个计算机内核,也可以分配给多个计算机内核。
  • 二者关系:

打开一个app,例如微信,浏览器,都是一个进程。一个进程中可能有多个子任务,比如微信接受信息,发送信息,这些子任务就是线程。进程之间无法共享资源和进行通信,但是线程之间可以通信,共享进程的资源。开启一个进程,即打开一个软件,消耗的资源会很多,但是线程相较进程就会节省很多资源。

线程是进程的一部分,但并不是说所有的进程都要包含线程,有线程的进程称之为多线程进程;没有线程的进程成为单进程进程。两个计算机内核在同一时刻运行着的两个进程,我们才说这两个任务是并行的。如果同一个计算机内核被分配了两个进程,那这两个进程一定是并发的。

线程的分配是由操作系统说了算,因此我们会看到这种情况:一个进程是由多个计算机内核来完成的,因为这个进程里面的不同线程是由不同的计算机内核完成的。多线程之间各自执行,互不影响,他们之间也会形成并发 & 并行。所以并不是一个进程只分配给一个内核,不一定的。但是,如果这个进程只有单任务,那至多只会分配一个内核。

线程就相当于是使用进程的资源。好比是在计划经济时代,每一户的资源是有限的,发下来之后,自己家里内部怎么分配,那就是自己家的事了。资源的分配是以进程为单位的,所以线程的执行状态,我们不太好获取。

划重点:进程包含线程,线程共享进程资源。

  • 线程之间的切换
    1)分时:将时间平均分配,各个线程之间轮流使用
    2)抢占:优先级高的线程抢到资源的概率大

  • 线程开销
    1)上下文切换的过程中,需要保存当前线程的执行环境,并恢复要执行线程的环境
    2)线程创建和消亡的开销
    3)线程需要保存维持线程本地栈,会消耗内存
    4)当线程多到一定的程度时,就会拖慢系统性能,因为多线程的切换需要资源。所以在线程数应该在性能瓶颈的 90% 。


计算密集型 & IO密集型

  • 计算密集型任务
    此类任务的程序主要是复杂的逻辑判断和复杂的运算,比如我们常见的机器学习之类的。这个过程 CPU 利用里高,不应开太多的线程。因为线程太多会因为线程的上下文切换浪费资源。计算密集型的任务同时进行的数量应当等于CPU的核心数,processor数,虚拟内核也算。

  • IO密集型
    此类任务的程序主要是进行IO操作,比如磁盘IO和网络IO。因为IO操作会阻塞线程,CPU大量的时间在等待IO操作的完成,因此CPU的利用率不高,可以多开线程,当IO阻塞时就切换到其他就绪的线程,提高CPU的利用率。如果磁盘 IO 的性能超过了总线的能力,此时的瓶颈就是 IO 而不再是 CPU ,线程开的多也没有意义。因为总线被打满了,数据过不来。


CPU的虚拟化技术(Virtualization Technolegy)

单 CPU 模拟多 CPU ,并允许一个平台同时运行多个操作系统,而应用程序都可以在互相独立的空间内运行而互不影响,从而提高工作效率。虚拟机的内存是临时分配的,对于着部分内存,在虚拟机关机后着部分占用的内存就还给真机了(还给了Mac)。


Mac 中 VMware 设置里的处理器内核数

对于 VMware 的设置中所显示的处理器内核数,其实是 Mac 中的线程数(逻辑核心数)。

以自己的电脑为例,1个CPU,6核,每个核2个线程(逻辑核心),1x6x2=12线程数(逻辑核心数)。这也刚好解释了处理器内核数选项中,最多可以选择12个处理器内核。

关于以上这一部分内容的详细推导,以及在Windows系统中 VMware 所涉及到的处理器内核的分配问题,推荐大家看下这篇文章,其中也包含了一定的验证 in detail.

tips:
在 Linux 中对处理器内核等数据的查看命令:

  • 查看不同physical id的数量,直接输出CPU数量 cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
  • 查看不同core id的数量,直接输出CPU物理核数 (注:输出的是一个CPU的物理核数)cat /proc/cpuinfo | grep "core id" | sort -u | wc -l
  • 查看不同 processor 的数量,直接输出CPU逻辑核数总数(注:输出的是本服务器所有CPU的逻辑核的总数)cat /proc/cpuinfo | grep "processor" | sort -u | wc -l

在我的电脑上,我在 VMware 中选择的处理器内核数为4,即4个逻辑核心/4个线程,因此在 Linux 下执行命令查看CPU的处理器内核的配置,结果如下:

localhost@ubuntu:~$ cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
4
localhost@ubuntu:~$ cat /proc/cpuinfo | grep "core id" | sort -u | wc -l
1
localhost@ubuntu:~$ cat /proc/cpuinfo | grep "processor" | sort -u | wc -l
4

tips again:
同一台电脑不可以同时安装两个虚拟机软件,但是可以在同一个虚拟机软件中开启两个虚拟机(同时跑 Ubuntu 18.04.5和Ubuntu 14.04.6)。不能在虚拟机中再安装虚拟机软件。

参考文章如下,表示感谢!
文章1
文章2
文章3
文章4

以上是关于Mac 中 VMware 虚拟机中涉及的CPU数量 & 内核数量 & 线程数 & 资源分配问题的主要内容,如果未能解决你的问题,请参考以下文章

VMware虚拟机中涉及的3种常见网络模式

怎样将vmware虚拟机中的系统转移到物理机硬盘?虚拟机中为mac os

虚拟机中的Mac OS分辨率无法设置,求解

Container中运行Windows虚拟机

vmware上装mac oxs遇到了问题cpu被禁用了

虚拟机中如何把mac系统版本改成10.5