最后更新2021/08/11

Power VM共享CPU的策略由Power CPU架构、Hypervisor、和AIX进程调度功能综合实现。我们可以将这个过程分为两个阶段:

  • AIX对进程(线程)进行调度,让线程尽量集中运行在”同一“物理CPU上,此功能被称为CPU folding。通过这个功能,多分配给分区的CPU资源就可以尽可能多地“完全”空余下来,更容易释放未使用的CPU,降低线程在不同物理CPU之间切换的损失。此方案类比的任务分配原则是让任务尽量由一组工人中尽量少的人完成,这样这个人就可以一直在工位工作,而不用频繁地与其它人交接班,减少交接班损失。毕竟,与工人不同,CPU不存在过度劳累问题,永远由同一CPU(内核)执行任务,其它CPU都空闲着,也不会有谁叫苦或偷笑;
  • Hypervisor通过Power CPU架构发现CPU“空闲”,就可以将空闲的物理CPU调度给其他分区使用;

采用分时方式为分区提供CPU是目前几乎所有操作系统都能提供的功能,Power CPU将此能力硬件化,由Hypervisor进行管理和调度,这就Micro Partition(微分区)和Shared Processor Partition(共享CPU分区)的功能。Power CPU按照10ms为单位的时间片进行切分,Hypervisor根据分区设定参数,暨预订的分配规则为每个分区分配物理CPU时间片。分区真实获得的物理CPU时间片是个变化值,它与几个状态参数有关。

  • 首先与CPU繁忙程度有关。

如何在虚拟化环境中判断物理CPU繁忙?AIX和Power CPU通过CPU一个特殊的寄存器PURR实现。我们知道AIX也是一个分时操作系统,AIX内部有名为wait的系统进程(使用ps -ef命令可以看到),每个逻辑CPU,AIX中显示为proc( 其实这里面还有SMT的问题,为了简化说明,假设SMT都设置为禁止,也就是1个proc逻辑CPU只对应一个虚拟CPU),允许一个线程在其上运行。

AIX在进行线程调度的时候,“左手”控制当前执行队列,“右手”抓取逻辑CPU时间片。如果当前执行队列中有待执行线程,则“抓取”此线程分配个逻辑CPU时间片,把他们“撮合”在一起,也就是线程找到了可供其执行的逻辑CPU时间片去执行。Hypervisor会将有执行任务的逻辑CPU时间片对应到物理时间片,真正将待执行线程执行起来。也就是说,可用逻辑CPU时间片对应于VP数量,可用物理CPU时间片来自于PU数量;

如果队列中没有线程需要执行,则交由wait进程处理。wait进程标记PURR寄存器,向Hypervisor报告当前逻辑CPU时间片空闲,Hypervisor不会为空闲的逻辑CPU分配物理CPU,这个物理CPU时间片就可以 “抽调”给其他真正需要物理CPU的逻辑CPU(当心被绕晕啦),这种对应不存在分区壁垒(但受CPU共享池控制),只要有需要,同一分区的其它逻辑CPU、其它分区的逻辑CPU都有可能。

  • 其次,物理CPU时间片分配与分区Capped/Uncapped状态及Weight有关。

如果是Capped分区,分区所能获得的最多的物理CPU时间片数量等同于Entitlement的物理CPU,不能更多,但可以少(如果分区空闲)。如果是Uncapped的分区,则Hypervisor尽量满足分区的要求,最大可能数值是将分区操作系统所有的逻辑CPU时间片全部填满。由于在SMT禁止的情况下,逻辑CPU与虚拟CPU之间一一对应,全部逻辑CPU数量也就是分区虚拟CPU的VP(virtual processor)数量,所以分区可获得的最多物理CPU数就是当前的VP数。

即使SMT打开,由于SMT是对同一CPU在执行线程时虚拟,增加的是“塞入”同一CPU执行的线程数(由一个变为多个),而不能增加“用于承载线程”的CPU的数量,所以分区最多可获得的物理CPU数依然是分区的VP的数值。而如果资源紧张,CPU共享池内没有足够多的空闲物理CPU分配怎么办?则Hypervisor根据各个申请CPU的分区的Weight数值来为这些分区分配物理CPU时间片。Weight数值越大,分配的比例越多。

  • 最后,每分区所能获得的物理CPU时间片有保证值。

