完整版HyperV虚拟CPU分配探讨文档格式.docx
- 文档编号:17891404
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:10
- 大小:414.91KB
完整版HyperV虚拟CPU分配探讨文档格式.docx
《完整版HyperV虚拟CPU分配探讨文档格式.docx》由会员分享,可在线阅读,更多相关《完整版HyperV虚拟CPU分配探讨文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
1?
我的虚拟化CPU分配比达到4:
1,会不会引起CPU资源过载?
我只给虚机分配了物理核数一半的虚拟CPU,但是CPU时间一直在70%左右,而另外一台
物理机上的虚拟CPU分配达到3:
1,但是CPU使用率也才30%左右,这怎么回事?
我们在规划Hyper-V或者其他虚拟化资源的时候,十有八九会为诸如此类的问题抓耳饶腮。
虚拟化和云计算的目标之一是能将计算资源池化,动态为虚机分配CPU资源和其他资源,
当一台物理机上运行多个虚机实例时,这种动态使用CPU的效果就更加明显了。
在虚拟化世界里,虚机CPU该如何分配一直是个没有标准答案的问题。
今天这篇文章我们
将回归本质去了解Hyper-V虚拟化平台如何分配CPU,希望大家对Hyper-VCPU资源规划原则和方法有个初步的认识。
在开始之前,我们先了解CPU是如何处理任务(也即进程),先回看单核CPU的时代CPU
是如何处理多个任务的。
CPU核使用线程(线程是一系列的CPU指令)处理任务,单核CPU
在某一时刻只能开一个线程处理一个任务,如果有更高优先级的任务需要处理时,CPU会
暂停当前的线程,然后开另外一个线程处理新的任务。
假设我在一段时间T内要处理2个
任务:
任务a和任务b,任务b比任务a具有更高的优先级。
一开始CPU核开线程A处理
任务a,在t1时间段处理任务a时,任务b具有更高的优先级,于是任务b中断CPU后,
CPU暂停线程A,然后为任务b开线程B,在t2时间段任务b处理完毕,关闭线程B,再
继续线程A在时间段t3完成任务a的处理。
如果任务b的优先级不比任务a高,则需要线
程处理完任务a后再为任务b开线程,在这段过程中我们可以小结出如下几点:
1.如果只有一个CPU核(非超线程)在某一时刻只能开一个线程,单核CPU采用逐个处
理的方式处理多个任务,由操作系统任务管理器负责线程的管理。
2.活动的线程在处理任务时都会用到100%的CPU,线程处于非活动状态时,CPU时间降
到0,因此线程只有0或100%CPU时间,不会出现2个数值之间的CPU时间。
3.我们在操作系统计数器里看到的CPU时间是时间T内的CPU时间的平均值,如图1所
示,其实可以用长方形面积来表示:
横轴表示长方形的长度,实际为测量时间间隔(Interval);
纵轴表示长方形的宽,实际为CPU时间(0或100),CPU在时间T内的理论总时间(活动
和非活动)为T*1=T,线程A的时间为(t1+t3)*1=t1+t3,而线程B的时间为t2*1=t2,因此
我们说在时间T内,CPU的使用时间是[(t1+t2+t3)/T]*100%。
<
图1单线程处理多个任务>
今天的CPU已经具备多核以及超线程技术,所以多个核在某一时刻可以开多个线程去处理
多个任务,对于某个核(不启用超线程)来说,其处理机制不变。
但是多核多线程环境里,
其他高优先级的任务不需要中断被占用的CPU核来为自己开线程,对于同等优先级的任务
也无须等待被占用的CPU核处理完当前任务后为自己开线程,而是利用空闲的CPU核为自
己开线程,如图2所示。
对于多核CPU的每个核来说,处理的机制和单核CPU一样,计算
CPU实际使用时间的方法一样,只不过CPU的时间是多个核的时间总和(N核CPU可以
将CPU时间这个长方形的宽增加N倍),线程的管理同样由操作系统任务管理器负责。
图2多核处理多个任务>
Hyper-V虚拟化环境CPU的分配和调度
在物理环境中,WindowsServer使用以上的机制为任务进程开启、暂停或者关闭线程,
WindowsServer承担着CPU管理员的角色,负责管理处理任务的线程。
而在虚拟化环境
中,因为CPU的调度和管理转移到了虚拟化软件层,所以虚拟化软件承担着CPU管理员的
管理角色,负责所有分区操作系统里(包含父分区和子分区)线程的管理。
进一步看,父分
区和子分区的线程都由虚拟化软件的线程调度器一管理,Hyper-V线程调度程序和物理环境
中的操作系统任务管理器承担的角色相当。
在虚机系统要处理某个任务时,虚拟化层线程调
度器为虚机在某一个或者多个逻辑核里启动一个或者多个线程,如图3所示。
图3虚拟化平台CPU逻辑核的分配>
如果在调度那一刻有足够的可用的核,那么线程调度器可以随机在某个可用的核里开线程,
但是如果当前没有可用的核,那么这个线程将在线程调度器排队等候,直到有空闲的核释放
出来,如图4所示。
图4线程调度器队列>
需要明确的是,并不是在虚机设置里分配给某台虚机几个虚拟CPU,这几个虚拟CPU在虚
机生命周期内就绑定给了这台虚机了,更像是将CPU“租用”给虚机,而且这种“租赁”周期和
“租赁”的CPU核都不是确定的。
因此为虚机分配的线程运行的逻辑核是动态的,而不会是
固定的,比如在t1时刻虚机当前分配了两个线程运行在逻辑核1和5里,由于逻辑核被其他
线程中断等原因,在t2时刻这两个线程可能运行在逻辑核可能是2和4里,也就是说,每
个逻辑核运行的线程是随机的。
线程调度器掌握着逻辑核分配权,在接到虚机任务请求后为
虚机线程运行分配逻辑核,但是不由虚机选择运行在哪个逻辑核里。
在了解了CPU核如何处理线程、如何测算CPU时间以及Hyper-V虚拟化平台CPU分配规
则后,我们知道CPU时间取决于任务线程的数量、线程繁忙程度、任务处理时间。
实际生
产环境的应用类型种类繁多,应用进程所使用的线程的数量、线程繁忙程度、任务处理时间
都不同。
在物理机上运行低负载应用虚机时,即使虚拟化比较高,比如在一台20核服务器上给20台
运行的虚机分配超过40个虚拟CPU(虚拟化比2:
1),由于虚机任务的线程少,而且任务处
理时间很短,CPU核在一定时间周期内能够依次运行多个虚机的线程,大部分的核只在少
部分时间里处理这些应用的进程就足够了,因此我们在物理机的系统里观察到的CPU使用
时间往往是图5这种状态。
图5低负载虚机CPU使用时间>
在物理机上运行高负载应用虚机时,即使虚拟化比不高,比如在一台20核服务器上给5台
运行的虚机分配超过20个虚拟CPU(虚拟化比1:
1),由于虚机任务的线程多、线程繁忙,
而且任务处理时间较长,CPU核在一定时间周期内能够依次运行不多的虚机线程,需要用
到大部分的核以及它们大部分的时间,因此我们在物理机的系统里观察到的CPU使用时间
往往是图6这种状态。
图6高负载虚机CPU使用时间>
在具备一定数量的虚机,而且虚机运行的应用多元化的时候,应用进程所使用的线程的数量、
线程繁忙程度、任务处理时间都是变化而且难以精确测量的指标,所以我们要获得合适的
CPU分配比,可以在前期需要根据实际负载进行粗略评估,在后期按照云平台调度接口进
行优化或横向扩展。
我们在规划的时候可以根据虚拟化平台的用途进行不同的评估:
(1)在可以收集到数据中心负载性能的环境里,比如用户自己的数据中心,可以使用微软提
供的MicrosoftAssessmentandPlanning(MAP)工具对服务器的负载进行一段合理的时间
的收集,以此为依据来确定合理的硬件资源和虚拟化比。
(2)在无法收集和预测负载类型和负载性能情况时,比如在IDC或者托管环境里,不能使
用MAP提前分析和规划,则可以考虑使用行业中的一些CPU基准测评软件进行评估。
当然,无论最初怎么设计和规划,都无法获得精确的分配比,一定要充分利用起Hyper-V的
性能优化,在物理环境出现CPU使用率较高的时候,可以考虑使用实时迁移进行性能的平
均分配。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 HyperV 虚拟 CPU 分配 探讨