59 KVM Skylark虚拟机混部-概述、架构及特性

2023-11-11

59 KVM Skylark虚拟机混部-概述、架构及特性

59.1 Skylark概述

59.1.1 问题背景

随着云计算市场规模的快速增长,各云厂商基础设施投入也不断增加。资源利用率低是行业普遍存在的问题,在上述背景下,提升资源利用率已经成为了一个重要的技术课题。本文档介绍 openEuler Skylark 组件,并给出安装方法及使用指导。

59.1.2 总体介绍

将业务区分优先级混合部署(下文简称混部)是典型有效的资源利用率提升手段。业务可根据时延敏感性分为高优先级业务和低优先级业务。当高优先级业务和低优先级业务发生资源竞争时,需优先保障高优先级业务的资源供给。因此,业务混部的核心技术是资源隔离控制,主要涉及内核态基础资源隔离技术及用户态 QoS 控制技术。

本文描述的对象为用户态 QoS 控制技术,由 openEuler Skylark 组件承载,首发于 openEuler 2209 版本。在 Skylark 视角下,优先级粒度为虚拟机级别,即给虚拟机新增高低优先级属性,以虚拟机为粒度进行资源的隔离和控制。Skylark 是一种混部场景下的 QoS 感知的资源调度器,在保障高优先级虚拟机 QoS 前提下提升物理机资源利用率。

在实际应用场景中如何更好地利用 Skylark 的高低优先级特性,请参考最佳实践章节。

59.2 架构及特性

59.2.1 总体实现框架

Skylark 核心类为QoSManager,类成员包括数据收集类实例、QoS 分析类实例、QoS 控制类实例、以及任务调度类实例:

  • DataCollector:数据收集类,有HostInfoGuestInfo两个成员,分别用于收集主机信息和虚拟机信息。
  • PowerAnalyzer:功耗分析类,用于分析功耗干扰以及需要限制的低优先级虚拟机。
  • CpuController:CPU 带宽控制类,用于限制低优先级虚拟机的 CPU 带宽。
  • CacheMBWController:LLC 及内存带宽控制类,用于限制低优先级虚拟机的 LLC 和内存带宽。
  • BackgroundScheduler:任务调度类,用于周期性驱动以上模块,持续进行 QoS 管理。

Skylark 检查主机环境后,创建守护进程。守护进程有两种线程:主调度线程和 Job 线程:

  • 主调度线程是唯一的,首先连接 Libvirt,然后创建并初始化QosManager类实例,最后开始驱动 Job 线程。
  • Job 线程可能不止一个,每个 Job 线程负责周期性执行某个 QoS 管理任务。

59.2.2 功耗干扰控制

相比非混部情况,混部后主机利用率更高,高利用率意味着高功耗,服务器功耗在超过 TDP 时会触发 CPU 降频。Skylark 支持当功耗超过预设的 TDP 阈值(即出现 TDP 热点)时,通过对低优先级虚拟机的 CPU 带宽进行限制,以此达到降低整机功耗的同时保障高优先级虚拟机 QoS。

Skylark 初始化时,根据配置Skylark中相关配置值,设置功耗干扰控制属性。在每个控制周期,综合分析主机信息和控制属性,判断是否出现 TDP 热点。如果出现热点,进一步根据虚拟机信息分析出需要对哪些低优先级虚拟机进行 CPU 带宽的限制。

59.2.3 LLC/MB干扰控制

Skylark 支持对低优先级虚拟机的 LLC 和内存带宽进行限制,当前仅支持静态分配。Skylark 通过操作系统提供的/sys/fs/resctrl接口来限制低优先级虚拟机的 LLC 和内存带宽。

  1. Skylark 在/sys/fs/resctrl目录下建立low_prio_machine文件夹,并将低优先级虚拟机的 pid 写入/sys/fs/resctrl/low_prio_machine/tasks文件中。
  2. Skylark 根据配置Skylark章节中 LLC/MB 相关配置项对低优先级虚拟机的 LLC ways 和内存带宽进行分配,配置项写入/sys/fs/resctrl/low_prio_machine/schemata文件中。

