最后更新2021/07/27

共享分区CPU分配这个动作是系统Hypervisor自动完成的,我们只能通过HMC定义规则,但不能直接干预。CPU分配受几个限定参数影响,分别是Physical Processor(物理CPU)分配数量、Virtual Processor(虚拟CPU)分配数量、Capped/Uncapped(是否封顶)、Weight(权重)。Hypervisor在进行CPU分配的基本规则是:

  1. 确保分区可以获得物理CPU参数中Entitlment数量的CPU资源(注意不是Desired),但如果系统闲置,则闲置的CPU可以被其他分区抢占,抢占的最小分配单位为0.01个物理CPU运行时间片;由于此数值可以通过DLpar进行动态调整(以下所有其它参数几乎都可以动态调整),所以本书中用Entitlement表示分区实际获得的CPU资源数量;
  2. 如果分区被设置为Capped,则此分区最多可以占据的物理CPU数量就是分配的物理CPU数量,不能超出,即使CPU已经100%繁忙,也不能获得更多CPU cycle;
  3. 如果分区被设置为Uncapped,则此分区最多可以抢占的物理CPU数量等同于虚拟CPU设置的数量。例如物理CPU设置的数量为2.5,而虚拟CPU设置的数量为4,则在Capped情况下,此分区做多可以使用2.5个物理CPU的运行时间片,而在Uncapped情况下,只要小型机闲置的CPU足够多,此分区又很忙,则最多可以使用4个物理CPU。所以Uncapped也是有顶的,就是VP的数量;
  4. 如果闲置物理CPU总数不够,不能满足所有繁忙分区同时抢占到最大值,则依靠权重按比例分配各个分区抢占的CPU数量,权重越大(最大255),抢占的比例越高。计算方法是以所有需要额外CPU的分区的权重累加作为分母,每个分区获得自身权重数量比例的物理CPU。例如系统当前有两个Uncapped分区,权重分别为128和255,都需要“抢占”CPU,当前空闲物理CPU是8个,则权重128的分区获得当前所有可用物理CPU的8×128/(128+255),大约是2.67个物理CPU,而权重255的分区获得8×255/(128+255),大约是5.33个物理CPU。当然,此项规则要与上一规则配合,即如果该分区虚拟CPU设定的比较小,例如4,则此分区尽管理论上可以多拿到5个以上的CPU,但实际上总计使用的物理CPU达到4就无法再去抢占更多的物理CPU了,剩余的物理CPU会继续作为闲置CPU分配给其它需要的分区。