也就是同一CPU共享池中各分区抢占物理CPU的时候,每个分区至少会获得自己Entitlement的物理CPU数量。因此,如果将使用同一CPU共享池的所有分区的全部Entitlement的物理CPU数加在一起,不可能大于共享池的物理CPU数。为了保证这条规则,每当有增加分区Entitlement物理CPU的动作(分区启动、分区DLpar增加物理CPU)发生,HMC都会检查是否符合这条规则,如果不满足这条规则,HMC会拒绝动作或者将增加的物理CPU数量自动减少,直到满足规则。

在IBM PowerVM技术中,Entitlement的物理CPU也有两个含义,其一是分区Desired的物理CPU数或者经由Dlpar调整之后的最终值;其二是Hypervisor每10ms进行计算时得到的每个分区所“应得”的物理CPU时间片,这是一个变化值。在本书以及IBM的官方文档中,并没有严格区分这两个不同含义,读者可以根据上下文进行区分。

下面把以上过程连贯起来,用一个例子说明。例如一个分区Entitlement的物理CPU为4.3,虚拟CPU为8,则在每秒钟,将保证有430个(物理)CPU时间片分给此分区使用。这430个物理CPU时间片再根据Virtual CPU数量进行分配,每个Virtual CPU平均大约获得54个物理CPU时间片(430/8≈54)。

其实AIX并非平均将物理CPU时间片分配给每个Virtual CPU,同时也不会将待执行的线程平均分散到每个Virtual CPU,而是力图将他们“塞满”一个Virtual CPU之后再去填充下一个(既CPU Folding),运行中的虚拟CPU被称为Online的虚拟CPU,其他的虚拟CPU则被Off-line。只有当系统繁忙,Online的虚拟CPU全部时间片都被线程占据(超过80%以上),或者有其他紧急的中断事件发生,Off-line的虚拟CPU才可能被强制Online,进而得到物理CPU时间片。

AIX和Hypervisor非平均地分配物理CPU时间片来减少线程在不同物理CPU、缓存、内存之间切换的可能,实现系统最佳响应时间同时及时释放空闲CPU。Virtual CPU得到物理CPU时间片之后,就可以真正去执行AIX分配给他执行的线程了。我们此刻为了简化讲解过程,暂不考虑SMT问题。其实即使打开SMT,对应的结果相当于等式(把虚拟CPU、物理CPU之间的对应比作等式)两边同时乘上SMT乘数,2(Power5/6)、4(Power7)或8(Power8),并不影响本节所描述的对应关系和分析结果,因此本节暂时忽略了SMT的问题。

AIX按照队列、优先级排列的方式为每个Virtual CPU分配待执行线程,经由物理CPU时间片执行。如果物理CPU时间片用尽,仍有待执行的线程(由AIX通过CPU的PURR寄存器通知Hypervisor),则Hypervisor根据分区CPU是否Capped来决定下一步动作。如果是Capped的分区,则Hypervisor不做任何额外动作,物理CPU会对当前正在执行的线程强制进行Content Switch动作,将线程挂起;如果是Uncapped的分区,则Hypervisor根据同一Shared Processor Pool中空闲物理CPU和各分区Weight情况判断是否分配额外的物理CPU时间片给此分区,最多到填满分区的全部VP(Virtual CPU)。

以上就是分区抢占物理CPU的过程,CPU释放的过程与此类似,但更多地需要AIX操作系统参与,这是由于多任务操作系统永远有系统调度进程在执行,只有操作系统主动释放CPU或者向Hypervisor报告空闲,才能由Hypervisor通知CPU强制将进程切换出去而释放CPU。

