简介: 让人讨厌的 CPU 限流影响容器运行,有时人们不得不牺牲容器部署密度来避免 CPU 限流出现。本文介绍的 CPU Burst 技术可以帮助您既能保证容器运行服务质量,又不降低容器部署密度。文章分为上下两篇,该文为上篇,下篇将剖析使用 CPU Burst 和其他避免限流手段的区别,以及如何配置 CPU Burst 功能以达到最佳效果。

在 K8S 容器调度中,容器的 CPU 资源上限是由 CPU limits 参数指定。设置 CPU 资源上限可以限制个别容器消耗过多的 CPU 运行时间,并确保其他容器拿到足够的 CPU 资源。CPU limits 限制在 Linux 内核中是用 CPU Bandwidth Controller 实现的,它通过 CPU限流限制 cgroup 的资源消耗。所以当一个容器中的进程使用了超过 CPU limits 的资源的时候,这些进程就会被 CPU 限流,他们使用的 CPU 时间就会受到限制,进程中一些关键的延迟指标就会变差。

面对这种情况,我们应该怎么办呢?一般情况下,我们会结合这个容器日常峰值的 CPU 利用率并乘以一个相对安全的系数来设置这个容器的 CPU limits ,这样我们既可以避免容器因为限流而导致的服务质量变差,同时也可以兼顾 CPU 资源的利用。举个简单的例子,我们有一个容器,他日常峰值的 CPU 使用率在 250% 左右,那么我们就把容器 CPU limits 设置到 400% 来保证容器服务质量,此时容器的 CPU 利用率是 62.5%(250%/400%)。

然而生活真的那么美好么?显然不是!CPU 限流的出现比预期频繁了很多。怎么办?似乎看上去我们只能继续调大 CPU limits 来解决这个问题。很多时候,当容器的 CPU limits 被放大 5~10 倍的时候,这个容器的服务质量才得到了比较好的保障,相应的这时容器的总 CPU 利用率只有 10%~20%。所以为了应对可能的容器 CPU 使用高峰,容器的部署密度必须大大降低。

历史上人们在 CPU Bandwidth Controller 中修复了一些 BUG 导致的 CPU 限流问题,我们发现当前非预期限流是由于100ms级别CPU突发使用引起,并且提出 CPU Burst 技术允许一定的 CPU 突发使用,避免平均 CPU 利用率低于限制时的 CPU 限流。在云计算场景中,CPU Burst 技术的价值有:

  1. 不提高 CPU 配置的前提下改善 CPU 资源服务质量;
  2. 允许资源所有者不牺牲资源服务质量降低CPU资源配置,提升CPU资源利用率;
  3. 降低资源成本(TCO, Total Cost of Ownership)。

你看到的CPU利用率不是全部真相

秒级 CPU 利用率不能反映 Bandwidth Controller 工作的 100ms 级别 CPU 使用情况,是导致非预期 CPU 限流出现的原因。

Bandwidth Controller 适用于 CFS 任务,用 period 和 quota 管理 cgroup 的 CPU 时间消耗。若 cgroup 的 period 是 100ms quota 是 50ms,cgroup 的进程每 100ms 周期内最多使用 50ms CPU 时间。当 100ms 周期的 CPU 使用超过 50ms 时进程会被限流,cgroup 的 CPU 使用被限制到 50% 。

CPU 利用率是一段时间内 CPU 使用的平均,以较粗的粒度统计 CPU 的使用需求,CPU 利用率趋向稳定;当观察的粒度变细,CPU 使用的突发特征更明显。以 1s 粒度和 100ms 粒度同时观测容器负载运行,当观测粒度是 1s 时 CPU 利用率的秒级平均在 250% 左右,而在 Bandwidth Controller 工作的 100ms 级别观测 CPU 利用率的峰值已经突破 400% 。

根据秒级观察到的 CPU 利用率 250% 设置容器 quota 和 period 分别为 400ms 和 100ms ,容器进程的细粒度突发被 Bandwidth Controller 限流,容器进程的 CPU 使用受到影响。

如何改善

我们用 CPU Burst 技术来满足这种细粒度 CPU 突发需求,在传统的 CPU Bandwidth Controller quota 和 period 基础上引入 burst 的概念。当容器的 CPU 使用低于 quota 时,可用于突发的 burst 资源累积下来;当容器的 CPU 使用超过 quota,允许使用累积的 burst 资源。最终达到的效果是将容器更长时间的平均 CPU 消耗限制在 quota 范围内,允许短时间内的 CPU 使用超过其 quota。

如果用 Bandwidth Controller 算法来管理休假,假期管理的周期(period)是一年,一年里假期的额度是 quota ,有了 CPU Burst 技术之后今年修不完的假期可以放到以后来休了。

使用 CPU Burst 之后

