炼数成金 门户 大数据 虚拟化 查看内容

ESXi CPU调度原理

2019-4-12 16:22| 发布者: 炼数成金_小数| 查看: 7120| 评论: 0|原作者: 姚泉|来自: 姚泉

摘要: 很多客户会反映某些虚拟机的性能比较差,尤其是CPU,那么究竟如何去做优化呢?要想做好优化,需要首先了解一下ESXi的CPU调度原理。首先,作为虚拟化的基础架构平台,ESXi提供计算资源的共享,在ESXi上运行的所有虚拟 ...

tm 管理 Hadoop 架构 培训

很多客户会反映某些虚拟机的性能比较差,尤其是CPU,那么究竟如何去做优化呢?要想做好优化,需要首先了解一下ESXi的CPU调度原理。首先,作为虚拟化的基础架构平台,ESXi提供计算资源的共享,在ESXi上运行的所有虚拟机都可以共享该物理机的计算资源,包括CPU和内存,但是当虚拟机的CPU需求增多的时候,就可能造成CPU性能下降,尤其是CPU超分的时候(overcommitment)。

在了解CPU调度之前,我们先介绍一下和CPU相关的几个概念。
Socket:槽位,指的是物理CPU的个数,vSphere授权方式就是按照Socket售卖。
Core:每个物理CPU的核心。
LCPU:逻辑CPU,也就是CPU的线程数,打开超线程功能后,LCPU就是物理机总核心数的两倍,没打开超线程功能,LCPU就等于物理机总核心数。
vCPU:管理员给虚拟机分配的虚拟CPU数量。如果指定了vSocket和vCore,vCPU=vSocket*vCore。

当虚拟机在ESXi主机上运行时,VMkernel中的一个组件--scheduler 就会负责vCPU的调度,由于虚拟机的vCPU无法给OS和APP提供计算能力,只能通过scheduler的调度去占用物理的LCPU才能保证虚拟机的运行,否则就会产生就绪值--ready time,从而影响到虚拟机的CPU性能。

首先我们讨论一下SMP(对称多处理)架构,也就是UMA(统一内存访问)架构,随后我们会讨论NUMA(非统一内存访问)架构,那么scheduler究竟是怎么工作的呢?它的工作原理大致有以下几个过程:
scheduler将虚拟机的vCPU调度在LCPU上运行,占用物理CPU的时间切片(time-slice),从而保证虚拟机的资源使用。
虚拟机的所有vCPU会同时被调度在相应的LCPU上,而且vCPU和LCPU的占用比例是1:1,也就是说,任何一个时刻,一个vCPU会占用一个LCPU,反过来,一个LCPU上也只能运行一个vCPU。(如下图)
当超分(overcommitment)时,也就是所有运行的虚拟机的vCPU之和超过了物理机的总LCPU时,scheduler会以默认50ms的时间间隔轮流调度vCPU,这个时候就会产生CPU资源争用。
当管理员给虚拟机设置了资源控制参数(reservation,limit,share)时,scheduler会根据优先级调度虚拟机的vCPU,一般来说,关键业务会占用更多的CPU资源,非关键业务会占用更少的CPU资源。


由于CPU资源产生竞争,每个虚拟机可能都会在需要CPU资源的时候,获取不到,这个时候就会产生ready time(就绪值),从而影响虚拟机的CPU性能。

在SMP架构下,VMkernel要尽量保证物理CPU的负载均衡,默认行为下,同一个虚拟机的vCPU会被调度在不同的物理CPU上,但是对于内存密集型应用来说,这样会损失性能,因为Intel的CPU中,同一个物理CPU的core之间会共享最后一级缓存,从而提升虚拟机的性能,所以管理员为了做好优化,可以在虚拟机的vmx配置文件里添加参数,sched.cpu.vsmpConsolidate="TRUE" ,目的为了让VMkernel把同一个虚拟机的vCPU调度在同一个物理CPU上。

但是在NUMA架构下,VMkernel会尽量保证虚拟机的vCPU运行在同一个物理NUMA节点上,避免损失性能。

下边我们来了解一下NUMA架构,NUMA--Non-Uniform Memory Access,非统一内存访问。指的是vCPU运行在某一个物理CPU的虚拟机会优先使用离这个物理CPU最近的内存资源。

VM1和VM2运行在左侧的主节点(home node)上,VM3运行在右测的主节点上,性能达到最优。如果这三个虚拟机的vCPU或者内存无法完全运行在主节点上,那么就需要跨节点访问资源,这样就会影响性能。所以在设计虚拟机规模的时候,也要考虑到物理机的NUMA架构。

从vSphere 5.5开始,支持vNUMA架构,也就是在虚拟机级别启用NUMA,从而满足Guest OS和应用程序的需要。当同时满足以下两个条件时,vNUMA会自动启用,否则需要手工修改参数来启用:
虚拟机的vCPU大于等于9个
虚拟机的vCPU超过一个物理节点的核心数(core),而不是LCPU。

如下图所示:


该虚拟机满足以上两个条件,自动启用vNUMA,虚拟NUMA节点数量等于物理NUMA节点数量,但是由于虚拟机默认有10个vSocket,每个vSocket包含1个vCore,为了更优化,管理员需要修改vSocket和vCore的比例关系,比如,可以改为1个vSocket包含5个vCore,如下图所示:


如何修改呢?很简单,在虚拟机的属性中修改:

剧透一下,VCAP6-DCV Deploy的考试中有一道题,要求管理员通过参数配置手工启用vNUMA,因为该虚拟机不满足自动启用vNUMA的条件,比如只有8个vCPU,那么管理员需要在vmx配置文件里添加参数:numa.vcpu.maxPerMachineNode,比如设置为4,那么虚拟机的8个vCPU就会被人为分为两个NUMA节点,每个节点4个vCPU,这样就相当于让Guest OS认为虚拟机有两个“物理”的NUMA节点了。

最后,强调一下,如果虚拟机启用了CPU热添加功能,那么vNUMA功能就会被禁用。所以在设计虚拟机的时候,需要注意虚拟CPU和物理CPU的匹配关系,以免影响性能。

声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

热门文章

 

GMT+8, 2019-4-23 20:20 , Processed in 0.178191 second(s), 25 queries .