Alibaba Cloud Linux 4混部调度能力增强(Group Identity 2.0)使用说明

更新时间:
复制 MD 格式

Alibaba Cloud Linux 4(以下简称Alinux 4)基于Linux 6.6 LTS内核将混部调度能力升级为Group Identity 2.0,融合EEVDF、core schedulingsched_idle语义,在保障在线业务QoS的同时提升整机资源利用率。本文介绍该能力相比Alinux 3的升级内容、整体开启方法以及cgroup详细配置。

整体说明

相比Alibaba Cloud Linux 3已有的Group Identity 1.0混部能力,Alibaba Cloud Linux 4对混部调度做了架构级增强:从基于高低优双红黑树和IPI协调的定制化驱逐机制,升级为融合EEVDF、core schedulingsched_idle语义的生产级混部调度能力,在保障在线业务QoS的同时提升整机资源利用率。

  • 架构更先进:Alinux 3的定制化Group Identity机制,升级为和EEVDF、core scheduling、sched_idle深度结合的新内核混部能力。

  • 在线更稳定:CPU竞争和SMT干扰场景下都有更明确的保护路径,降低尾延迟和抖动。

  • 混部更可控:保留存量兼容与运维开关,同时增强灰度、观测和回退能力,适合生产分阶段上线。

升级内容

下表从调度队列模型、驱逐隔离机制、抢占语义、低优任务腾挪和生产可控性五个方面,说明Alinux 4混部调度相比Alinux 3的升级点及价值。

技术领域

Alinux 3能力

Alinux 4能力(升级)

价值

调度队列模型

基于高低优双红黑树区分在线/离线任务,支持per-cgroup identityBVT兼容配置。

融入EEVDF调度模型,在统一的公平调度框架下处理业务分级和低优任务让渡。

调度行为更贴近新内核主线机制,公平性、可维护性和长期演进能力更好。

驱逐隔离机制

高优任务触发时,通过expel判断和reschedule IPI协调SMT兄弟核上的低优任务让出CPU。

基于core scheduling cookie建模expeller/expellee,并结合pick路径的expel判断,面向SMT同核竞争做更精细的隔离。

降低离线任务对在线任务的超线程干扰,在线业务尾延迟更稳。

抢占语义

通过high/underclass、absolute expel、idle seeker/idle saver等定制策略实现优先级压制。

结合cpu.priority三态分级;低优业务复用sched_idle语义,在资源紧张时自然让路、资源空闲时继续运行。

业务优先级表达更清晰,在线保护和离线资源利用之间更容易平衡。

低优任务腾挪

已支持expellee迁移、rescue、ID_LOAD_BALANCE、ID_BOOK_CPU等能力,避免低优任务长期被压制。

在新调度框架下继续增强低优任务push/rescue/fallback行为,减少无效迁移和驱逐后的长期饿死。

高峰期快速保障在线业务,低峰期继续吃满空闲CPU,提升混部收益。

生产可控性

提供sysctl开关、force disable、fast path、stop_machine切换及多项计数/vruntime修正。

延续兼容接口并增强统计、调优和边界修复能力,支持更稳妥的灰度上线。

便于分阶段启用、观测效果和快速回退,降低生产落地风险。

使用方法

整体功能开启

为避免内核版本分叉,混部能力采用编译时代码合入、运行时动态开启的策略。下表列出各功能项的默认状态、操作方式及验证方法。

模块

功能项

默认状态

用户是否需要操作

操作方式

说明/验证方法

编译配置

CONFIG_GROUP_IDENTITY

x86:on;其他架构:off

不需要操作

编译时开启。

控制整体功能是否集成。

调度抢占策略

GROUP_IDENTITY_PREEMPT

off

需要打开

开启:echo GROUP_IDENTITY_PREEMPT > /sys/kernel/debug/sched/features

关闭:echo NO_GROUP_IDENTITY_PREEMPT > /sys/kernel/debug/sched/features

验证:cat /sys/kernel/debug/sched/features输出中出现GROUP_IDENTITY_PREEMPT表示已开启。

SMT压制策略

ID_SMT_EXPEL

off

需要打开

开启:echo ID_SMT_EXPEL > /sys/kernel/debug/sched/features

关闭:echo NO_ID_SMT_EXPEL > /sys/kernel/debug/sched/features

expeller高优先级任务会抑制相同核里不同SMT上的低优先级任务,避免对expeller造成超线程执行单元竞争。

ID_EXPELLER_SHARE_CORE

on

建议关闭

开启:echo ID_EXPELLER_SHARE_CORE > /sys/kernel/debug/sched/features

关闭:echo NO_ID_EXPELLER_SHARE_CORE > /sys/kernel/debug/sched/features

允许expeller共享SMT。混部场景需要尽量打散运行,建议关闭。

ID_EXPELLEE_NEVER_HOT

off

建议打开

开启:echo ID_EXPELLEE_NEVER_HOT > /sys/kernel/debug/sched/features

