概述

​ 在云上业务类型和硬件资源越来越丰富的背景下,对云原生系统提出了更高的管理要求,例如在概论[1]中提到的资源利用率问题,服务质量保障问题,黑盒泛化问题,异构算力效率问题等等。为了让多样性业务和算力混部系统以最佳状态运行,Rubik混部解决方案应运而生,在Rubik解决方案中,包括了集群感知调度、单机混部引擎(rubik)和内核隔离技术等多层次优化系统。本文是对rubik混部引擎的概要性介绍。

​ Rubik字面意思为魔方,魔方由Rubik在1974年发明,故Rubik既是人名也指代魔方,在我们的解决方案中,Rubik象征着能够将任务和算力资源有条不紊的管理起来。

​ rubik混部引擎的愿景是提供一套自适应的单机算力调优和服务质量保障服务。包括如下能力目标:

  • 兼容原生kubernetes系统:基于原生kubernetes的扩展接口进行能力扩展。
  • 兼容openEuler系统:自动使能openEuler提供的增强特性(如内核分级资源隔离技术),对于其他linux发行版,由于存在部分内核特性缺失,仅提供受限管理能力。
  • 注入式应用画像:通过干扰自动注入对业务进行画像标记,指导调度及运行时干扰识别控制。
  • 节点及业务特征收集:上报节点及业务特征信息指导集群资源规划、调度策略优化,实现集群负载均衡、节点资源错峰互补使用。
  • 运行时干扰识别控制:提供对关键业务性能干扰实时检测能力、干扰源快速定位能力以及干扰快速控制能力。
  • 自适应动态调优:例如对关键业务性能优化,使其能能更高效稳定的运行;动态在离线资源配比调优,减少关键业务QoS违规等等。
  • 支持自定义扩展:支持高级用户针对特定业务场景开发自定义扩展插件。

​ 图1 rubik混部引擎在系统中的位置

特性介绍

​ 在保障在线业务服务质量前提下实现资源利用率最大化提升是在离线混合部署的设计目标,rubik混部引擎作为节点管理组件在整个混部解决方案中起到至关重要的作用,因此,rubik混部引擎主要围绕资源利用率提升、QoS保障展开。

​ 在资源利用率提升方面,rubik提供以下机制指导集群资源调度、实现集群节点各维度资源均衡、错峰互补、干扰打散。

  • 基于注入式应用画像指导作业调度的调度及重调度机制

​ 待调度作业通过干扰自动注入对业务进行画像标记, 分析工作负载的资源敏感度及压力度,调度阶段结合节点各维度资源(CPU、内存带宽、缓存带宽、磁盘带宽、网络带宽等)预测使用情况,指导集群节点资源统筹管理调度,不同资源密集型业务交错部署,均衡各维度平均资源利用率水平,同时也指导作业二次调度。

  • 基于在线业务资源预测的节点资源超卖机制

​ 通过对在线业务的各维度资源采样,预测可/不可压缩资源使用情况并上报,为在线业务准确预留所需资源保障其QoS的同时,将未使用资源尽可能多地分配给离线业务,最大化离线的吞吐率,提升节点的资源利用率。

​ 在QoS保障方面,在混部作业的运行过程中,由于在离线作业竞争CPU、缓存带宽、内存带宽、网络带宽、磁盘带宽等共享资源以及由于进程在不同CPU频繁切换及负载流量突发等情况,往往会导致业务性能受损,为了保障在线业务服务质量,防范关键业务QoS违规,rubik混部引擎规划提供多重保障以提升工作负载的运行效率及稳定性。

  • 第一道防线 - 基于内核特性的资源隔离抢占机制

​ openEuler Kernel为了适配云原生混部场景,规划了CPU、cache、blkio、Disk I/O、Network I/O等资源的分级抢占能力,rubik作为用户态组件,为在离线业务配置QoS优先级,使得当在线业务流量上升时,内核层面能为其快速抢占到所需资源,保障在线业务的服务质量,当在线业务的流量下降时,放宽对离线业务资源的限制,提高离线业务的吞吐率。

  • 第二道防线 - 基于资源预测的在离线资源配比调优的预防机制

​ 通过对在线业务相关资源的监控采集,预测在线业务各资源的使用情况,并结合节点资源的使用情况,提前对资源进行规划,降低在线业务QoS违规风险。当预测在线业务资源需求变大时,根据节点资源的空闲情况,选择是否对离线业务资源的配比调整。

  • 第三道防线 - 基于资源编排与弹性限流的自适应性能调优机制

​ 提供拓扑均衡&潮汐亲和性编排,减少进程在不同CPU的频繁切换、进程迁移开销以及访问远程NUMA导致性能抖动,同时应对关键业务流量突发,在保障整机负载水位安全稳定前提下,允许临时突破限制,协调资源进行自适应调整,快速解决或者缓解对应资源瓶颈,保障关键业务的服务质量。

  • 第四道防线 - 基于指标监控的性能干扰检测控制的反馈机制

