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

上图分三层,他们分别是是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/

【虚拟化实战】VM设计之一vCPU相关推荐

  1. 【虚拟化实战】存储设计之七Block Size

    作者:范军 (Frank Fan)新浪微博:@frankfan7   微信:GetToCloud 在实战存储设计之六Latnecy我们介绍Latency过高的原因和一些建议.本文重点分析Block S ...

  2. 《软件测试技术实战:设计、工具及管理》目录—导读

    版权 软件测试技术实战:设计.工具及管理 • 著 顾 翔 组 编 51Testing软件测试网 责任编辑 张 涛 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 电子邮件 ...

  3. 视频教程-Hyper-V 2012 R2虚拟化实战-Windows

    Hyper-V 2012 R2虚拟化实战 13年的IT职业教育经验,10年的企业培训及项目经验.深得广大企业及学员喜爱.曾连续三年获得湖北省IT职业教育教学先进个人称号! 曾经授课企业:武汉电信.东风 ...

  4. 项目经理必读:虚拟化评估与设计14步

          有需要这个PPT的,请访问老方的BLOG下载页面:基于hyperV的微软虚拟化评估与设计14步 今天,企业部署服务器虚拟化可谓如火如荼,几乎每一位IT人员都或多或少的了解一些服务器虚拟化技 ...

  5. linux界面设计论文,毕业设计(论文)-基于linux的云校园桌面虚拟化系统的设计与实现.doc...

    毕业设计(论文)-基于linux的云校园桌面虚拟化系统的设计与实现.doc 还剩 67页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧, ...

  6. xen虚拟化实战系列(六)之xen虚拟机破解密码

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...

  7. 《软件测试技术实战:设计、工具及管理》—第2章 2.2节运用决策表设计测试用例...

    本节书摘来自异步社区<软件测试技术实战:设计.工具及管理>一书中的第2章,第2.2节运用决策表设计测试用例,作者顾翔,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  8. linux虚拟化毕业设计,毕业设计(论文)-基于Linux的云校园桌面虚拟化系统的设计与实现(68页)-原创力文档...

    毕业设计(论文) 题 目: 基于Linux的云校园桌面 虚拟化系统的设计与实现 学 生: 指导老师: 柯 院 别: 软件学院 专 业: 计算机科学与技术 班 级: 1301 学 号: 2015年5月 ...

  9. xen虚拟化实战系列(一)之xen虚拟化环境安装

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1284516 xen目前 ...

最新文章

  1. 云计算开发要学习哪些东西?云计算开发的内容
  2. 经典的”服务器最多65536个连接”误解
  3. 十分钟上线-基于函数计算开发 Restful web api asp.net core web app
  4. 写时拷贝(Copy On Write)方案详解
  5. Android Realm相关操作
  6. 在 GridView 控件中添加一列复选框51
  7. sh 脚本执行sql文件传参数
  8. 以“基”取胜:戴尔科技云平台 释放企业新动能
  9. vue部署到服务器_利用Gulp实现代码自动化部署
  10. 如何设置IntelliJ IDEA智能感知支持Jsp内置对象
  11. BAT 鼎立格局被打破,2019 年这些互联网公司是程序员跳槽首选!
  12. C++字符串拼接性能测试
  13. 计算机符串长度的函数,常用字符串长度计算函数
  14. 文档服务器 件排名,全国服务器排名
  15. 计算机建立局域网共享,局域网两台电脑如何建立共享文件夹
  16. c++ LintCode刷题记录之52. 下一个排列
  17. 使用 Python 和 Pygame 构建小行星游戏
  18. xiuno开发文档_大白 · TinyMCE编辑器v1.9_Xiuno Plugin_奇狐插件商店_奇狐网
  19. python不支持下标访问元素吗_Python 集合不支持使用下标访问其中的元素
  20. 【Quectel移远展锐平台5G模组RX500U/RG200U使用指南(三)-PCIE】

热门文章

  1. ASP.NET中绑定枚举类型
  2. 显示DataGrid序号的一个适用的方法
  3. Libevent调用
  4. 吴恩达老师深度学习视频课笔记:序列模型和注意力机制
  5. 深度学习中的卷积网络简介
  6. 男孩子学计算机和学医哪个好,你认为学医好还是读211大学的电子信息好?
  7. 电子合同的履行_什么是电子合同履行?怎么履行电子合同?
  8. Linux文件目录付空,Linux 文件系统
  9. python 协程和异步的关系_python协程与异步协程
  10. python获取当前进程id_Python进程,多进程,获取进程id,给子进程传递参数操作示例...