【虚拟化实战】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博客

上图分三层,他们分别是是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/
相关文章:

新手小白 python之路 Day1 (三级菜单功能实现)
直接上需求: 实现一个多级菜单 三级菜单的实现 可以依次选择进入各个子菜单 也可以返回上级菜单 所需知识 列表 字典 需求也比较简单,但实际上做起来还是遇到许多的问题,我这边主要用到的知识点大概就是 字典 等 大致的思路 我…

简要AT命令介绍
FUNCTIONSAT COMMANDSDETAILS厂家认证ATCGMI获得厂家的标识模式认证ATCGMM查询支持频段修订认证ATCGMR查询软件版本生产序号ATCGSN查询IMEI NO.TE设置ATCSCS选择支持网络查询IMSIATCIMI查询国际移动电话支持认证卡的认证ATCCID查询SIM卡的序列号功能列表ATGCAP查询可供使用的功…

CentOS 5.6下创建KVM虚拟机
【51CTO专家投稿】RedHat 的下一代旗舰产品RedHat Enterprise Linux 6只包含 KVM,这一点 RedHat 官方已经在很久以前、在不同场合都确认过。KVM 发展很快,稳定性有了很大提高,随着 RHEL 6 的正式到来,KVM 应用到生产环境的日子应该…

手把手教你如何制作可视化大屏!
在我们生活和工作中,经常会看到可视化大屏,主要用于展示一些汇总信息,那如何制作一个酷炫的可视化大屏呢?今天带大家看个github上的案例。项目地址:https://github.com/yyhsong/iDataV/tree/master/case09效果如下&…

ES5和ES6数组遍历方法详解
ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1、原始的for循环语句2、Array.prototype.forEach数组对象内置方法3、Array.prototype.map数组对象内置方法4、Array.prototype.filter数组对象内置方法5、Array.prototype.reduce数组对象内置方法6、Array.prototype…

短信猫GSM Modem
短信猫是用来收发短信的设备,和手机一样 插入SIM卡,通过(USB或串口)数据线/PCI插槽接到电脑上 在电脑上通过相关软件就可以实现短信收发的功能相关软件也就是收发短信的短信应用软件 可以自己开发,也可以要求短信猫设备…

数量级提升!深度学习让机器人抓取更高效
作者 | Jeffrey Ichnowski等译者 | 凌霄出品 | AI科技大本营(ID:rgznai100)摘要电子商务仓库中的拣选机器人需要快速计算各种配置之间有效且平稳的机器人手臂运动。最近的研究中是将抓取力分析与手臂运动规划结合,以计算最佳的手臂平滑运动&a…

phpcms_v9修改文章会提示 [hash]数据验证失败
收藏备用:phpcms\modules\content\templates\content_edit.tpl.phpaction"?mcontent&ccontent&aedit改成action"?mcontent&ccontent&aedit&pc_hash<?php echo $_SESSION[pc_hash];?>"转载于:https://blog.51cto.com/w…

横向ListView(一) ——开篇,基础逻辑实现
2019独角兽企业重金招聘Python工程师标准>>> 第一次写博文,写得不好的地方还望各位看客见谅 为了学习自定义软件开发,且定制出满足自己需求的控件(不需要将就地使用第三方源码),本人花了一周的时间开发了个…

HTTP Response中的Chunked编码
进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容。 Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部…

ORACLE RAC 更改instance name完整步骤
下面是更改的部分步骤,但是启动问题还是存在,求达人完整。单实例的数据库修改SID比较简单,只需要修改pfile相关参数,就可以挂载数据库。 RAC环境其实一样,只不过除了修改pfile,还需要修改 OCR信息。首先来看…

炸裂!微软重磅推出混合现实平台 Mesh、基于 Excel 的低代码语言 Power Fx,Ignite 2021 太精彩!...
作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)“一开始,这就是混合现实的梦想。” 在微软 Ignite 2021 大会上,微软 HoloLens 之父 Alex Kipman 头戴 HoloLens 2,出现在科技感十足的海底世界虚拟舞台上࿰…

Apache Spark 2.2.0 中文文档 翻译活动
为什么80%的码农都做不了架构师?>>> Spark 2.2.0 已然发布(2017-07-11 发布) 5 天了,更新了一些新套路吧! 此版本从 Structured Streaming(结构化流)中删除 experimental࿰…

Unity3D常用代码总结
1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"Im a Label"); //1 GUI.Box(Rect(1,21,100,20),"Im a Box"); //2 GUI.Button(Rect(1,41,100,20),"Im a Button"); //3 GUI.RepeatButton(Rect(1,61,120,20),"Im a RepeatButton&…