​ 在现有的计算机硬件体系结构中,除了CPU、Memory、Disk、Network等资源,还有诸如Memory Bus、 System I/O Bus、 DMA Bus、MMU-TLB等关键资源,且这些资源尚无对应的软硬件协同的资源隔离机制,无法实现应用级的隔离,仅仅对CPU等资源隔离抢占无法完全解决资源竞争带来的QoS违规问题。因此节点管理组件需要提供对关键业务的性能干扰分析,然而在实际的生产环境上,通常无法直接获得业务的QoS情况,因此,在预分析阶段对底层性能指标与上层应用QoS建模,在运行期根据模型实时检测评估QoS是否违规,并在出现QoS违规后基于异常指标定位干扰来源,最后对干扰源进行压制甚至驱逐来保障在线业务的服务质量。

​ 图2 rubik混部引擎特性

部署

​ 首先,需要准备一套基于openEuler 22.03完成部署的kubernetes集群,然后在master节点准备rubik的yaml部署文件,可以直接从rubik源码仓下载example:

wget -O rubik-daemonset.yaml https://gitee.com/openeuler/rubik/raw/master/hack/rubik-daemonset.yaml

​ 下载之后,正确配置yaml里面的镜像地址,让它能够正确下载rubik镜像。

需要注意:

  1. yaml里需要正确配置rubik容器镜像的地址。假如前面采用的是rubik源码仓的example,则需要修改yaml文件中的image: rubik_image_name_and_tagimage: hub.oepkgs.net/cloudnative/rubik:latest
  2. yaml中主要包含ClusterRole、ClusterRoleBinding、ConfigMap、DaemonSet四部分。其中rubik的启动配置参数包含在ConfigMap里,详细的配置说明可以参考rubik配置说明(https://gitee.com/openeuler/rubik/blob/master/docs/config.md)

​ 然后,一键部署rubik daemonset:

kubectl apply -f rubik-daemonset.yaml

​ 部署完成后,通过kubectl可以查询名为rubik-agent的pod:

# kubectl get pods -A
NAMESPACE     NAME                                            READY   STATUS    RESTARTS   AGE
kube-system   rubik-agent-jhjdg                               1/1     Running   0          4d

使用示例

​ 以下演示如何启动一个nginx Pod并将对其设置为在线业务,rubik为该业务使能kernel资源QoS保障机制。

​ 首先,需要在工作节点上使能memory QoS特性:

echo 1 > /proc/sys/vm/memcg_qos_enable

​ 然后,在部署文件yaml添加volcano.sh/preemptable的annotation以标识业务属性:

# cat nginx-online.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-onlineannotations:volcano.sh/preemptable: "false"   # volcano.sh/preemptable为true代表业务为离线业务,false代表业务为在线业务,默认为false
spec:containers:- name: nginximage: nginxresources:limits:memory: "200Mi"cpu: "1"requests:memory: "200Mi"cpu: "1"

​ 接着,部署nginx业务:

# kubectl apply -f nginx-online.yaml
# kubectl get pods
NAME            READY   STATUS    RESTARTS   AGE
nginx-online    1/1     Running   0          4d

​ 最后,查找并进入nginx-online Pod对应的cgroup下,查看cpu.qos_level是否生效(在线业务为0,离线业务为-1),具体运行效果可以查阅典型应用下的效果中案例1[2]

# cat /sys/fs/cgroup/cpu/kubepods/pod59f1cdfa-a0ad-4208-9e95-efbef3519c00/cpu.qos_level
0

展望

​ 在离线混合部署作为提升数据中心资源利用率的重要手段,得到学术界和工业界的关注,成为了研究的热点领域,但目前也面临着诸多技术挑战,尚有许多亟待解决的问题,如黑盒业务混部、异构资源混部等,需要在作业感知调度、性能干扰建模、资源隔离抢占等领域逐个突破。为了达成泛型混部及融合部署的目标,节点管理层面对关键业务进行性能干扰建模,提供精确的QoS量化模型,指导干扰实时检测与定位,并基于干扰检测与定位实现更精确的动态资源配比控制以及探索更精准普适的动态监测指标数据对应用画像以指导感知调度,这些方面具有着至关重要的作用,也是rubik后续研究的重点所在。

​ 本文简要介绍rubik混部引擎的愿景、目标、设计原则及特性机制,后续计划对其中涉及的性能调优技术,资源隔离抢占技术,干扰检测及控制技术等进行详细介绍,敬请期待!

加入我们

文中所述资源利用率提升技术,由 Cloud Native SIG、Kernel SIG共同参与,其源码将在 openEuler 社区逐步开源。如果您对相关技术感兴趣,欢迎您的围观和加入:

方式一:通过openEuler SIG 列表查找上述SIG组,邮件联系相关的Maintainer
方式二:您可以添加小助手微信(微信号:wildLittleHelper),加入对应 SIG 微信群。

系列文章回顾

[1] openEuler 资源利用率提升之道 01 : 概论

[2] openEuler 资源利用率提升之道 02 : 典型应用下的效果

openEuler资源利用率提升之道 03:rubik混部引擎简介相关推荐

  1. openEuler资源利用率提升之道06:虚拟机混部OpenStack调度

    虚拟机混合部署是指把对 CPU.IO.Memory 等资源有不同需求的虚拟机通过调度方式部署.迁移到同一个计算节点上,从而使得节点的资源得到充分利用. 虚拟机混合部署的场景有多种,比如通过动态资源调度 ...

  2. kubernetes 降本增效标准指南| 资源利用率提升工具大全

    背景 公有云的发展为业务的稳定性.可拓展性.便利性带来了极大帮助.这种用租代替买.并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果.但实际上业务上云并不意味着成本一定较少,还需适配云上 ...

  3. 爱奇艺体验Serverless极致扩缩容,资源利用率提升40%

    简介:Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高.成本更优的一站式应用托管方案.零门槛+零改造+零容器基础,即享Serverless+K8 ...

  4. 爱奇艺体育:体验Serverless极致扩缩容,资源利用率提升40%

    简介: Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高.成本更优的一站式应用托管方案.零门槛+零改造+零容器基础,即享Serverless+K ...

  5. 浪潮ai服务器最新数据,浪潮发布的最新AI服务器,将GPU资源利用率提升至前所未有的水平...

    浪潮在ISC20大会期间发布支持最新NVIDIA® Ampere架构A100 PCIe Gen4的AI服务器NF5468M6和NF5468A5,为AI用户提供兼具超强性能与灵活性的极致AI计算平台. ...

  6. 提升资源利用率与保障服务质量,鱼与熊掌不可兼得?

    随着云计算时代的到来,大规模资源运营面临着如何在保障服务质量的同时提升资源利用率(降本增效).但这两个目标的达成在当前的软硬件技术水平上,是相互矛盾的.本文介绍的LAR(Load Auto-Regul ...

  7. 云平台的成本优化-提升资源利用率

     引言  有个朋友和我探讨"大型云平台如何提高资源利用率,以优化资源成本",我当时很兴奋,这是云行业走向成熟的标志,为了整理思路我还特地写了一个提纲. 后来我采集行业信息去完善和验 ...

  8. kubernetes 降本增效标准指南| 容器化计算资源利用率现象剖析

    作者:詹雪娇,腾讯云容器产品经理,目前主要负责腾讯云集群运维中心的产品工作. 张鹏,腾讯云容器产品工程师,拥有多年云原生项目开发落地经验.目前主要负责腾讯云TKE集群和运维中心开发工作. 引言 降本增 ...

  9. 提升60%基础资源利用率!中国联通的容器化大数据平台实践

    中国联通数据中心总经理王志军在Rancher举办的ECIC大会上的演讲实录,分享了中国联通为何开始进行平台容器化并如何运用Kubernetes对9000台的服务器数据节点进行最大化利用和合理调度,进而 ...

最新文章

  1. 95%PyTorch库都会中招的bug!特斯拉AI总监都没能幸免
  2. servlet与jsp的联系与区别
  3. 在Hammerstein非线性模型中,基于PSO的参数辨识系统
  4. MyBatisPlus3.x代码生成器自定义模板配置
  5. flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果 | 秒速技术
  6. linux nfs 修复文件,linux nfs Read-only file system
  7. Mahmoud and a Dictionary CodeForces - 766D 种类并查集
  8. python中判断字符串的常用操作
  9. 生成随机数 java
  10. 分析频域滤波和空域滤波的各自特点_IIR数字滤波器设计(数字信号处理)
  11. AndroidICS4.0----LockScreen锁屏流程【Android源码解析九】
  12. oracle 9i linux内核,在Linux下安装Oracle9i_oracle
  13. Python面向对象:类
  14. Python实现汉译英
  15. 蝶形算法(Butterfly Algorithm)未更完
  16. python神器_牛逼啊!一个可以随时随地写Python代码的神器
  17. 《Unsupervised Monocular Depth Learning in Dynamic Scenes》论文笔记
  18. 前端学习之路-聚美优品注册页面的实现
  19. oa服务器优化,如何优化OA以提高访问速度
  20. python收益风险点图_使用python matploblib库绘制准确率,损失率折线图

热门文章

  1. 数学建模预备知识——插值与拟合
  2. python之路 JavaScript基础
  3. 【PXI系列科普文】- PXI基础介绍
  4. 【Redis持久化原理之AOF(Append Only File)】
  5. 评估和选择最佳学习模型的一些指标总结
  6. java计算机毕业设计web硕士研究生招生考试专业报考查询及学习系统设计与实现源码+mysql数据库+系统+lw文档+部署
  7. 时标网络图怎么画?一篇文章两个方法轻松上手
  8. 图解CTRL+数字符号快捷键组合,助你工作效率倍增
  9. JAVA中的float和double的区别
  10. 票据科目-辅助核算显示汇票的详细信息