v2 2026-08-27

调度器 LLC 粒度缓存感知聚合 · v2

将缓存感知的任务聚合从单 LLC 域扩展到 LLC 粒度序贯扩展,回答 LLC 选择顺序与线程组扩散程度问题。

原始补丁链接

子 Patch(14)

1/14
sched/topology: Add llc_to_node() to translate LLC id to NUMA node
新增 llc_to_node_map 映射和 llc_to_node() 接口,根据 possible CPU 集推导每个 LLC 所属 NUMA 节点,供亲和距离矩阵查询。
2/14
sched/topology: Introduce a NUMA distance matrix with unique distance values
基于 BIOS 原始距离矩阵生成 refined 矩阵,使每行距离值唯一且保持相对顺序,仅供缓存感知调度,不改变现有 sched domain 构建。
3/14
sched/topology: Introduce a macro to traverse node
新增遍历 NUMA 节点的宏,按 refined 距离矩阵的行升序访问各节点,为后续按距离优先级选择合格 LLC/节点提供遍历顺序。
4/14
sched/topology: Introduce a method to calculate the llc distance
用 dist=(rank1+rank2)%k+1 计算同节点内 LLC 距离,对角线硬编码 0,仅保证从单一参考 LLC 看距离唯一,用于节点内 LLC 排序。
5/14
sched/topology: Introduce a macro to traverse LLC inside node
增加 by-node 的 LLC 遍历宏:给定节点 ID 后按节点内 LLC 距离矩阵升序返回对应 LLC cpumask,支撑 LLC 级轮询。
6/14
sched/topology: Add sd_node for the NODE sched domain
新增每CPU变量 sd_node 保存 NODE 级调度域指针,使后续补丁能直接获取节点域,避免重复遍历调度拓扑查找。
7/14
sched/cache: Prioritize preferred NUMA node selection over LLC selection
修改 fair.c 的优选逻辑:先在 NUMA 层选首选节点,再在节点内选首选 LLC,降低任务散布全系统时 LLC 频繁迁移。
8/14
sched/topology: Introduce a per-CPU tasks NUMA preferred counter
新增每CPU/NUMA 偏好计数器 sd->numa_counts,类似于 sd->llc_counts,用于统计每个 rq 上偏好各 NUMA 节点的任务数。
9/14
sched/cache: Account percpu sd task NUMA preference
在任务入队/出队等路径中同步更新 per-rq 调度域的 NUMA 偏好计数,使 NUMA 偏好统计与既有 LLC 计数逻辑保持一致。
10/14
sched/topology: Add per-sd scratch for the load balance affinity score
负载均衡亲和力评分需要两个按 LLC 数量伸缩的临时数组,现作为 per-sd scratch 预分配,避免每次平衡调用时动态分配。
11/14
sched/cache: Introduce helpers for task migration decisions
新增迁移许可 helper:通过两阶段策略(先节点级、再节点内 LLC 序列)解析首个合格 LLC,并判断目标 CPU 是否在其 cpumask 内,以支持跨 LLC 扩展。
12/14
sched/cache: Introduce rq affinity gain calculation
实现 rq 亲和力增益计算:遍历系统节点或节点内 LLC,根据源/目标 NUMA 距离差量化迁移收益,能发现非首选 LLC 但 NUMA 更优的迁移。
13/14
sched/cache: Pick optimal src rq/group using affinity promotion metric
负载均衡选择源调度组/rq 时改用亲和力提升指标,取代仅匹配 LLC 偏好的策略,从而挑出 NUMA 亲和性改善最大的源。
14/14
sched/cache: Drop prefer_sibling restriction for llc_balance
移除 group_llc_balance 分支条件中的 prefer_sibling 限制,使 LLC/NUMA 域负载均衡不再受该调度特性约束。