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

1.CPU的设置选择,是单socketcore,还是多socketcore

在设置CPU的前,需要说一下PCPUVCPULCPU的概念:

    Socket:物理机的CPU插槽数。

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

    VCPU:分配给虚拟机的CPU

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

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

wKiom1a0jVfx07FFAAEfV1e4vFs302.png

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

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

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

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

wKiom1a0jWCx2hRYAAGyhJfbvJU323.png

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

2.CPUvSphere中的运行流程

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

wKioL1a0jbWSl9BYAAFJ5pwAR7Y795.png

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

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

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

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

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

wKioL1a0jbag6AvbAACw94z8BHY838.png

Clientready值(以毫秒为单位)

wKioL1a0jbeiVtTIAAEGoNzL6MQ746.png

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

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

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