sched: adjust the layout of the cfs_bandwidth structure to save memory
调度器 · CFS 带宽结构体布局优化 · 省内存
💡 一句话总结
在每 CPU 运行队列都带 CFS 带宽结构的调度场景下,通过调整结构体字段顺序减少内存填充(padding),为每个 cfs_bandwidth 实例省下少量内存。改动极小(3 字段位移),补丁未提供基准数据,收益为逻辑分析。
📋 补丁基本信息
| 项目 | 内容 |
|---|---|
| 补丁类型 | 优化(内存占用) |
| 状态 | In Review(v2 RESEND) |
| 当前版本 | v2 · lore 链接 |
| 作者机构 | Hongling Zeng (Kylin) |
| 提交日期 | 2026-08-03 |
| 改动范围 | 1 文件(kernel/sched/sched.h),+3/-3 行 |
| 核心结构 | struct cfs_bandwidth |
📊 速览卡片
核心机制
字段重排
优化目标
省结构体内存
适用场景
多 CPU 调度
实测提升
未提供
🎯 解决什么问题
背景 / 原始动机
CFS 带宽控制(
CONFIG_CFS_BANDWIDTH)下,每个 struct cfs_bandwidth 实例占一定内存。作者通过重排字段减少填充,节省每个实例的空间。改动只移动 3 个 u8 字段(idle/period_active/slack_started)的位置。
系统层面:结构体填充浪费
原布局中,3 个 u8 字段放在结构体末尾、紧邻 hrtimer 之前。编译器为了对齐可能插入填充字节。把 3 个 u8 移到
raw_spinlock_t lock(8 字节对齐)之后,可让它们紧凑排列,减少填充。
场景层面
多 CPU 系统上每个运行队列都有 CFS 带宽结构,字段重排的省内存效果随 CPU 数放大(解读(AI 分析))。
🧩 核心机制
通过字段重排减少 struct cfs_bandwidth 的填充字节。
改动内容
把
idle/period_active/slack_started 三个 u8 从结构体末尾(hrtimer 前)移到 lock 之后——利用 lock 的 8 字节对齐,让三个 u8 紧凑排列,减少尾部填充。
🔬 关键代码
struct cfs_bandwidth {
#ifdef CONFIG_CFS_BANDWIDTH
raw_spinlock_t lock;
+ u8 idle;
+ u8 period_active;
+ u8 slack_started;
ktime_t period;
u64 quota;
u64 runtime;
...
s64 hierarchical_quota;
-
- u8 idle;
- u8 period_active;
- u8 slack_started;
struct hrtimer period_timer;▲ 3 个 u8 位移到 lock 后,紧凑排列省填充(逐字 diff,+3/-3)。
📈 性能影响
**补丁未提供基准数据。** 收益为逻辑分析(解读(AI 分析)):每个 cfs_bandwidth 省下填充字节,多 CPU 系统上总量可观,但单实例节省很小,无实测量化。
🔗 交叉引用
📌 关联工作
mm: Unconditional per-VMA locks and cleanups — 同日报另一篇结构体/锁优化(内存侧),均为减少内核结构占用/争用
PATCH RESEND v2 lore — 本补丁原始链接
PATCH RESEND v2 lore — 本补丁原始链接
⚠️ 风险与局限
潜在回归 / 边界
改动极小:仅字段位移,无逻辑变化,回归风险低。
收益有限:单结构体省几个字节,无 benchmark 支撑,属微优化(解读(AI 分析))。
收益有限:单结构体省几个字节,无 benchmark 支撑,属微优化(解读(AI 分析))。
严重度:MINOR · 补丁无 review 讨论记录(RESEND 提示曾被忽略)
✅ 关键洞察
- 发现:cfs_bandwidth 字段重排省填充内存,是结构体布局微优化
- 证据:无基准数据;收益为逻辑分析
- 边界:多 CPU 系统上省内存总量可观,单实例节省小
- 风险 / 建议:改动安全但收益未量化,RESEND 状态提示需更强论证
⚠️ 免责声明
本站内容均由 AI 基于公开知识辅助生成,仅供学习参考,请勿直接引用作为依据。作者不对信息的准确性、完整性及适用性作保证,亦不对因使用本站内容产生的任何损失承担责任。