什么是vCPU?
vCPU,顾名思义,是虚拟CPU。 vCPU是虚拟机的部件,创建虚拟机时,需要配置vCPU资源。因此脱离VM,谈论vCPU是没有意义的。
vCPU是如何调用的?
虚拟化管理系统按照时间片轮转方式进行资源调度,当系统内的VM所需要的vCPU核大于物理CPU核数时,虚拟化管理系统首先按照时间片轮流调度一遍,然后如果还有剩余的CPU资源,则给所需要的vCPU。例如系统配置了40个vCPU,只有20个物理核。那么平均每个vCPU获取一个物理核50%的资源。由于有些VM忙,有些VM空闲,虚拟化系统会在一个调度周期内,划分出若干时间片,轮流给每个vCPU使用。忙的vCPU可以占用整个时间片,而闲的vCPU占用部分时间片,会提前释放资源。这样在一个调度周期内,对每个vCPU都调度一遍后还有空闲的时间,调度器会用这剩余的资源去调度忙的vCPU。 这样做的目的是兼顾公平和效率。这中调度算法举个例子:系统有1个CPU 2.0 Ghz,两个VM,分配1个vCPU。如果VM1 和 VM2都忙,那么各自相当于拥有一个1.0 Ghz的CPU。如果VM1很忙,VM1只需要 500Mhz的处理能力,那么在VM1看来,相当于暂时获得了 1.5Ghz的处理器。
举个更形象的例子:有一座庙(一个物理机),庙里有一些和尚(VM),每顿饭只做20碗饭(20个物理核),有的和尚吃两碗饭 (2vCPU),有的和尚吃四碗饭(4vCPU)。如果这些和尚吃的总饭量,不超过20碗,按需分配,多出的饭,剩下。如果和尚的总需求超出了庙里的总饭量,怎么办?那就把一碗饭分成若干份,均分到和尚的碗里(vCPU)。更进一步的需求是:和尚又有不同的等级(CPU权重),均分资源方式就改进成了按照等级分庙里的几碗饭,主持可以分多一点,小和尚少一点。另外,有的和尚有特殊需求,只能从庙里的某几个碗中分饭吃(CPU 绑定CPU pin)。
上述的一些分配方法都有一个缺点,就是和尚究竟能吃多少饭,是不确定的。取决于庙里有多少和尚、庙里有多少碗饭,以及碗的大小。 所以VMware改进了一下,干脆就定义了一个和尚吃几碗,每碗饭量多少克。 这样和尚无论到那个庙(与虚拟化环境无关),都保证能吃饱。 不过庙的管理就麻烦一些了,米饭不够时,可能就不能招收新的和尚了(CPU资源不足,就无法创建VM了)
vCPU是不是越多越好?
虚拟机需要多少个vCPU呢?是不是个数越多性能越好呢?
这方面存在着很多误区。给VM配置CPU资源的时候,要精打细算才能最大可能的利用已有资源,来满足商业应用的需要。虚拟机性能取决于配置的合理性—确保虚拟机获得足够多的时钟周期、内存空间以及IO带宽。当配置错误或者计算需求增加导致虚拟机出现资源紧张状况时,虚拟机性能及稳定性可能会受影响
有的情况下为某个VM设置过多vCPU数目,反而会造成该应能的性能下降。也造成整个系统的资源浪费。
如何合理分配vCPU资源?
了解了vCPU在虚拟化平台里的运行原理后,我们知道vCPU的分配并不是越多越好,分少了,VM性能不够;分多了,也可能造成vm性能下降,那么如何正确的分配vCPU呢?
手工的办法是:
根据应用的情况先大致分一定数量的vCPU,然后根据实际情况调节vCPU个数。比如说我们先给VM分4vCPU,如果CPU使用率一直比较高,可成倍增加到8vCPU或16vCPU,这个主要是看应用强度。
如果ESXi只跑一个VM,原则是vCPU的个数不要多于物理CPU总个数。虚拟化vCPU还有一个原则就是够用就好,只要CPU资源够就可以了,不要对资源进行过度分配。
