
在系列文章的上篇中,我们讨论了 让人讨厌的 CPU 限流,它会影响运行在容器中的应用的一些关键指标。为了避免限流的出现,有时我们不得不牺牲容器部署密度,从而导致资源浪费的产生。在解决方案部分,我们也介绍了新的CPU Burst 技术,通过这一技术,我们既能保证容器运行服务质量,又不降低容器部署密度。听起来有点像个银弹啊?那么,使用CPU Burst的副作用是什么?是否有不适用的场景呢?
使用CPU Bandwidth Controller可以避免某些进程消耗过多CPU时间,并确保所有需要CPU的进程都拿到足够的CPU时间。之所以有这样好的稳定性保证,是因为当Bandwidth Controller设置满足
时,有如下的
调度稳定性约束
:

其中
是第i个cgroup的quota,是一个period内该cgroup的CPU需求。Bandwidth Controller对每个周期分别做CPU时间统计,调度稳定性约束保证在一个period内提交的全部任务都能在该周期内处理完;对每个CPU cgroup而言,这意味着任何时候提交的任务都能在一个period内执行完,即
任务实时性约束:

假如持续出现
调度器稳定性被打破,在每个period都有任务积攒下来,新提交的作业执行时间不断增加。
,
其中
越接近1越好,
概率越低越好。|
u_avg |
m=10 |
m=20 |
m=30 |
|
10% |
1.0000/0.00% |
1.0000/0.00% |
|
|
30% |
|
|
|
|
50% |
|
|
|
|
70% |
|
|
|
|
90% |
|
|
|
结果跟直觉是吻合的。一方面,CPU需求(CPU利用率)越高,CPU突发越容易打破稳定性约束,造成任务WCET期望变长。另一方面,CPU需求独立分布的cgroup数目越多,它们同时产生CPU突发需求的可能性越低,调度器稳定性约束越容易保持,WCET的期望越接近1个period。
关于作者
常怀鑫(一斋),阿里 云内核组工程师,擅长CPU调度领域。
—— 完 ——
加入龙蜥社群
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】拉你入群;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥OpenAnolis社区交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!

龙蜥社区是由 企事业单位、高等院校、科研单位、非营利性组织、个人等按照自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于2020年9月,旨在构建一个开源、中立、开放的Linux上游发行版社区及创新平台。
短期目标是开发Anolis OS作为CentOS替代版,重新构建一个兼容国际Linux主流厂商发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70004278/viewspace-2837538/ ,如需转载,请注明出处,否则将追究法律责任。