Virtual CPU和物理CPU之间没有任何恒定的对应关系,但AIX只要有可能都力图为将一个线程由最少数量的虚拟CPU执行(Processor Folding或CPU Folding),Hypervisor也力图将同一个物理CPU的时间片分配给虚拟CPU,这种技术被称为Affinity。如此设计是为了借用Power CPU的架构优化线程执行速度:Power CPU体系采用NUMA结构,也就是Cache和内存尽管可以被所有物理CPU访问、共享,但和物理CPU之间有“远、近”之分。通常,每个物理CPU内核(core)有自己独占的L1 Cache,位于同一CPU芯片(Socket)上的2-8个CPU内核共享L2/L3 Cache,多个CPU芯片共享L3 Cache。物理CPU内核访问离自己较“近”的Cache/内存会远远快于访问较“远”的Cache/内存。线程被执行的时候,其相关代码和数据一定在距离执行此线程的物理CPU内核较“近”的Cache里,否则线程会由于等待内存数据而被switch出去,此现象被称为CPU欠载。当AIX进行线程调度时,如果线程能继续在最近运行过的物理CPU上执行,所有相关数据都在“近”Cache中,则可以立刻执行,降低CPU欠载的可能。

在同一分区内部,AIX操作系统是如何进行物理CPU和虚拟CPU之间对应的呢?前面我们介绍过,AIX并非平均分配物理CPU时间片给每个虚拟CPU,其目的是尽量用较少的虚拟CPU去运行所有的线程。这是由于虚拟CPU毕竟是虚拟CPU,无论如何在虚拟CPU上分配线程,最终都要由物理CPU执行,总的物理CPU执行时间片数量不会有变化,不同的只是切换的次数。我们可以把这个过程用收银员、柜台、队列进行类比:如果只有2个收银员(物理CPU),却有4个柜台(虚拟CPU),在大家都按规则排队的情况下,将排队人只发送给有收银员的窗口显然是最有效的方案。因此,AIX的设计思想是当系统空闲时,尽量少用虚拟CPU(窗口),而将大部分线程堆满(确切来说是80%繁忙)一个虚拟CPU后才启动下一个。所以使用Topas之类的命令查看CPU的详细信息时,我们会发现排号靠前的CPU比较繁忙,而靠后的CPU较空闲。此处注意逻辑CPU的概念,topas看到的是全部逻辑CPU,因此0、2、4等偶数CPU比较忙,而1、3、5等奇数CPU会稍空闲(这是SMT扩展出来的)。偶数CPU中又以前几个最忙,这是由于AIX的CPU Folding。

同时,AIX还根据CPU繁忙程度向Hypervisor“报告”CPU的使用量,及时释放空闲的物理CPU。我们下面以某分区的一组CPU使用为例,介绍AIX如何分配物理CPU给虚拟CPU(获取和释放物理CPU及SMT都未在考虑范围之内)。
图 3-12 分区虚拟CPU、物理CPU分配图

参考<图 3-12 分区虚拟CPU、物理CPU分配图>,图中从左至右为某分区不同时刻的工作量、VP(虚拟CPU)工作情况、以及物理CPU使用情况(见图中表格)。AIX在进行虚拟CPU分配时会根据当前的负载情况,如果系统为满负荷,显然所有的虚拟CPU都将繁忙,并且尽最大可能去获取全部的物理CPU时间片。如果每个虚拟CPU的时间片如果都能“找”到物理CPU的时间片,结果显然是每有一个VP就能拿到一个物理CPU(也就是说分区所具有的VP数就是能拿到物理CPU的上限)。而当系统并非100%繁忙时,AIX则会逐渐释放出物理CPU时间片,同时减少VP的使用。

在本例中,分区拥有4个VP,并且在初始时消耗了3.8个物理CPU时间片,计算得知需要4个VP全部在线(计算值圆整后为5,大于4,如果分区有5 Entitlement的VP,则会使用到5个,然而当前只有4个,也就最多使用4个),平均为95%繁忙。

经过一段时间后,分区繁忙程度降低,只有1.9个物理CPU时间片有线程在执行,其他时间都处于等待,AIX计算得知所需的VP为3,少于当前4个在线的VP,AIX于是强制将一个VP离线(并非在配置上使其离线,而是在执行队列中不再为此VP分配线程,不需要执行任何线程的VP也就不会被分配PU/物理CPU时间片)。

分区负载继续降低,仅仅消耗了0.8个物理CPU,也就是只需要2个VP,因此AIX继续使下一个VP离线,只使用2个VP处理线程。

下一时刻,分区负载稍稍增加,提高到1.5个物理CPU,圆整后发现需要3个VP支持,当前为2个VP,但AIX并没有马上启用下一个VP,而还要查看总体VP的繁忙程度。计算得知总体VP繁忙程度为75%,低于80%,AIX依然不急于启用下一个VP,以避免频繁启用、停止VP,减少不必要的切换损失。我们不要忘记以上计算、动作都是以每秒钟100次的频率发生,任何额外的操作都会导致系统巨大的资源浪费。

