文章目录
- 59 KVM Skylark虚拟机混部-概述、架构及特性
- 59.1 Skylark概述
- 59.1.1 问题背景
- 59.1.2 总体介绍
- 59.2 架构及特性
- 59.2.1 总体实现框架
- 59.2.2 功耗干扰控制
- 59.2.3 LLC/MB干扰控制
- 59.2.4 CPU干扰控制
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
:数据收集类,有HostInfo
和GuestInfo
两个成员,分别用于收集主机信息和虚拟机信息。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 和内存带宽。
- Skylark 在
/sys/fs/resctrl
目录下建立low_prio_machine
文件夹,并将低优先级虚拟机的 pid 写入/sys/fs/resctrl/low_prio_machine/tasks
文件中。 - 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_SCHED
及 SMT_EXPELLER
特性实现。
QOS_SCHED
特性实现了单个 CPU core 或 SMT 上高优先级虚拟机对低优先级虚拟机的绝对压制,解决了 CPU 时间片干扰问题。SMT_EXPELLER
特性实现了同一个 CPU core 的不同 SMT 上高优先级虚拟机对低优先级虚拟机的绝对压制,解决了 SMT 干扰问题。
Skylark 初始化时,会把 Cgroup CPU 子控制器下低优先级虚拟机对应 slice 层级的cpu.qos_level
字段设置为 -1,以使能上述内核特性,后续就由内核实现对 CPU 相关干扰的控制,Skylark 无需介入。
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!