首页 > 其他分享 >如何分配虚拟机CPU拓扑会得到较好的性能?

如何分配虚拟机CPU拓扑会得到较好的性能?

时间:2024-06-23 16:58:42浏览次数:18  
标签:core socket 拓扑 CPU 虚拟 虚拟机

对于物理机来说,CPU有socket、Core、thread的概念,一个linux虚拟机上面同样有这些信息,这些信息是什么含义,和物理机之间有多少对应关系呢?如何分配CPU拓扑,会得到较好的性能?

物理CPU

首先介绍一下物理CPU的概念:

一个服务器可以有多个socket

一个socket(插槽)可以插一个chip。

一个chip里面可以有N个core(核)

一个核里面可以有1个CPU线程,如果开启超线程, CPU线程=核*2

【超线程技术允许单个物理处理器内核像两个逻辑处理器一样工作。处理器可以同时运行两个独立的应用程序。为了避免将逻辑处理器和物理处理器混淆,Intel 将物理处理器称为插槽,超线程性能改进情况与应用程序有很大关系,有些应用程序使用超线程可能会出现性能下降的情况,因为两个逻辑处理器之间会共享许多处理器资源(例如缓存)】

下面是一个物理机的CPU信息

上面这些信息是x86 CPU。如果是Power的CPU,超线程可以一个核超出来2个、4个、8个(根据机器型号)。同时,还有一个drawer(抽屉)的概念。一个抽屉里面有N个socket,一个服务器可以有多个抽屉。

虚拟机的CPU

对于虚拟机来说,操作系统看到的CPU信息都是虚拟的,但操作系统认为他们是物理的。

查看虚拟机CPU的方法和物理机没什么区别,一般用lscpu或者cat /proc/cpuinfo来查看

拿一台虚拟的linux举例

图片

这个是linux操作系统看到的CPU信息,linux操作系统并不知道自己跑在一个虚拟机上,虽然看到的CPU都是虚拟的,但linux认为这些都是真的,因此在进程调度上,也会按照这个信息去调度。

CPU(s): 8   :一共8个逻辑CPU,即8个vCPU

Thread(s) per core: 1:每个核有几个线程,分配虚拟机的时候,拓扑默认就是1

Core(s) per socket: 1:每个插槽(一个插槽可以插一个cpu chip)里面有几个核,分配虚拟机的时候,拓扑默认就是1

Socket(s): 8:有几个插槽(一个插槽可以插一个cpu chip)

这一段的信息是,该虚拟机一共有8个chip,每个chip里有1个核,每个核里有1个thread。这样就是8*1*1=8个thread,即8个逻辑CPU,即8个vCPU。

注:这里的socket、core都是虚的。

接下来,看cpuinfo里面的信息(和lscpu是一致的)

图片

processor: 0  :虚拟CPU(vCPU)的ID,OS以为这是物理的,其实是虚拟的。这里的processor不是虚拟核,而是虚拟CPU线程。因为如果如果分配虚拟机的时候,虚拟核开启超线程(2),那么虚拟CPU线程=虚拟核*2

physical id: 0 :这个是虚拟socket(chip)的ID。在本例中,给虚拟机分配了8个sockets,那么physical id会有8个,分别是0-7.

siblings: 1 :一个虚拟socket上有多少虚拟CPU线程。如果=1,那么只有1个thread(processor)。说明这个socket上只有一个core,这个core里只有一个thread(processor)。

core id: 0 :这是虚拟core的id号,每个虚拟core可以有1个虚拟thread(processor),如果分配虚拟机的时候,虚拟核开启超线程(2),那么每个虚拟core可以有2个虚拟thread(processor)

cpu cores: 虚拟core的数量

收集全部cpuinfo的信息如下

图片

CPU拓扑

即分配多少逻辑CPU,这些逻辑CPU是如何通过socket、core、超线程组合出来的。

分配虚拟机时,需要指定多少socket(插槽)、每个插槽有多少core,core有没有超线程。

不同的拓扑

同样是分配8个逻辑CPU,也可以采用其他的拓扑。

本例中,分配的方式我们再回顾一下

CPU(s):              8

Thread(s) per core:    1

Core(s) per socket:    1

Socket(s):            8

分配8个vCPU:该虚拟机一共有8个chip,每个chip里有1个核,每个核里有1个thread。这样就是8*1*1=8个thread,即8个vCPU。

换成拓扑B:

CPU(s):                      8

Thread(s) per core:    2

Core(s) per socket:    4

Socket(s):                   1

Cpuinfo对应的信息如下

图片

换成拓扑C:

CPU(s):                      8

Thread(s) per core:    1

Core(s) per socket:    8

Socket(s):                   1

