CPU Burst有副作用吗?让数学来回答!| 龙蜥技术
简介: 使用CPU Burst的副作用是什么?是否有不适用的场景呢?戳我给你答案~
编者按:CPU Burst 特性已合入 Linux 5.14,Anolis OS 8.2、Alibaba Cloud Linux2、Alibaba Cloud Linux3也都支持CPU Burst特性。
为了避免限流的出现,有时我们不得不牺牲容器部署密度,从而导致资源浪费的产生。在解决方案部分,我们也介绍了新的CPU Burst 技术,通过这一技术,我们既能保证容器运行服务质量,又不降低容器部署密度。听起来有点像个银弹啊?那么,使用CPU Burst的副作用是什么?是否有不适用的场景呢?为了回答这个问题,本文将介绍CPU Burst打破的调度保证,以及CPU Burst影响评估。尽管这些CPU突发的使用造成的CPU使用差异在CPU利用率上很多时候不明显,但是我们仍然关心这种改变的影响。当然,结论是明确的:CPU Burst的负面影响完全可以忽略。仅在CPU利用率高达70%的环境里CPU Burst开始影响关键指标,而我相信大家日常生产环境的CPU利用率都远远低于这个水平。
CPU Bandwidth Controller的保证
使用CPU Bandwidth Controller可以避免某些进程消耗过多CPU时间,并确保所有需要CPU的进程都拿到足够的CPU时间。之所以有这样好的稳定性保证,是因为当Bandwidth Controller设置满足
时,有如下的调度稳定性约束:
其中
是第i个cgroup的quota,是一个period内该cgroup的CPU需求。Bandwidth Controller对每个周期分别做CPU时间统计,调度稳定性约束保证在一个period内提交的全部任务都能在该周期内处理完;对每个CPU cgroup而言,这意味着任何时候提交的任务都能在一个period内执行完,即任务实时性约束:
不管任务优先级如何,最坏情况下任务执行时间(WCET, Worst-Case Execution Time)不超过一个period。
假如持续出现