59.2.4 CPU干扰控制

混部场景下,低优先级虚拟机会对高优先级虚拟机产生 CPU 时间片干扰和 SMT(硬件超线程)干扰。

  • 当高低优先级虚拟机相关线程在同一个最小 CPU 拓扑单元(core 或 SMT)上同时处于可运行状态时,会竞争 CPU 时间片。
  • 当高低优先级虚拟机相关线程在同一个 CPU core 的不同 SMT 上同时处于可运行状态时,会竞争 SMT 共享的 core 内资源。

CPU 干扰控制分为 CPU 时间片干扰控制及 SMT 干扰控制,分别基于内核提供的 QOS_SCHEDSMT_EXPELLER 特性实现。

  • QOS_SCHED 特性实现了单个 CPU core 或 SMT 上高优先级虚拟机对低优先级虚拟机的绝对压制,解决了 CPU 时间片干扰问题。
  • SMT_EXPELLER 特性实现了同一个 CPU core 的不同 SMT 上高优先级虚拟机对低优先级虚拟机的绝对压制,解决了 SMT 干扰问题。

Skylark 初始化时,会把 Cgroup CPU 子控制器下低优先级虚拟机对应 slice 层级的cpu.qos_level字段设置为 -1,以使能上述内核特性,后续就由内核实现对 CPU 相关干扰的控制,Skylark 无需介入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

59 KVM Skylark虚拟机混部-概述、架构及特性 的相关文章

  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • Apache 端口转发 80 到 8080 并访问 Apache (80) 中托管的应用程序,即 phpMyadmin 和 Tomcat (8080)

    我想访问托管在 tomcat 服务器 8080 中的应用程序 myapp 当前可以通过以下方式访问http example com 8080 myapp http example com 8080 myapp in http example
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh

