混部之殇-论云原生资源隔离技术之CPU隔离(一)

2023-10-29 23:10

本文主要是介绍混部之殇-论云原生资源隔离技术之CPU隔离(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者

蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友。目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作。

导语

混部,通常指在离线混部(也有离在线混部之说),意指通过将在线业务(通常为延迟敏感型高优先级任务)和离线任务(通常为 CPU 消耗型低优先级任务)同时混合部署在同一个节点上,以期提升节点的资源利用率。其中的关键难点在于底层资源隔离技术,严重依赖于 OS 内核,而现有的原生 Linux kernel 提供的资源隔离能力在面对混部需求时,再次显得有些捉襟见肘(或至少说不够完美),仍需深度 Hack,方能满足生产级别的需求。

(云原生)资源隔离技术主要包括 CPU、memory、IO 和网络,4个方面。本文聚焦于 CPU 隔离技术和相关背景,后续(系列)再循序渐进,逐步展开到其他方面。

背景

无论在 IDC,还是在云场景中,资源利用率低都绝对是大部分用户/厂商面临的共同难题。一方面,硬件成本很高(大家都是靠买,而且绝大部分硬件(核心技术)掌握于别人手中,没有定价权,议价能力也通常很弱),生命周期还很短(过几年还得换新);另一方面,极度尴尬的是这么贵的东西无法充分利用,拿 CPU 占用率来说,绝大部分场景的平均占用率都很低(如果我拍不超过20%(这里指日均值,或周均值),相信大部分同学都不会有意见,这就意味着,贼贵的东西实际只用了不到五分之一,如果你还想正经的居家过日子,想必都会觉得心疼。

因此,提升主机(节点)的资源利用率是一项非常值得探索,同时收益非常明显的任务。解决思路也非常直接,

常规的思维模式:多跑点业务。说起来容易,谁没试过呢。核心困难在于:通常的业务都有明显的峰谷特征

你希望的样子可能是这样的:

但现实的样子多半是这样的:

而在为业务做容量规划是,需要按 Worst Case 做(假设所有业务的优先级都一样),具体来说,从 CPU 层面的话,就需要按 CPU 峰值(可能是周峰值、甚至月/年峰值)的来规划容量(通常还得留一定的余量,应对突发),

而现实中大部分情况是:峰值很高,但实际的均值很低。因此导致了绝大部分场景中的 CPU 均值都很低,实际 CPU 利用率很低。

前面做了个假设:“所有业务的优先级都一样”,业务的 Worst Case 决定了整机的最终表现(资源利用率低)。如果换种思路,但业务区分优先级时,就有更多的发挥空间了,可以通过牺牲低优先级业务的服务质量(通常可以容忍)来保证高优先级业务的服务质量,如此能部署在适量高优先级业务的同时,部署更多的业务(低优先级),从而整体上提升资源利用率。

混部(混合部署)因此应运而生。这里的“混”,本质上就是“区分优先级”。狭义上,可以简单的理解为“在线+离线”(在离线)混部,广义上,可以扩展到更广的应用范围:多优先级业务混合部署。

其中涉及的核心技术包括两个层面:

  1. 底层资源隔离技术。(通常)由操作系统(内核)提供,这是本(系列)文章的核心关注点。
  2. 上层的资源调度技术。(通常)由上层的资源编排/调度框架(典型如 K8s)提供,打算另做系列文章展开,仍请期待。

混部也是业界非常热门的话题和技术方向,当前主流的头部大厂都在持续投入,价值显而易见,也有较高的技术门槛(壁垒)。相关技术起源甚早,颇有渊源,大名鼎鼎的 K8s(前身 Borg)其实源于 Google 的混部场景,而从混部的历史和效果看,Google 算是行业内的标杆,号称 CPU 占用率(均值)能做到60%,具体可参考其经典论文:

https://dl.acm.org/doi/pdf/10.1145/3342195.3387517

https://storage.googleapis.com/pub-tools-public-publication-data/pdf/43438.pdf

当然,腾讯(云)在混部方向的探索也很早,也经历了几次大的技术/方案迭代

这篇关于混部之殇-论云原生资源隔离技术之CPU隔离(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303996

相关文章

python协程实现高并发的技术详解

《python协程实现高并发的技术详解》协程是实现高并发的一种非常高效的方式,特别适合处理大量I/O操作的场景,本文我们将简单介绍python协程实现高并发的相关方法,需要的小伙伴可以了解下... 目录核心概念与简单示例高并发实践:网络请求协程如何实现高并发:核心技术协作式多任务与事件循环非阻塞I/O与连接

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.