拓扑的排列组合还可以有很多其他方式。

不同的拓扑是否性能不同?

首先操作系统会看这个拓扑,在进程调度时为了保持亲和性,会优先把同一个进程调度到同一个core上,如果不能调度到同一个core,则尽量调度到同一个socket上。

虚拟化平台,也许也会倾向于把同一个虚拟core、虚拟socket调度到同一个物理core、物理socket上。至于具体到某个虚拟化平台(VMware、KVM、Hyper-V、Citrix)是怎么调度的,肯定是各有各的算法。

因此,如果想收获比较好的虚拟机性能表现,把虚拟机的CPU拓扑设置为和物理机一致,这样在亲和性保持上比较有利。如果不一致,就不利。

举一个不一致的例子。

物理机拓扑:2个sockets、每个socket有4个cores,每个core有一个thread。

虚拟机拓扑:1个sockets、每个socket有8个cores,每个core有一个thread。

在OS进程调度时,如果同一个进程不能调度到同一个虚拟core(名叫A)上,它会调度到同一个socket上其他core,OS一看拓扑,大家都在同一个socket,于是就随便调度到一个core(名叫F)。

而在物理机层面,这个8个虚拟core不可能调度到同一个socket(假设叫1)上,因为一个socket只有4个cores。结果,core(F)就被调度到Socket(名叫2)上了。

于是上下文切换的代价就明显增高。

参考原文:如何分配虚拟机CPU拓扑会得到较好的性能?

标签:core,socket,拓扑,CPU,虚拟,虚拟机
From: https://blog.csdn.net/2301_79208779/article/details/139902429

相关文章

  • CrossOver 24 for Mac(windows 虚拟机)
    CrossOverforMac是一款功能强大的虚拟机软件,允许在Mac系统上运行Windows应用程序而无需重新启动计算机。通过CrossOver,用户可以轻松地运行Windows软件和游戏,而无需购买Windows许可证或使用虚拟机。CrossOver通过直接在Mac系统上提供所需的Windows资源,实现了无缝的跨平台兼容......
  • Parallels Desktop 19 for Mac(PD19虚拟机)
    ParallelsDesktop19是一款功能强大的虚拟机软件,它可以在Mac电脑上运行Windows操作系统和其他各种操作系统。ParallelsDesktop19提供了一系列强大的工具和功能,以增强虚拟机的功能。例如,它支持剪切板共享、共享网络连接、虚拟机快照、自动备份等功能。ParallelsDesktop19......
  • 手把手教你java CPU飙升300%如何优化
    背景今天有个项目运行一段时间后,cpu老是不堪负载。排查top命令TOP命令topt按cpu排序topm按内存使用率排序从上面看很快看出是pid4338这个进程资源消耗很高。top-Hppidtop-Hp4338找到对应线程消耗的资源shft+pcpu占用进行排序,shift+m按照内存排......
  • anaconda安装①tensorflow-cpu 1.12.0py3.6②tensorflow-gpu 2.4.0③pytorch 2.4.1 通
    本机环境:Win10、rtx4060tianaconda常用命令condaenvlist#查看已有环境名称condaenvlistcondaactivateenv_name #激活环境condaactivateenv_namecondadeactivateenv_name#退出环境condadeactivateenv_namecondacreate-nenv_namepython=3.x#创建p......
  • python3使用pyVmomi获取vCenter中虚拟机cpu/内存信息
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]说明文章分享在Linux操作系统中安装python3环境,并通过pyVmomi获取vCenter中运行的虚拟机信息,最后把获取的虚拟机数据存储到数据库中。前三章为基础环境构建,第四章为脚本代码。环境软......
  • VM Ware虚拟机设置静态IP(NAT模式)
    设置VMWare虚拟机静态IP解决步骤1.确保VMWare相关服务正常启用“此电脑”-->右击“管理”,在服务中看VMWare的相关服务是否已经开启,确保已开启。2.设置VMWare虚拟网络编辑器在VMWare顶部菜单栏-->“编辑”-->“虚拟网络编辑器”3.编辑虚拟机设置4.修改虚......
  • Windows Server 2022 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2022OVF,updatedJun2024(sysin)-VMware虚拟机模板2024年6月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2022-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • Windows Server 2019 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2019OVF,updatedJun2024(sysin)-VMware虚拟机模板2024年6月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2019-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWindo......
  • Windows Server 2008 R2 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2008R2OVF,updatedJun2024(sysin)-VMware虚拟机模板WindowsServer2008R2简体中文版OVF,2024年6月更新请访问原文链接:https://sysin.org/blog/windows-server-2008-r2-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWindowsSe......
  • Windows Server 2016 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedJun2024(sysin)-VMware虚拟机模板2024年6月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......