再下一时刻,分区负载再增,达到了1.8个物理CPU,通过计算发现VP使用率超过了80%,因此AIX开始动作,启用下一个VP,使得系统达到3个VP。最后,系统负载依然保持在1.8个物理CPU,没有继续增加,所以在线的VP保持为3个。

AIX提供了一些参数来控制相关调度方案。其中vpm_xvcpus是由AIX vmo命令控制的参数(缺省为1),用于计算获取物理CPU时的特性,如果vpm_xvcpus取较大的数值,则AIX倾向于让更多的VP online(并不能获得更多的物理CPU),反之则减少online的VP。有兴趣的读者可以根据图中公式自己计算。更改vpm_xvcpus参数并不能更改分区可获得的物理CPU,只有在某些特定的应用环境中,如果CPU使用量变化过于频繁,较大的vpm_xvcpus可以避免AIX执行线程调度时由于严重“抖动”而影响性能。类似的参数还有VMO的vpm_fold_policy、vpm_fold_threshold等,他们都属于“微调”参数,通常不会提升系统性能。

AIX动态控制VP是否在线,其变化非常频繁,尚无命令直接查看此信息,不过可以看到宏观的或某一时刻的CPU运行状态。这里要注意,AIX的CPU分配技术、Power VM技术颠覆了很多传统性能监控的观点。下面作者列出一些重要的、容易混淆误解的现象。

  • 通过vmstat看到的us、sy列使用百分比是实际消耗的物理CPU与实际分配的物理CPU的百分比,相当于是“使用效率”的百分比,而不是我们所期望的使用的物理CPU与Entitlement物理CPU的百分比,所以在进行性能分析时不要被这个百分比所迷惑,只有后面的ec列(即Entitlement CPU)才能真正表示出分区当前的消耗。
#vmstat 5
System configuration: lcpu=8 mem=16384MB ent=1.50
# lcpu表示逻辑CPU为8颗(经过SMT之后),Entitlement 物理CPU 1.5
kthr    memory              page              faults              cpu
----- ----------- ------------------------ ------------ -----------------------r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa    pc    ec2  0 538063 3594870   0   0   0   0    0   0   1  637  94  0  0 99  0  0.01   0.6
#表示当前时刻实际使用了0.6颗物理CPU2  0 538063 3594870   0   0   0   0    0   0   0   68  92  0  0 99  0  0.01   0.42  0 538063 3594870   0   0   0   0    0   0   0   97  87  0  0 99  0  0.01   0.4

对于虚拟化系统,让每颗虚拟CPU或者逻辑CPU都忙起来或者同样繁忙没有任何实际意义,只有物理CPU的繁忙才是真正有意义的工作。如果你通过topas或者nmon看到很多CPU空闲,或者负载很轻,这往往并非性能的瓶颈点。如前所述,对于很少的物理CPU“服务窗口”,增加等待处理的队列数量(即VP/虚拟CPU和proc/逻辑CPU)没有任何意义。 如果进入更深层次的讨论,对一某些实时性要求非常高的业务或者系统中有几千个以上的线程等待处理的系统,多个等待队列(也就是增加VP)还是有一定价值的,不过其设定也要“适当”,分区的VP达到2倍以上PU设定就已经是很大的数值了。VP的重要价值在于控制uncapped分区所能获得的最大物理CPU数。分区VP越多,在繁忙时所能抢占的物理CPU越多。当然,如果分区不忙,VP数多少不影响分区所能获得的物理CPU,反而增加了调度消耗,所以也不要设定非常大的VP,

一般设置VP为两倍的Entitlement PU,并且uncape分区CPU使用,weight设置为128是个很好的初始设置,此后可以根据分区实际运行情况适当微调。

更多介绍可以参考IBM网站:Assigning the appropriate processor entitled capacity