关闭:echo NO_ID_EXPELLEE_NEVER_HOT > /sys/kernel/debug/sched/features

低优任务忽略热缓存,迁移时不考虑cache热度。

ID_RESCUE_EXPELLEE

off

建议打开

开启:echo ID_RESCUE_EXPELLEE > /sys/kernel/debug/sched/features

关闭:echo NO_ID_RESCUE_EXPELLEE > /sys/kernel/debug/sched/features

低优任务忽略CPU负载,迁移时不考虑CPU上任务数量。

ID_PUSH_EXPELLEE

off

建议打开

开启:echo ID_PUSH_EXPELLEE > /sys/kernel/debug/sched/features

关闭:echo NO_ID_PUSH_EXPELLEE > /sys/kernel/debug/sched/features

低优任务被SMT驱逐后,主动push到其它CPU,减少对本Coreexpeller的持续影响。

ID_ABSOLUTE_EXPEL

off

建议打开

开启:echo ID_ABSOLUTE_EXPEL > /sys/kernel/debug/sched/features

关闭:echo NO_ID_ABSOLUTE_EXPEL > /sys/kernel/debug/sched/features

有高优先级任务时,完全不让低优先级任务运行。

负载均衡策略

ID_LOAD_BALANCE

off

建议打开

开启:echo ID_LOAD_BALANCE > /sys/kernel/debug/sched/features

关闭:echo NO_ID_LOAD_BALANCE > /sys/kernel/debug/sched/features

对高优先级任务进行专门的load balance,避免高优先级任务在局部CPU上堆积导致的CPU调度延迟。

Cgroup详细配置

高优先级抢占

通过cpu.priority接口配置任务的抢占能力,取值含义如下表。

接口

可配置数值

含义

备注

cpu.priority

1

高优先级任务

会同步设置cpu.idle = 0

0

普通任务

会同步设置cpu.idle = 0

-1

低优先级任务

会同步设置cpu.idle = 1

  • 不可配置根组Cgroup。

  • 配置只接受1-10三种数值,其它数值不接受。

  • 建议通过cpu.identity统一优先级语义,不建议单独设置cpu.idle

  • 各层级Cgroup可单独配置,但在共同祖先下比较。例如根节点从上到下有两条路径A->BA->C->D,那么BD竞争时,由于A是最低的共同祖先,实际由BC进行竞争(C代表D)。

  • cgroup.idleshares默认值为3,如需更改,需要执行sysctl -w sysctl_sched_idle_shares_relax=1打开。

SMT驱逐

通过cpu.identity接口配置任务的SMT驱逐能力,取值含义如下表。

接口

可配置数值

含义

备注

cpu.identity

1

高优先级任务expeller

会驱逐SMT对端identity为-1的任务。

0

普通任务

-1

低优先级任务

会被SMT对端identity1的任务驱逐。

  • 底层实现是为两种identity任务创建两种不同的cookie。如果需要高优任务对低优任务的SMT持续驱逐,需要打开ID_SMT_EXPEL。在这种情况下,建议同时打开ID_RESCUE_EXPELLEEID_PUSH_EXPELLEE,以避免低优先级任务饿死。

  • 高优任务如果对SMT干扰特别敏感,为尽可能减少高优先级任务之间的SMT干扰,可以设置NO_ID_EXPELLER_SHARE_CORE

  • 不可配置根组Cgroup。

  • 配置只接受1-10三种数值,其它数值不接受。

  • 只对当前cgroup的任务生效。当多层cgroupidentity值一样时,不受cgroup祖先控制,也不对cgroup后代产生影响。建议只在叶子结点设置,避免歧义。

  • 创建子cgroup时,子cgroup会继承父cgroupidentity。

接口变化

说明

相比5.10内核,cpu.identity(整体)接口语义已变化,拆分为cpu.priority(抢占能力)和cpu.identity(SMT驱逐能力);cpu.bvt_warp_ns接口保持兼容。

任务类型

cpu.priority(抢占能力)

cpu.identity(SMT驱逐能力)

对比5.10 Group Identity 1.0配置映射关系

配置建议说明

高优先级任务

1

1

cpu.bvt_warp_ns = 2

具备抢占能力,且具备对SMT低优任务的驱逐能力。

优先任务

1

0

cpu.bvt_warp_ns = 1

具备强抢占能力。

普通任务

0

0

cpu.bvt_warp_ns = 0

使用默认配置,不参与特殊调度策略。

低优先级任务

-1

-1

cpu.bvt_warp_ns = -1

降低抢占能力,同时允许被SMT驱逐,适用于后台或低敏感任务。

注意事项

历史上在5.10内核上开发了Group Identity 1.0版本,目前在6.6内核上开发Group Identity 2.0版本。可通过以下命令区分:

cat /sys/kernel/group_identity/abi

如果/sys/kernel/group_identity/abi文件存在且读取后返回数字2,表示支持Group Identity 2.0,否则不支持。5.10内核里没有该文件。