2.4 资源分配率
资源分配率一般指逻辑上资源分配的比例。例如,物理机有32个vCPU[13],分配给两个实例,其中一个实例8个vCPU,另一个实例16个vCPU,那么
vCPU分配率=(8+16)/32=75%
由于实例同时由CPU、内存、网络、磁盘等资源构成,每个实例规格的CPU、内存、网络、磁盘的配比不一样,可能在分配一些实例的资源后,vCPU提前分配完毕,造成内存资源浪费。
在实际计算分配率时,除了要计算单项资源分配率,也要计算加权综合分配率。所以在分析分配率时,首先要知晓计算方法,俗称“计算口径”。比如库存分配率的计算,下面给出库存剩余资源的概念描述。
如果把当前一些资源全部拿掉,服务不会受到任何影响,那么这些可以拿掉的资源就是库存剩余资源。
这种计算口径得出的结果是:
资源利用率=1-剩余资源/总资源
这里剩余资源的计算口径,是以运行时服务的稳定性,而不是逻辑上已分配出去的资源为准的。典型场景是:在多种Workload混部的场景下,实例规格实际使用量〈实例规格画像值〈实例规格逻辑申请量,从而存在分时复用的空间。例如实例规格A,逻辑申请4个vCPU,实际使用3.2个vCPU,实例画像3.8个vCPU,此时,库存剩余量=总量-实例规格画像值(基于资源利用率这个角度)。因为实例规格画像值〈实例规格逻辑需求量,使得库存剩余量“偏大”,导致分配率偏小。
还有一种常见的计算口径就是:
逻辑分配率=1-逻辑申请量/总量
这种计算口径完全依据“逻辑记账”,缺乏对实际资源利用率的考量。在云服务器供应调度场景下,逻辑分配率比较多见,原因是云计算资源是按SLA、固定能力交付的。尽管实际的和申请的不一定匹配,但即使有冗余的计算资源,也不能纳入“库存”中。在其他一些场景下,冗余的计算资源被看作是“库存”的,例如弹性共享实例、超卖共享实例等这些平衡性能和成本的实例。
上面概述了两个典型场景下的分配率计算方法或者说计算原则,在对应的计算原则下,单项碎片信息计算就更加具体了。接下来介绍与具体碎片相关的因子,主要包括资源总量、CPU模式和计量、内存模式和计量、磁盘模式和计量、网络模式和计量。
1.资源总量
比较直观的理解是,资源总量是通过机器总数来计算的。
实际操作机器总数=可调度机器总数+不可调度机器总数
可调度机器总数,包括一般标签的机器数、特殊标签的机器数、可混部的机器数(按机型)、Buffer机器数等;不可调度机器总数,包括被锁住的机器数、故障处理中的机器数、故障未处理的机器数、其他锁定的Buffer机器数等。有时候,可调度机器总数的指标是由一个团队负责和优化的,不可调度机器总数的指标是由另一个团队负责和优化的,这会导致资源总量的计算口径和计算结果略有差异,从而使得输出的分配率有一个潜在的“背景”:基于可调度的机器总数还是排除不可调度的机器总数。
2.CPU模式和计量
在cpuset模式下,开启超线程后,逻辑记账的CPU总量等于vCPU总量,通常单位是“个”,也可以表示为0.xx个。在cpushare模式下,开启超线程后,逻辑记账的vCPU数量通常表示为m.n个,切分的粒度更细。
对于开启超线程后的物理节点vCPU总量,通常记录单位为“个”,例如32个vCPU、64个vCPU。
实际可分配的vCPU总量=物理节点vCPU总量-预留给管控的vCPU数量
比如有32个物理节点vCPU,预留4个vCPU给管控使用,那么只有28个vCPU可以参与调度分配。此时,计算资源总量一般按可参与调度的vCPU总量来计算。
前面提到,CPU资源是可压缩的,比如在超卖场景下,CPU超卖比为1∶4,一个物理节点有32个vCPU,最终以参与可调度分配的128(4×32)个vCPU作为CPU维度的资源总量。
在实际集群中,可能存在资源预留、超卖等多种场景,如果一些物理机资源超卖,一些物理机资源不超卖,一些物理机进行了管控资源预留,一些物理机没有进行管控资源预留,那么这时候vCPU总量需按事先约定的计算原则来统一计算。当然,也可以采取单项计算、综合计算等多维度输出。
3.内存模式和计量
内存总量一般为物理内存总量扣除基础软件占用的内存,或者物理内存扣除基础软件占用的内存、预留的内存。
已分配内存一般按内存逻辑记账分配出去的量来计算。
内存通常被视为不可压缩资源。当然,在实际操作过程中,内存也可以以某种程度超卖。这里的超卖是指,在一个公共的内存Buffer视图中,多个实例均可见。表面上,每个实例都有“基础内存+Buffer视图内存”,实际消耗的内存=基础内存+Buffer中实际开销的内存。更多关于内存超卖的信息,请参考2.6.3节。
4.磁盘模式和计量
磁盘总量一般为磁盘总量扣除基础软件使用的磁盘空间,或者磁盘总量扣除基础软件使用的磁盘空间和预留的磁盘空间。
已分配磁盘空间一般按磁盘逻辑记账分配出去的量来计算。
磁盘空间被视为不可压缩资源,磁盘I/O则被视为可压缩资源(以磁盘I/O的调度为前提,否则磁盘I/O也应当被视为不可压缩资源)。磁盘超卖是指,在一个公共的磁盘Buffer视图中,多个实例均可见。表面上,每个实例都有“基础磁盘空间+Buffer视图磁盘空间”,实际消耗的磁盘空间=每个实例级别的磁盘空间+Buffer中实际开销的磁盘空间。有时直接以“磁盘超卖系数×参与调度的存储空间”作为磁盘资源总量。
5.网络模式和计量
网络资源是典型的可压缩资源和分时共享资源。在专有云资源调度中,一般不对网络资源做计量和分析。而且,随着网络基础设施带宽能力的极大提升,例如100Gb/s带宽的普及,网络带宽不再是瓶颈。在公有云资源调度中,网络按流量计费,从而使得网络存在SLA保障和相应带宽隔离服务。
网络能力超卖,客观上也依赖物理节点与不同的Workload之间存在流量的错峰。无论网络能力超卖与否,用户都是无感知的,因为是按实际流量计费的。
分配率提升实践建议
技术人员千万不要被PR(Public Relations)软文中的分配率数字本身误导,而是需要充分理解分配率的实际计算口径、相关因子的构成,并结合场景来考虑。当然,分配率在一定程度上体现了“装箱”组合的优化效率。一般情况下,分配率越高越好。当然,分配率高,并不意味着资源实际利用率就高。但是,在同一种计算口径下,资源实际利用率与分配率正相关。也有些场景下把分配率看作利用率,这需要结合上下文来具体理解。