CPU Burst有副作用吗?让数学来回答!| 龙蜥技术

简介: 使用CPU Burst的副作用是什么?是否有不适用的场景呢?戳我给你答案~

 

编者按:CPU Burst 特性已合入 Linux 5.14,Anolis OS 8.2、Alibaba Cloud Linux2、Alibaba Cloud Linux3也都支持CPU Burst特性。

round_corner_image_by_atool.png

在系列文章的上篇中,我们讨论了让人讨厌的 CPU 限流,它会影响运行在容器中的应用的一些关键指标。为了避免限流的出现,有时我们不得不牺牲容器部署密度,从而导致资源浪费的产生。在解决方案部分,我们也介绍了新的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设置满足

IMG_2104.png

image.gif

时,有如下的调度稳定性约束:

CodeCogsEqn.png

image.gif

其中

image.gif

CodeCogsEqn (6).png

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

CodeCogsEqn (1).png

image.gif

不管任务优先级如何,最坏情况下任务执行时间(WCET, Worst-Case Execution Time)不超过一个period。

假如持续出现

image.gif

CodeCogsEqn (2).png

调度器稳定性被打破,在每个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突发使用,容易产生较大影响。表格中数据项的格式为

CodeCogsEqn (3).png

,其中

CodeCogsEqn (4).png

越接近1越好,

CodeCogsEqn (5).png

概率越低越好。

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年加入阿里云内核组,目前在调度领域等方面学习研究

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用了 HTTPS,没想到还是被监控了!

作者 | 轩辕之风来源 | 编程技术宇宙大家好,我是轩辕。上周,微信里有个小伙伴儿给我发来了消息:随后,我让他截了一个完整的图,我一瞅,是HTTPS啊!没用HTTP!再一瞅,是www.b…

AI让边缘更智能 边缘让AI无处不在

简介: 城市管理和城市服务逐步走向智能化,智慧化。到2019底,全国100%的副省级城市,95%以上的地级市,以及50%以上的县级市均提出建设新型智慧城市,并已经有32个主要城市成立了专门的大数据管理机构&#xff…

开源自建/托管与商业化自研 Trace,如何选择?

简介: 随着微服务架构的兴起,服务端的调用依赖愈加复杂,为了快速定位异常组件与性能瓶颈,接入分布式链路追踪 Trace 已经成为 IT 运维领域的共识。但是,开源自建、开源托管或商业化自研 Trace 产品之间到底有哪些差异&…

python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...

原文作者:站在两个世界边缘 & 小象编辑:VL今天给大家介绍几个Python里(可能没那么广为人知的)小知识,希望能给大家带来帮助,让编程更有乐趣。1.如何修改解释器提示符正常情况下,我们在终端下执行Python 命令是这样…

阿里云IoT Studio升级版新增解决方案引擎 大幅提升方案交付效率

简介: 8月25日,阿里云发布IoT Studio升级版,新增了解决方案引擎,让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改,即可交付。使整个物联网解决方案的交付过程由几个月,缩短到几小时&#xff0…

如何用 Nacos 构建服务网格生态

简介: Nacos 在阿里巴巴起源于 2008 年五彩石项目(该项目完成微服务拆分和业务中台建设),成长于十年的阿里双十一峰值考验,这一阶段主要帮助业务解决微服务的扩展性和高可用问题,解决了百万实例扩展性问题&…

华为oj题目c语言,华为OJ机试题目——24点游戏算法

对于这种题用程序实现只能是穷举的思想,而做法各异,如下代码是利用符号的不断变化,利用4个数计算值,默认是4个数字a,b,c,d是按顺序计算的,即默认是加了括号的,即(((a op1 b)op2 c)op3 d)。而4个数字要组合顺…

性能提升一个数量级,大杀器来了!| 文内福利

经过多年的演进,Java语言的功能和性能都在不断地发展和提高,但是冷启动开销较大的问题长期存在,难以从根本上解决。本文先讨论冷启动问题的根本原因,然后介绍一种新近提出的彻底解决Java冷启动问题的技术方案——Java静态编译技术…