3.3 CPU共享功能相关推荐

  1. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  2. 开启文件高级共享功能

    如果要开启文件高级共享功能,可以在"我的电脑"中执行"工具->文件夹选项"命令,接着切换到"查看"选项卡,在高级设置中清除" ...

  3. 【软考-软件设计师】CPU的功能与组成

    CPU的功能: 主要包括程序控制/操作控制/时间控制以及数据处理. ①程序控制--通过执行指令来控制程序的执行顺序,是CPU的重要功能. ②操作控制--一条指令功能的实现需要若干操作信号配合完成,CP ...

  4. 新版XenCenter添加剪贴板共享功能

    今天测试了下XenServer5.6 SP2,老版本的XenCenter已经不能连接新版本XenServer了,于是升级到了最新版:XenCenter version 5.6 Service Pack ...

  5. win10使用网络共享功能的方法

    win10系统有一个网络共享功能,可以实现局域网之间文件和打印机的共享操作,从而有效提高资源共享,实现更高效的办公需求.好多新手用户不知道网络共享功能怎么使用?为此,本文教程来和大家详细说明一些使用方 ...

  6. sql服务器文件夹共享,sqlserver2017共享功能目录路径不可改的解决方法

    注意:什么路径不可改就搜索该路径进行删除注册表记录,然后重启电脑 按 win键盘+R输入 regedit 进去注册表,点击计算机按"编辑"-->查找下一个 需要等一些时间 结 ...

  7. 计组之中央处理器:1、CPU的功能和基本结构

    1.CPU的功能和基本结构 思维导图 现代计算机的结构 CPU的功能 运算器 运算器的基本组成 运算器的数据传输 1.专用数据通路方式 2.内部单总线方式 控制器 控制器的基本组成 CPU 思维导图 ...

  8. (计算机组成原理)第五章中央处理器-第一节:CPU的功能与基本结构(运算器和控制器等寄存器)

    文章目录 一:CPU的功能 (1)CPU的具体功能 (2)每个部件的功能 二:运算器基本结构 三:控制器基本结构 一:CPU的功能 (1)CPU的具体功能 CPU具体功能包括 指令控制:完成取指令.分 ...

  9. 腾讯测试王者荣耀网速的软件,腾讯游戏启用账号时长共享功能 开启人脸识别测试有效果吗?以《王者荣耀》为试点...

    腾讯游戏启用账号时长共享功能 开启人脸识别测试有效果吗?以<王者荣耀>为试点 2018-11-16 14:22:35  来源:游民星空 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋 ...

最新文章

  1. RStudio配置R程序包的默认下载源
  2. oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...
  3. android+高通平台缩写汇聚
  4. 1、【设计模式】组合模式
  5. ICCV 2021|面向城市场景理解的大规模3D点云挑战赛
  6. 那些35岁的程序员都去哪了
  7. Android之ZXing扫描二维码以及生成二维码
  8. 【BZOJ2460】元素,线性基+贪心
  9. 笨办法学 Python · 续 练习 38:SQL 简介
  10. 解决ubuntu进行远程连接时出现密码认证失败的问题
  11. 蔡勒公式整理——给日期计算星期几
  12. windows7安装Bitvise开启SSH服务
  13. 软考-中级-网络工程师-知识点个人总结(一)
  14. python风变编程是骗局吗-风变编程的Python课程怎么样?
  15. PIXHAWK飞控固件及代码基础介绍
  16. django-spirt 论坛主题
  17. 一款仿古文本编辑器---edit.exe
  18. Niushop单商户V4稳定版重构上新啦!
  19. html使用本地字体/自定义字体 字体转换成@font-face所需的web字体格式
  20. 计算机模拟虚拟筛选操作流程

热门文章

  1. Python实现的图书分析大屏展示系统(附源码)
  2. 荣耀手机用什么蓝牙耳机好?适合荣耀手机的蓝牙耳机推荐
  3. 【爬虫学习笔记day66】7.8. scrapy-redis实战-- IT桔子分布式项目2
  4. C语言数据结构 (清华大学出版社【严蔚敏版】参考)
  5. 电阻(6)限流、分压、采样、频率特性篇
  6. PCL中3D点云特征描述与提取(三)
  7. 一唯,ev录屏过程中断电视频的恢复,视频恢复修复
  8. avr c语言编译器,AVR单片机C语言编译器-20210409071159.docx-原创力文档
  9. 用几何画板验证三角形重心定理,很方便!
  10. 值得收藏的22个搜索下载免费PDF电子书的网站