Replies: 3 comments 6 replies
-
Mid + BE 对外透露还是有点困惑的。虽然目的是为了获得更稳定超卖的资源以及获得压制的机制,但是理解上就会联想到Batch + BE,使用即Mid 资源的BE策略和Batch的BE策略有啥具体的区别么? |
Beta Was this translation helpful? Give feedback.
2 replies
-
一些调度/重调度相关的优化讨论没有列进来:打散/filter/迁移,另外可以提交一个正式的proposal了。 |
Beta Was this translation helpful? Give feedback.
3 replies
-
Resctrl/RDT 的使用,Mid 资源有没有考虑做不同的划分规则(有无场景需求) |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
https://koordinator.sh/docs/designs/node-prediction/ 引入了 mid 资源希望使用节点稳定的资源,将 prod 已申请未使用的部分超卖出来,相比 batch 资源更加稳定,提供较为稳定的超卖资源,提升节点利用率时保证超卖业务稳定性。但是目前mid资源模型有很多待改进的地方。
提案
User Story
Mid+LS:低优的在线服务,引入后一般不会对现有的Prod应用产生过多影响,不需要常态的压制策略,运行时的性能表现和Prod+LS基本一致,出现干扰时会被驱逐掉(比如整机水位突增)
Mid+BE:AI/流式相关的任务,资源消耗型,而且驱逐重算的代价比大数据作业(Batch+BE)高,对资源容量稳定性有要求,直接引入会对会对现有的Prod应用产生资源竞争和干扰,需要常态开启一些压制策略,避免干扰和驱逐。
理论上,一个节点内可以同时存在Prod+LS(高优在线)、Mid+LS(低优在线)、Mid+BE(AI、流式任务)、Batch+BE(大数据任务)几种应用。
优先原则
默认情况下,同样是LS,prod/mid的运行性能表现应该是基本相同的,对于BE for mid/batch也是类似的。QoS策略适配需要具体来看,但一般来说,对于QoS相同,Priority不同的情况,不需要拉开太大的差异,比如只是驱逐的优先顺序,像内存回收这种可以增加一些advanced的配置(常态下不需要配),但像CPU Group Identity这种,目前其实没有更细的配置粒度,所以暂时也不需要额外的适配。后续针对Core Schedule+cpu idle这类的高级能力需要考虑。
资源超卖
目前mid设计的是超卖形式:
prod_reclaim*buffer_ratio1+prod_unallocatable*buffer_ratio2
接下来Mid也可以支持非超卖形式:
prod_unallocatable*buffer_ratio
,参考mid-tier-overcommitment扩展资源mid-cpu
使用mid-cpu:需要webhook对pod注入扩展字段(同batch),对于Mid+LS,需要额外的方法避免其进入到besteffort QoS,例如注入limit,kubelet会将其放入burstable组;request设置为0,不占用正常资源。
对于非超卖场景,prod与mid在调度时是否需要共享账本
共享账本情况下需要增加filter和抢占的能力,prod在pending时需要将mid抢占后才能调度。
非共享账本的情况下,需要单机或其他外围机制(descheduler),在必要的情况(热点)下对mid做迁移,Mid LS可能会影响到Prod LS。
取决于Mid账本的计算策略,自身带来的干扰程度,对于预设的目标场景下,Mid账本的计算应相对保守,且应用类型不应引入过多干扰。
QoS策略适配Mid LS/BE
CPU QoS
Group identity,在container级别根据qos配置,其余级别都是0,reconciler模式下不及时。直接在besteffort/burstable分组级别设置可以提升reconciler的及时性,但对cgroup层级的设计会有要求。
Resctrl QoS
根据QoS导入pid到分组
基于用量水位的驱逐(Memory Evict)
驱逐时根据优先级和资源用量做排序,先Batch再Mid,对于Mid+LS也可以考虑优先驱逐,以保证LS作业的性能。
CPU Suppress
常用于CPU QoS不支持的场景下,BE QoS受压制,压制范围根据水位阈值和其他Pod的用量计算,为了保证reconciler的及时性,目前在根组级别生效。
CPU Evict
只与满足度相关,只要Pod满足度低就驱逐,满足度有多种计算方式,目前虽然是从CPU Suppress的角度,长期应从OS指标的角度做,可以考虑类似现有memory evict方式,按照cpu使用率进行驱逐。
cfsQuota/memoryLimit设置
根据参数直接配置
Memory QoS
回收分级,container级别配置项直接设置
公平性
high:容器级别自身限制约束
min:建议为LS设置,不建议为BE设置
low:先回收BE,后回收LS,回收顺序受层级关系影响,BE/LS需要同层
异步回收按配置
cpuShare
Mid+LS:和其他LS的应一致(Prod+LS),包括层级和系数
Mid+BE:和其他BE的应一致(Batch+BE),包括层级和系数
cgroup层级位置
Mid LS放到burstable分组,Mid BE放到besteffort分组
pros:完整对标了K8s和Koordiantor的QoS模型
cons:需要通过webhook注入limit字段的方式,或者LS申请cpu,BE申请mid-cpu的方式实现;burstable分组的cpu shares会被kubelet定期刷新
trade-off-result
使用mid-cpu/mem扩展资源
Mid与Prod在调度器不共享账本
对Mid+LS,使用webhook注入limit,让其进入burstable qos分组管理,Mid+BE直接默认进入best-effort
完善mid资源后,koordiantor将支持以下组合,参考koordinator QoS
koor-priority和resource type绑定
TODO
thanks co-authors: @zwzhang0107 @jiasheng55
more information see discussion at https://shimo.im/docs/5xkGoegGB8fvM9kX/
Beta Was this translation helpful? Give feedback.
All reactions