快手基于 Flink 构建实时数仓场景化实践

简介: 一文了解快手基于 Flink 构建的实时数仓架构,以及一些难题的解决方案。 本文整理自快手数据技术专家李天朔在 5 月 22 日北京站 Flink Meetup 分享的议题《快手基于 Flink 构建实时数仓场景化实践》,内容包括: 快手实时计算…

PyFlink 开发环境利器:Zeppelin Notebook

简介: 在 Zeppelin notebook 里利用 Conda 来创建 Python env 自动部署到 Yarn 集群中。 PyFlink 作为 Flink 的 Python 语言入口,其 Python 语言的确很简单易学,但是 PyFlink 的开发环境却不容易搭建,稍有不慎,PyFlin…

Android自动化打包工具,利用Jenkins实现Android自动化打包

Jenkins简介What is Jenkins?Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.Jenkins can be installed through native system packag…

为什么简单的删除集合中的元素竟然报错了?

作者 | 七十一来源 | 程序员巴士前言什么是快速失败:fail-fast 机制是java集合(Collection)中的一种错误机制。它只能被用来检测错误,因为JDK并不保证fail-fast机制一定会发生。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fas…

一文详解Redis中BigKey、HotKey的发现与处理

简介: 在Redis的使用过程中,我们经常会遇到BigKey(下文将其称为“大key”)及HotKey(下文将其称为“热key”)。大Key与热Key如果未能及时发现并进行处理,很可能会使服务性能下降、用户体验变差&a…

阿里云CDN操控2.0版本正式发布

简介: 2021年8月,阿里云边缘云CDN完成过去3年来最大的一次版本升级。 2021年8月,阿里云边缘云CDN完成过去3年来最大的一次版本升级。本次升级根据上万企业客户的使用反馈和行业应用特征,从简单开通到个性化定制,从内容…

向xxxhub发了一个数据包,发现了···

作者 | 轩辕之风来源 | 编程技术宇宙那天,我突然想到一个问题:当我访问那个让万千宅男程序员为之着迷的GitHub时,我电脑发出的数据包是如何抵达大洋彼岸的GitHub服务器的呢,这中间又要经过哪些节点呢?让我们一起来探究…

使用 Flink Hudi 构建流式数据湖

简介: 本文介绍了 Flink Hudi 通过流计算对原有基于 mini-batch 的增量计算模型的不断优化演进。 本文介绍了 Flink Hudi 通过流计算对原有基于 mini-batch 的增量计算模型不断优化演进。用户可以通过 Flink SQL 将 CDC 数据实时写入 Hudi 存储,且在即将…

android获取版本号报错,Android开发:获取安卓App版本号的方法步骤

在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版本号就是必须要有的功能。Android的App版本号相关内容比iOS的App版本号内容要多,而且iOS版的App版本信息跟Android的还不一样。本篇…

运营也用的起来的数据分析工具:Quick BI即席分析详解

简介: 数据部门是一个容易被投诉的“高危”部门,需求响应慢、数据准确性不高会影响业务的发展。 然而数据分析师每周动辄就有几十个需求在手,无限的加班也无法解决所有问题,到底怎样才能改变BI分析师的需求响应问题呢?…

【产品动态】解读Dataphin流批一体的实时研发

简介: Dataphin作为一款企业级智能数据构建与管理产品,具备全链路实时研发能力,从2019年开始就支撑可集团天猫双11的实时计算需求,文章将详细介绍Dataphin实时计算的能力。 背景 每当双11全球购物狂欢节钟声响起,上千…

Aruba与中国电信国际有限公司达成战略合作 助力中国企业扬帆出海

2022年1月12日,慧与科技公司 (NYSE: HPE) 旗下Aruba日前宣布,与中国电信国际有限公司(CTG)签署MSP(托管服务运营商)战略合作伙伴协议,Aruba的产品将纳入中国电信国际有限公司的主营产品线。协议…