Python 搭建车道智能检测系统
作者 | 李秋键责编 | 寇雪芹出品 | AI科技大本营(ID:rgznai100)引言:本文将利用opencv实现对复杂场景下车道线的实时检测;所使用的图像处理方法主要是在读取图片的基础上,进行多种边缘检测,然后对不同的检测…

ASP.NET弹出窗口技术之增加网站流量方法
作为Microsoft的最新建立动态Web网站的工具,ASP.NET相对于ASP和JSP在改变原始的Web编程方式方面有了长足的长进。它的代码与页面分离技术(CodeBehind)以及完善的Web服务器控件为程序员提供了一个更加符合传统编程的Web服务器端开发方式。但Web编程还是有着与传统编程不相同的特…

检查是否支持 SO_REUSEPORT
为什么80%的码农都做不了架构师?>>> int reuse_port(int sockfd) {#ifndef SO_REUSEPORT#define SO_REUSEPORT (15)#endifconst int on 1;return setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)); } 转载于:https://my.oschina.n…

nginx的tmp文件过大导致磁盘空间不足一例
个人微博:http://weibo.com/h2fly欢迎技术交流现象:8月23之后,时不时收到服务器的/usrused > 90%的报警排查:1、du发现磁盘/usr使用不大,而报警使用的df》明显是有文件删除了空间没释放。注:du和df的实现机制不同&a…
10年Java老兵宝藏资料,吐血奉献!
2021都说工作不好找,也对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(1000道高频题),同时也整理一些图文解析及笔记,今天在这免费分享给大家,希望大家…

IOCP , kqueue , epoll ... 有多重要?
原文地址:http://blog.codingnow.com/2006/04/iocp_kqueue_epoll.html设计 mmo 服务器,我听过许多老生常谈,说起处理大量连接时, select 是多么低效。我们应该换用 iocp (windows), kqueue(freebsd), 或是 epoll(linux) 。的确&am…

[故障解决]图文:python启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失解决
python启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失解决 环境 Windows 7 SP1 x64python3.6.1报错 解决办法 1.下载VC redist(安装时读条卡在:正在处理:Windows7_MSU_x64)2.到C:\ProgramData\Package Cache\里面搜索࿰…

ASP.NET设计应用程序的七大绝招
随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需求&#…

Chromium之各国语言切换
在\src\build\Debug\locales\目录下存放着各国语言所需要的资源文件xx.pak,我这边共有53中语言支持。 命令行进入src\build\Debug目录,敲:chrome.exe --langzh-CN就能用中文简体,zh-CN可以根据需要换成各种语言版本。 Chrome的整个solution中,每种语言都会有个相应的…

程序员每天工作摸鱼俩小时,月薪35K?
职场上有很多奇奇怪怪的事。比如说有人爆肝996,工资却还养不活自己。有人每天工作摸鱼,但是却月薪数万。前端时间,小编在某职场社交平台上看到这么一则帖子#程序员摸鱼2小时月入35k#仔细看下,该员工每天的工作日常就是摸鱼的间隙工…

JAVA的get post 区别
1. get 是从服务器上获取数据,post 是向服务器传送数据。 get 请求返回 request - URI 所指出的任意信息。Post 请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送body的请求。使用Post请求时需要在报文首部 Content - Length 字段…

多些时间能少写些代码(转自酷壳 – CoolShell.cn)
我在我的微博上说过这样一段话,我想在这里把我的这个观点阐述地更完整一些。左耳朵耗子:聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30% – 50%的时间是在忙碌着编码,调试和测试。聪明的老板…

HTTP协议之Chunked解析
在网上找了好一会,始终没发现有解析Chunked编码的文章,那就自己写一个吧,呵呵。网上使用Chunked编码的网站似乎并不是很多,除了那些使用GZip压缩的网站,例:google.com,还有就是大部分打开GZip压…
关于深度学习编译器,这些知识你需要知道
作者 | 小O妹出品 | AI科技大本营(ID:rgznai100)神经网络编译器概览近年来,以机器学习、深度学习为核心的AI技术得到迅猛发展,深度神经网络在各行各业得到广泛应用: 1. CV(计算机视觉)…

checkbox点击切换选中状态
2019独角兽企业重金招聘Python工程师标准>>> function cboxChecked(ele) {$(ele).click(function () {var isChecked $(ele).attr(checked);if (!isChecked) {$(ele).attr(checked, true)} else {$(ele).attr(checked, false)}})} 转载于:https://my.oschina.net/u…

提升Hadoop计算能力的并行框架
集算器是新型并行计算框架,它支持读写HDFS中的文件,可以通过并行框架将计算任务分担到多个节点中。它专注于加强Hadoop的计算能力,从而实现计算性能和开发效率更高的大数据应用。更强的计算能力。Hadoop所使用的计算语言为JAVA,JA…