调度器稳定性被打破,在每个period都有任务积攒下来,新提交的作业执行时间不断增加。
使用CPU Burst的影响
出于改善服务质量的需要,我们使用CPU Burst允许突发的CPU使用之后,对调度器的稳定性产生什么影响?答案是当多个cgroup同时突发使用CPU,调度器稳定性约束和任务实时性保证有可能被打破。这时候两个约束得到保证的概率是关键,如果两个约束得到保证的概率很高,对大多数周期来任务实时性都得到保证,可以放心大胆使用CPU Burst;如果任务实时性得到保证的概率很低,这时候要改善服务质量不能直接使用CPU Burst,应该先降低部署密度提高CPU资源配置。于是下一个关心的问题是,怎么计算特定场景下两个约束被打破的概率。
评估影响大小
定量计算可以定义成经典的排队论问题,并且用蒙特卡洛模拟方法求解。定量计算的结果表明,判断当前场景是否可以使用CPU Burst的主要影响因素是平均CPU利用率和cgroup数目。CPU利用率越低,或者cgroup数目越多,两个约束越不容易被打破可以放心使用CPU Burst。反之如果CPU利用率很高或者cgroup数目较少,要消除CPU限流对进程执行的影响,应该降低部署提高配置再使用CPU Burst。问题定义是:一共有m个cgroup,每个cgroup的quota限制为1/m,每个cgroup在每个周期产生的计算需求(CPU利用率)服从某个具体分布,这些分布是相互独立的。假设任务在每个周期的开始到达,如果该周期内的CPU需求超过100%,当前周期任务WCET超过1个period,超过的部分累积下来和下个周期新产生的CPU需求一起在下个需求处理。输入是cgroup的数目m和每个CPU需求满足的具体分布,输出是每个周期结束WCET > period的概率和WCET期望。使用蒙特卡洛模拟求解过程省略,详细请关注后续系列文章。以输入的CPU需求为帕累托分布、m=10/20/30的结果为例进行说明。选择帕累托分布进行说明的原因是它产生比较多的长尾CPU突发使用,容易产生较大影响。表格中数据项的格式为
越接近1越好,
概率越低越好。|
u_avg |
m=10 |
m=20 |
m=30 |
|
10% |
1.0000/0.00% |
1.0000/0.00% |
1.0000/0.00% |
|
30% |
1.0000/0.00% | 1.0000/0.00% | 1.0000/0.00% |
|
50% |
1.0003/0.03% | 1.0000/0.00% | 1.0000/0.00% |
|
70% |
1.0077/0.66% | 1.0013/0.12% | 1.0004/0.04% |
|
90% |
1.4061/19.35% | 1.1626/10.61% | 1.0867/6.52% |
结果跟直觉是吻合的。一方面,CPU需求(CPU利用率)越高,CPU突发越容易打破稳定性约束,造成任务WCET期望变长。另一方面,CPU需求独立分布的cgroup数目越多,它们同时产生CPU突发需求的可能性越低,调度器稳定性约束越容易保持,WCET的期望越接近1个period。
后续
看完本文相信您对CPU Burst的影响已经有了定性了解。如果希望对评估方法有更多了解,请期待系列文章的下篇。
关于作者
常怀鑫(一斋),阿里云内核组工程师,擅长CPU调度领域。
丁天琛(鹰羽),2021年加入阿里云内核组,目前在调度领域等方面学习研究
本文为阿里云原创内容,未经允许不得转载。
CPU Burst有副作用吗?让数学来回答!| 龙蜥技术的更多相关文章
- Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考--------------蘑菇街技术博客
http://mogu.io/156-156 摘要 本文一是为了讨论在Linux系统出现问题时我们能够借助哪些工具去协助分析,二是讨论出现问题时大致的可能点以及思路,三是希望能给应用层开发团队介绍一些 ...
- open-local部署和使用
Open-Local简介 Open-local 是阿里巴巴开源,由多个组件构成的本地磁盘管理系统,目标是解决当前kubernetes本地存储能力缺失问题. Open-Local包含四大类组件: • S ...
- 操作系统学习笔记(五)--CPU调度
由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...
- 操作系统概念学习笔记 10 CPU调度
操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...
- cpu怎么实现运算的
这么好玩的问题,没人回答说不过去.不懂电子元件的码农我要强答一发了.太学术的我不会,你们也听不懂.所以臭不要脸非常不严谨地科普一记.说错不许打我.另外关于这个问题,推荐<编码 (豆瓣)> ...
- 如何解决Maple的应用在数学中
对任意数学和技术学科的研究员.教师和学生而言,Maple是一个必备的工具.通过Maple,教师将复杂数学问题注入生命,学生的精力集中在概念理解上而不是如何使用工具上,研究员可以开发更复杂的算法或模型. ...
- KVM 介绍(2):CPU 和内存虚拟化
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- 高通/苹果/联发科:手机CPU那些事
如今人们买手机,都比较关心采用了什么CPU,因为CPU直接决定了这台手机的性能,CPU之于手机就好比人的大脑,它是整台手机的控制中枢系统,也是逻辑部分的控制中心.又相当于车的发动机,发动机越强劲,车子 ...
- 龙芯将两款 CPU 核开源,这意味着什么?
10月21日,教育部计算机类教学指导委员会.中国计算机学会教育专委会将2016 CNCC期间在山西太原举办“面向计算机系统能力培养的龙芯CPU高校开源计划”活动,在活动中,龙芯中科宣布将GS132和G ...
- windows下绑定线程(进程)到指定的CPU核心
一个程序指定到单独一个CPU上运行会比不指定CPU运行时快.这中间主要有两个原因:1)CPU切换时损耗的性能.2)Intel的自动降频技术和windows的机制冲突:windows有一个功能是平衡负载 ...
随机推荐
- 工良出品,从零设计开发 .NET 开发框架:框架源码和教程电子书
为什么要写这个教程 在毕业之后,读者写过了大量的文章和开源项目,正是坚持一边学习一边输出,所以笔者最终从一个生菜鸡进化为一个熟菜鸡. 在程序员的成长中,我们会在思路,如何学习.如何进步,比如要成长为一 ...
- 记录--uni-app实现蓝牙打印小票
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 说明 基于uni-app开发,调用官方蓝牙相关api实现连接蓝牙与向蓝牙热敏打印机发送字节流,可打印文字,二维码,图片,调整字体大小等,本 ...
- 深度探索.NET Feature Management功能开关的魔法
前言 .NET Feature Management 是一个用于管理应用程序功能的库,它可以帮助开发人员在应用程序中轻松地添加.移除和管理功能.使用 Feature Management,开发人员可以 ...
- Light-Head R-CNN : 旷世提出用于加速two-stage detector的通用结构,速度达102fps
论文提出Light-Head R-CNN,一个精简的two-stage目标检测器设计准则,在表达能力很强的精简特征图上使用轻量级的R-CNN子网,不仅大量减少推理耗时,还提高了准确率,结合Xcepti ...
- Java实现两种队列(数组和链表)
package algorithm; /** @author Administrator @date 2022-09-13 17:50 */ public class QueueLinked{ pri ...
- #Dijkstra,二进制拆位#洛谷 5304 [GXOI/GZOI2019]旅行者
题目 分析(\(logk\)次Dijkstra) 首先为什么\(O(nklogn)\)的多次\(dijkstra\)为什么会TLE, 因为中间有许多的冗余状态,即使两点求出的路径是最短的,它也不一定是 ...
- Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo
概述 本文探讨 Wails 框架的使用,从搭建环境到开发,再到最终的构建打包,本项目源码 GitHub 地址:https://github.com/mazeyqian/go-run-wechat-de ...
- CentOS 9 安装 Nginx 模块 `subs_filter`
sub_filter 和 subs_filter 区别 sub_filter( 0.7.24):替换响应体(Response Body)中的文本,只能设置一组替换. subs_filter:替换响应体 ...
- C++ 智能指针和内存管理:使用指南和技巧
C++是一门强大的编程语言,但是在内存管理方面却存在着一些问题.手动管理内存不仅费时费力,而且容易出错.因此,C++中引入了智能指针这一概念,以更好地管理内存. 什么是智能指针? 在C++中,内存的分 ...
- C# Dev GridControl小结
1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...