在容器场景中使用 CPU Burst 之后,测试容器的服务质量显著提升。观察到 RT 均值下降 68%(从 30+ms 下降到 9.6ms );99%  RT 下降 94.5%(从 500+ms 下降到 27.37ms )。

如果容器运行负载是延迟敏感类型,又有配置 quota 引起的 CPU 限流,不妨试试使用 CPU Burst 技术对延迟进行优化。CPU Burst 修改已合入 Linux 5.14,Alibaba Cloud Linux 也已经支持 CPU Burst 技术。

关于作者

常怀鑫(一斋),阿里云内核组工程师,擅长CPU调度领域。

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

干掉讨厌的 CPU 限流,让容器跑得更快相关推荐

  1. 让容器跑得更快:CPU Burst 技术实践

    作者:常怀鑫.丁天琛 让人讨厌的 CPU 限流影响容器运行,有时人们不得不牺牲容器部署密度来避免 CPU 限流出现.我们设计的 CPU Burst 技术既能保证容器运行服务质量,又不降低容器部署密度. ...

  2. 如何写出让 CPU 跑得更快的代码?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更 ...

  3. 面试官:如何写出让 CPU 跑得更快的代码?

    前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...

  4. 如何写出让 CPU 跑得更快的代码

    前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...

  5. 如何写出让CPU跑得更快的代码?

    如何写出让CPU跑得更快的代码? 一.CPU缓存有多快? 二.CPU缓存的数据结构和读取过程是什么样的? 三.如何提升数据缓存的命中率? 论如何写出让CPU跑得更快的代码,由于我们的CPU的主频已经是 ...

  6. 让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务

    镜像对容器部署的挑战 在容器的生产实践中,偏小的容器镜像能够很快地部署启动.当应用的镜像达到几个 GB 以上的时候,在节点上下载镜像通常会消耗大量的时间.Dragonfly 通过引入 P2P 网络有效 ...

  7. 人人都能看懂的 6 种限流实现方案!(纯干货)

    作者 | 王磊 来源 | Java中文社群 为了上班方便,去年我把自己在北郊的房子租出去了,搬到了南郊,这样离我上班的地方就近了,它为我节约了很多的时间成本,我可以用它来做很多有意义的事,最起码不会因 ...

  8. 人人都能看懂的 6 种限流实现方案!

    为了上班方便,去年我把自己在北郊的房子租出去了,搬到了南郊,这样离我上班的地方就近了,它为我节约了很多的时间成本,我可以用它来做很多有意义的事,最起码不会因为堵车而闹心了,幸福感直线上升. 但即使这样 ...

  9. 03.服务限流实现方案

    Sentinel概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流.流量整形.熔断降级.系统负载保护等 ...

最新文章

  1. jmeter常见错误及解决方法
  2. Keras【Deep Learning With Python】机器学习和线性回归
  3. jmeter常用插件介绍
  4. SEO优化工具之——Google Adwords 关键词工具
  5. 淘宝2011.9.21校园招聘会笔试题
  6. 电脑故障维修:新手必看的修电脑技巧!
  7. fedora下安装pps
  8. HiTSDB 时序数据库技术架构和产品解析
  9. 在mac os中设置环境变量
  10. Win10下VB6.0开发之VB6.0的安装
  11. FISCO BCOS 同态加密 实例
  12. 图书馆借书系统c语言,急求程序!!!简单图书馆借/还书管理子系统
  13. IP子网划分的原理及应用
  14. 一个IT农民工分享互联网巨头公司面试流程
  15. 鹿晗公布恋情致微博宕机;微信发布国庆长假数据报告;三星宣布将销售翻新版Note 7 丨价值早报
  16. 腾讯2018秋招笔试真题(1)
  17. 【计算机视觉】深度相机(八)--OpenNI及与Kinect for windows SDK的比较
  18. 第五届四川省职工职业技能大赛决赛计算机程序设计员技术文件大纲
  19. Ubuntu14.04 64位网易云播放器
  20. 主流视频编码压缩技术基本概念(二) 算法分析

热门文章

  1. JAVA入门级教学之(数据转换规则)
  2. python的pygame库使用方法_python基础教程使用Python第三方库pygame写个贪吃蛇小游戏...
  3. python矩阵相乘例题_百道Python入门级练习题(新手友好)第一回合——矩阵乘法...
  4. element tree不刷新视图_Vue项目布署后,刷新页面404的真正原因找到了
  5. php bind_param,php – 在mysqli bind_param中绑定动态变量
  6. 多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接
  7. 新松机器人发行价_知识创造财富,“机器人第一股”背后的院士是怎样炼成的?...
  8. 【LeetCode笔记】剑指 Offer 31. 栈的压入、弹出序列 (Java、栈)
  9. 当你抛弃windows使用linux,当我们厌倦了Windows系统还能考虑什么样的桌面操作系统?...
  10. 微型计算机惠普1hm20av,微型计算机原理及应用(答案).doc