【虚拟化实战】VM设计之一vCPU

简介:

作者:范军 (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博客

112827362.png

上图分三层,他们分别是是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我们会另文阐述.

二实例:

我们来假设一个主机有2个socket,每个socket有4个core。主频2.4G MHZ 那么一共可用的资源是

2*4*2.4G= 19.2G MHZ

假设主机上运行了三个VM,VM1和VM2设置为1socket*1core,VM3设置为1socket*2core。那么VM1和VM2分别有1个vCPU,而VM3有2个vCPU。假设其他设置为缺省设置。

那么三个VM获得该主机CPU资源分配如下:

VM1:25%; VM2:25%; VM3:50%

假设运行在VM3上的应用支持多线程,那么该应用可以充分利用到所非配的CPU资源。2vCPU的设置是合适的。

假设运行在VM3上的应用不支持多线程,该应用根本无法同时使用利用2个vCPU. 与此同时,VMkernal层的CPU Scheduler必须等待物理层中两个空闲的pCPU,才开始资源调配来满足2个vCPU的需要。在仅有2vCPU的情况下,对该VM的性能不会有太大负面影响。但如果分配4vCPU或者更多,这种资源调度上的负担有可能会对该VM上运行的应用有很大负面影响。

三 vCPU Sizing 步骤:

以下内容参考了david Davis的文章。假如我们要创建一个VM,以下几步可以帮助确定合适的vCPU数目

1 了解应用并设置初始值

该应用是否是关键应用,是否有Service Level Agreement.

一定要对运行在虚拟机上的应用是否支持多线程深入了解。咨询应用的提供商是否支持多线程和SMP(Symmetricmulti-processing)。

参考该应用在物理服务器上运行时所需要的CPU个数。如果没有参照信息,可设置1vCPU作为初始值,然后密切观测资源使用情况。

2 观测资源使用情况

确定一个时间段,观测该虚拟机的资源使用情况。时间段取决于应用的特点和要求,可以是数天,甚至数周。不仅观测该VM的CPU使用率,而且观测在操作系统内该应用对CPU的占用率。

特别要区分CPU使用率平均值和CPU使用率峰值。

假如分配有4个vCPU,可是运行在该VM上的应用的CPU使用峰值是25%, 也就是仅仅能最多使用25%的全部CPU资源,说明该应用是单线程的,仅能够使用一个vCPU (4 * 25% = 1 )。

如果平均值小于38%,而峰值小于45%,考虑减少vCPU数目

如果平均值大于75%,而峰值大于90%,考虑增加vCPU数目

3 更改vCPU数目并观测结果

每次的改动尽量少,如果可能需要4vCPU,先设置2vCPU在观测性能是否可以接受。


参考:

http://frankdenneman.nl/2013/09/18/vcpu-configuration-performance-impact-between-virtual-sockets-and-virtual-cores/

http://datacenterpost.com/2012/03/vcpu-sizing-considerations.html

http://www.vmware.com/files/pdf/techpaper/VMware-vSphere-CPU-Sched-Perf.pdf

http://vpivot.com/2010/04/30/how-many-virtual-cpus-per-vm/















本文转自frankfan751CTO博客,原文链接:http://blog.51cto.com/frankfan/1316663 ,如需转载请自行联系原作者


相关文章
|
虚拟化 KVM Linux
带你读《KVM实战:原理、进阶与性能调优》之一:虚拟化简介
本书兼具实战性、系统性又不乏深度的KVM虚拟化技术指南,既能让新人快速掌握KVM的基础知识,又能满足有经验的读者进阶学习的需求。本书两位作者来自于阿里云和Intel,在云计算和KVM方面有深入的研究,他们将自己的经验倾囊相授,带你全面了解KVM的各种技术细节。
|
Linux 虚拟化
top中的st含义—虚拟化底层从你的vm里偷了多少资源
linux在top中打印中有st显示项,这一显示项单位为百分比,它的值表明你的系统花了百分之多少等待得到真正的cpu资源。 在正常情况下在云平台下st最好为0,这表明你的vm得到了所有必要的cpu资源。
4125 0
|
容器 Linux 虚拟化
带你读《Linux实战》之二:Linux虚拟化:构建Linux工作环境
你正在期望学习管理Linux计算机吗?这是一个很好的选择。虽然Linux常常驻留于消费者的桌面计算机上,但它同时也是服务器领域的绝对主宰,特别是虚拟服务器和云服务器。如果你打算管理当前引人关注的服务器和网络体系架构,你将不得不围绕Linux的命令行展开学习。除了第1章之外,本书的每一章都包括一个或两个实际项目。鉴于第1章的内容主要用来填补你的Linux知识体系中可能存在的基础知识空白,因此其组织形式与其他章节有所不同。