随机推荐

  • Ubuntu搭建PPTP和连接到PPTP

    Ubuntu16 04搭建PPTP服务 TP link端口映射 检测服务器是否支持MPPE模块 sudo modprobe ppp compress 18 echo MPPE is ok 如果输出 MPPE is ok 则说明服务器的lin
  • 映射表

    集是一个集合 它可以快速地寻找现有的元素 但是要查看元素 就需要查看的元素的精确副本 这不是一种非常通用的查找方式 通常 我们知道某些键的信息 并想要查找与之相对应的元素 映射表 map 数据结构就是为此设计的 映射表用来存放键值对 如果提
  • 【Quant】80+面试,5个offer,Quant大神总结分享各家quant面试题

    Why Quant 在北美 这个工作基本上是理工科的中国学生进入金融领域最主要的渠道 而且 现在国内也有朝这方面发展的趋势 如果你是理工科背景 或者对数理 编程和金融比较感兴趣 不妨尝试在就业的时候向这个领域发展 它的一个好处是在工作的时候
  • linux中关闭防火墙

    systemctl status firewalld查看当前防火墙状态 systemctl stop firewalld关闭当前防火墙 systemctl disable firewalld开机防火墙不启动
  • 解决合并单元格筛选时只出现首行的小技巧

    前言 Excel小窍门 让办公更便捷 情景 合并单元格后 单一筛选时只会显示对应的第一行数据 原因 Excel筛选单元格时 遇到不连续区域 即中间有空白单元格 会识别不到后续内容 合并单元格后 除首行外 其余行的值会被自动清空 从而导致在筛
  • NGINX--初步变量详解

    一 编译echo模块 1 echo模块下载以及解压 wget c https gitee com mirrors echo nginx module repository archive master zip unzip master zi
  • 电脑提示d3dcompiler_47.dll缺失怎么修复?

    d3dcompiler 47 dll是 Microsoft 的 DirectX 11 核心组件之一 它主要用于编译和运行 Direct3D 11 应用程序和游戏 如果您的系统中缺少这个 DLL 文件 可能会导致一些程序无法正常运行 很多游戏
  • CMake----if与option使用小记

    在CMake中if语法比较简单 if后面括号中的参数随着CMake版本的推进 在else和endif中也可以不用写了 if address else endif 对于if语法 比较常用的就是字符串比较了 这里个人简单用到过两种 一种是这个变
  • 使用scoped穿透方法实现修改vue中mint UI组件样式

    效果 代码 div class goods swiper div
  • 图书商城系统

    摘 要 随着信息科学技术的不断发展与完善 信息化已经成为个人之间甚至是国家之间商务发展的一大趋势 并且广泛应用于商业贸易 国际化的网络 计算机科学以及网络通信之中 电子商务正是依托信息化技术的迅猛发展将全球化的市场集中在网络平台之中 打破了
  • c++基本类型和变量

    基本类型 c 内置类型 setlocale LC ALL chs bool bo true char ch a wchar t wch L 中国 short sh 32767 32768 32767 int i 10 32768 32767
  • runas 显示740 所需的操作需要提升的解决方法

    域环境中 有些软件启动需要用到管理员权限 所以对user用户来说比较麻烦 对IT来说也挺麻烦 每次使用都需要输一次账号密码 后来使用了runas工具就方便了 虽然有些不安全 今天发现这个不起作用了 cmd里输入语句 提示 740 所需的操作
  • C语言内存四区的学习总结(一)---- 静态区

    最近重新学习C语言相关知识 重新提到内存四区的概念 那么在之前的学习的基础上 在这儿做一个简单的总结与分享 一 内存四区建立的流程 可以简单直观的查看下面的这个图片 直接的说明我们的程序在内存中是如何去存储 运行 程序运行的流程说明 1 操
  • 引入字体包

    我接触的设计师都比较喜欢用苹方字体 然后每次都要引入字体包 首先一定要设计师给ttf格式的文件 然后在scss中引入 font face font family PingFangSC Regular font weight normal s
  • pandas数据读取与清洗视频03-pd.read_csv()读取csv、txt文件

    本系列课程适用人群 python零基础数据分析的朋友 在校学生 职场中经常要处理各种数据表格 或大量数据 十万级以上 的朋友 喜欢图表可视化的朋友 系列视频目前可在B站观看 会定期更新 欢迎大家吐槽 本节概要 数据量较大时一般保存为csv或
  • Wireshark TS

    问题背景 用户反馈说观察到一个设备连接的奇怪问题 客户端 172 18 0 122 尝试连接到服务器 172 18 50 1 之后服务器回复 SYN ACK 再收到消息后不久 客户端直接发送 RST 并在一段时间后又重复尝试连接 总结下来就
  • RPC通信功能实现

    Table of Contents RPC通信功能实现 配置参数 调用方法 RPC通信功能实现 HBase的RPC通信功能主要基于Protobuf和NIO这两个组件来实现 在通信管道上选择的是protobuf对外声明的BlockingRpc
  • Linux——僵尸进程以及僵尸进程的处理

    僵尸进程 1 进程中的指令已经执行完成 但是进程PCB结构还没有回收 即子进程先于父进程退出后 子进程的PCB需要其父进程释放 但是父进程并没有释放子进程的PCB 这样的子进程就称为僵尸进程 2 父进程未结束 子进程结束 但父进程没有处理子
  • C语言三大标准C89,C99和C11

    C89 标准 1983 年美国国家标准局 American National Standards Institute 简称 ANSI 成立了一个委员会 专门来制定C语言标准 1989 年C语言标准被批准 被称为 ANSI X3 159 19
  • 59 KVM Skylark虚拟机混部-概述、架构及特性

    文章目录 59 KVM Skylark虚拟机混部 概述 架构及特性 59 1 Skylark概述 59 1 1 问题背景 59 1 2 总体介绍 59 2 架构及特性 59 2 1 总体实现框架 59 2 2 功耗干扰控制 59 2 3 L