作者:范军 (Frank Fan) 新浪微博:@frankfan7
虚拟机需要多少个vCPU呢?是不是个数越多性能越好呢?这方面存在着很多误区。给VM配置CPU资源的时候,要精打细算才能最大可能的利用已有资源,来满足商业应用的需要。有的情况下为某个VM设置过多vCPU数目,反而会造成该应能的性能下降。也造成整个系统的资源浪费。
本文从概念到实战来阐述如何做好虚拟机上CPU资源规划。
一概念:
首先我们明确一些概念。
Socket
A CPU socket or a CPUpackage refers to a physical unit of CPU which is plugged into a system board.For example, a 4-way system or a 4-socket system can contain up to four CPUpackages
Core
A CPU socket or a CPUpackage refers to a physical unit of CPU which is plugged into a system board.For example, a 4-way system or a 4-socket system can contain up to four CPUpackages
Logical processor:
Hyperthreadingtechnology allows a single physical processor core to behave like two logical processors.The processor can run two independent applications at the same time. Aprocessor core may have multiple logical processors that share computeresources of the core
pCPU
A pCPU denotes aphysical CPU, referring to a logical processor on a system with Hyper-Threading(HT) enabled; otherwise, it refers to a processor core.
Virtual Socket和VirtualCore
在配置VM时设置。运行在VM上的操作系统读取该设置。
vCPU
The virtual machine vCPUconfiguration is the sum of number of cores x number of sockets.
比如以一个VM有2个Virtual Socket为例,每个virtual socket都有2个Virtual Core。那么这个VM一共可用的vCPU个数 = number of cores x number of sockets = 2 *2 =4
VM可以设置的vCPU个数,不能超过ESXi主机上Logical CPU的实际个数
下图揭示了上面一些术语之间的关系。该图摘自frank denneman博客
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Servers/virtualization/
上图分三层,他们分别是是VM层,VMKernel层和物理层。对于物理服务器而言,所有的CPU资源都分配给单独的操作系统和上面运行的应用。应用将请求先发送给操作系统,然后操作系统调度物理的CPU资源。
在虚拟化平台中,在VM层和物理层之间加入了VMkernel层,从而允许所有的VM共享物理层的资源。VM上的应用将请求发送给VM上的操作系统,然后操纵系统调度Virtual CPU资源(操作系统认为Virtual CPU和物理 CPU是一样的),然后VMkernel层对多个物理CPU Core进行资源调度,从而满足Virtual CPU的需要。在虚拟化平台中OS CPU Scheduler和Hyperviisor CPU Scheduler都在各自的领域内进行资源调度。
关于NUMA我们会另文阐述.