随着虚拟化的普及,越来越多的服务器通过hypervisor被整合到了一起,解决了传统服务器CPU利用率常年不到15%的痛点。VM官方的建议是将CPU按照1:10的比例进行整合,整合后每一个虚拟机的VCPU该如何选择,是单socket多core,还是多socket单core;性能怎么样,依据什么判断。本章就针对上述问题进行阐述。

1.CPU的设置选择,是单socket多core,还是多socket多core?

在设置CPU的前,需要说一下PCPU、VCPU和LCPU的概念:

:物理机的CPU插槽数。

:物理机上实际的CPU,通常我们所说的core。

:分配给虚拟机的CPU。

:PCPU在实际执行时所需要用到的逻辑CPU。每一个VCPU最终都会反映到PCPU上,而每一个PCPU在执行时,都需要找到一个空闲的LCPU,在不开启超线程的情况下,每一个物理CPU(core)只有一个LCPU。

当我们在创建一个虚拟机的时候,会让我们选择如何设置该虚拟机的CPU,如图所示:

esxi怎么看挂载的硬盘型号 esxi查看内存和插槽_esxi怎么看挂载的硬盘型号

对上图中做提到的几个概念做下解释:

:全称last-levelcache,他仅局限VCPU的概念里。以单socket多core为例,当下一次VCPU需要PCPU的资源时会直接去LLC里面调用,减少了调度的时间。

:non-uniformmemory access多CPU的服务器,尤其是多核,会在CPU通过一个内存总线同时访问相同的内存空间面临瓶颈,虽然CPU可以使用缓存将内存中的指令存放到缓存中,但是由于缓存的价格昂贵,非常小,很容易被占满。启用Numa的服务器会将CPU分成多个可以访问本地化内存模块的节点。Esxi5.5支持16个节点的Numa,Esxi6.0支持32个节点的Numa。

:vsphere可以使用启用了Numa的系统,还有一个专门的Numa CPU调用程序来管理。每个虚拟机都有一个home节点,从Home节点获取内存。Numa调度程序根据每个VM的CPU和内存使用需求,每2S动态平衡一次home节点的分配。相对于没有启用Numa的系统,如果一个home节点内的内存满足需求,CPU不需要跨home节点获取内存,减少了跨节点带来的延时。

esxi怎么看挂载的硬盘型号 esxi查看内存和插槽_数据库_02

抛开业务类型导向,单针对LLC,vNuma和超线程来说,推荐单socket多core。考虑到承载业务种类的不同,依据经验分布式业务、数据库业务推荐多socket单core,而wbe类型的业务推荐单socket多core。

2.CPU在vSphere中的运行流程

在讲述前,我们需要知道CPU在vSphere中的几种存在形式。CPU在vSphere中共有4种存在形式,分别为run、wait、costop、ready,其运行过程如下图所示:

esxi怎么看挂载的硬盘型号 esxi查看内存和插槽_esxi怎么看挂载的硬盘型号_03

:虚拟CPU等待物理CPU的调度,在esxtop下表示为%rdy。

:不用多说,CPU正常运行,在esxtop下表示为%run。

:当虚拟机不需要进行CPU调度的状态,最常见的表现形式为虚拟机的挂起,在esxtop下表示为%wait。

:虚拟机vcpu的彼此等待,比如我们给虚拟机分配了4个vcpu,此时空闲的vCPU数量小于4而进行的彼此等待,在esxtop下表示为%cstp。

由上图我们知道,当开启一个新的虚拟机时,如果它能够找道空闲的LCPU就会直接进入run的状态,否则会进入ready状态直至它找道空闲的LCPU。所有的状态都可以由ready状态进入到run状态,由此我们知道,ready状态的值,是衡量CPU性能的一个重要参考。在client端和esxtop下能够查看CPU的ready值,由于单位不同,所以得到的值也不同,以一台名为BDC的虚拟机为例,如图所示:

esxi怎么看挂载的硬盘型号 esxi查看内存和插槽_服务器_04

Client端ready值(以毫秒为单位)

esxi怎么看挂载的硬盘型号 esxi查看内存和插槽_服务器_05

Esxtop命令下的ready值(以百分比为单位)

由上图得知,同一虚拟机在client端得到的ready值为119ms,在esxtop下是0.59%,细心的人会发现在client端是以每20s为周期显示,由此我们得出:119÷20000=0.00595≈0.59%。

通常情况ready的值小于1000ms即5%的时候,我们会认为虚拟机的CPU处在一个正常的状态,当他的值大于1000ms时,我们就要适当做出调整了,所以说,虚拟机的VCPU并不是越多越好。

http://blog.51cto.com/arkling/1741269