长期支持版本

    社区创新版本

      Skylark

      Skylark概述

      问题背景

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

      总体介绍

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

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

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

      架构及特性

      总体实现框架

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

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

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

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

      功耗干扰控制

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

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

      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文件中。

      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 无需介入。

      安装Skylark

      硬件要求

      处理器架构:仅支持 AArch64 和 Intel x86_64 处理器架构。

      • Intel 处理器需支持 RDT 功能。
      • AArch64 当前仅支持 Kunpeng920,且需将 BIOS 升级到 1.79 及以上以支持 MPAM 功能。

      软件要求

      • 依赖 python3、python3-APScheduler、python3-libvirt 等 python 组件。
      • 依赖 systemd 组件,版本 >= 249-32
      • 依赖 libvirt 组件,版本 >= 1.0.5
      • 依赖 openEuler 内核,版本 >= 5.10.0

      安装方法

      推荐使用 yum 安装 Skylark 组件,因为 yum 会自动处理上述软件依赖:

      # yum install -y skylark
      

      检查 Skylark 是否安装成功,若安装成功则会显示 skylarkd 后台服务状态:

      # systemctl status skylarkd
      

      设置 Skylark 服务开机自启动(可选):

      # systemctl enable skylarkd
      

      配置Skylark

      安装好 Skylark 组件后,若默认配置不满足需求,可修改配置文件。Skylark 的配置文件路径为/etc/sysconfig/skylarkd,下面对该配置文件包含的配置项作详细说明。

      日志

      • LOG_LEVEL用于设置最小日志级别,类型为字符串。所有可设置的日志级别及其关系为critical > error > warning > info > debug。级别小于LOG_LEVEL的日志将不会输出到日志文件。日志文件路径为/var/log/skylark.log。Skylark 会每 7 天备份一次日志,最多备份 4 次(当次数超限时,会删除最旧的日志)。备份的日志路径为/var/log/skylark.log.%Y-%m-%d

      功耗干扰控制

      • POWER_QOS_MANAGEMENT用于控制是否打开功耗 QoS 管理功能,类型为布尔。当前仅 x86 支持该功能。如果主机上虚拟机的 CPU 利用率能被很好地限制,该功能可选。

      • TDP_THRESHOLD用于控制虚拟机可达到的最大功耗。当主机功耗超过TDP * TDP_THRESHOLD时,将判断为出现 TDP 热点,触发功耗控制操作。类型为 float,可接受的输入范围为 0.8-1,默认值为 0.98。

      • FREQ_THRESHOLD用于控制当主机出现 TDP 热点时,CPU 运行的最低频率。类型为 float,可接受的输入范围为 0.9-1,默认值为 0.98。

        1. 当存在某些 CPU 的频率低于max_freq * FREQ_THRESHOLD时,Skylark 会限制在这些 CPU 上运行的低优先级虚拟机的 CPU 带宽。
        2. 当找不到这样的 CPU,则 Skylark 也会根据低优先级虚拟机的 CPU 利用率情况,选择性限制某些低优先级虚拟机的 CPU 带宽。
      • QUOTA_THRESHOLD用于控制低优先级虚拟机被限制后所能获得的 CPU 带宽(限制前的 CPU 带宽 * QUOTA_THRESHOLD)。类型为 float,可接受的输入范围为 0.8-1,默认值为 0.9。

      • ABNORMAL_THRESHOLD用于控制低优先级虚拟机被限制的周期。类型为 int,可接受的输入范围为 1-5,默认值为 3。

        1. 在每个功耗控制周期内,如果某个低优先级虚拟机被限制,其剩余被限制周期刷新为ABNORMAL_THRESHOLD,否则其剩余被限制周期减 1。
        2. 当虚拟机的剩余被限制周期等于 0 时,其 CPU 带宽恢复为被限制前的值。

      LLC/MB干扰控制

      Skylark 对 LLC/MB 的干扰控制依赖于硬件使能 RDT/MPAM 功能,Intel x86_64 架构处理器需在内核 cmdline 配置rdt=cmt,mbmtotal,mbmlocal,l3cat,mba,Kunpeng920 处理器需在内核 cmdline 配置mpam=acpi

      • MIN_LLC_WAYS_LOW_VMS用于控制低优先级虚拟机可访问的 LLC ways。类型为 int,可接受的输入范围为 1-3,默认值为 2。Skylark 会在初始化时,限制低优先级虚拟机的 LLC ways 为该值。

      • MIN_MBW_LOW_VMS用于控制低优先级虚拟机可访问的内存带宽比例。类型为 float,可接受的输入范围为 0.1~0.2,默认值为 0.1。Skylark 会在初始化时,限制低优先级虚拟机的内存带宽为该值。

      使用Skylark

      启动服务

      初次启动:

      # systemctl start skylarkd
      

      重新启动(修改配置文件后需重启):

      # systemctl restart skylarkd
      

      创建虚拟机

      Skylark 借助虚拟机 XML 配置文件的partition标签标识虚拟机优先级属性。

      创建低优先级虚拟机,其 XML 需做如下配置:

      <domain>
        ...
        <resource>
          <partition>/low_prio_machine</partition>
        </resource>
        ...
      </domain>
      

      创建高优先级虚拟机,其 XML 需做如下配置:

      <domain>
        ...
        <resource>
          <partition>/high_prio_machine</partition>
        </resource>
        ...
      </domain>
      

      后续创建虚拟机流程和一般流程无异。

      虚拟机运行

      Skylark 能感知到虚拟机创建事件,纳管所有高、低优先级虚拟机,并围绕 CPU、功耗、LLC/MB 等资源做自动化 QoS 管理。

      最佳实践

      虚拟机业务推荐

      • 高优先级虚拟机业务推荐:时延敏感类业务,如 web 服务、高性能数据库、实时渲染、机器学习推理等。
      • 低优先级虚拟机业务推荐:非时延敏感类业务,如视频编码、大数据处理、离线渲染、机器学习训练等。

      虚拟机绑核配置

      为了让高优先级虚拟机达到最佳性能,推荐高优先级虚拟机 vCPU 与物理 CPU 一对一绑核。为了让低优先级虚拟机充分利用空闲物理资源,推荐低优先级虚拟机 vCPU 范围绑核,且绑核范围覆盖高优先级虚拟机绑核范围。

      同时为了防止出现因高优先级虚拟机长时间占满 CPU 导致低优先级虚拟机无法被调度的情况,需要预留少量低优先级虚拟机专用的 CPU,该部分 CPU 不可让高优先级虚拟机绑定,且要求让低优先级虚拟机绑定。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份