CPU 相对权重
cpu.weight 是 cgroup v2 中控制组之间的 CPU 时间相对份额,默认 100,范围 1 到 10000。它只在多个组同时竞争 CPU 时起作用,按权重比例分配时间;空闲时没有任何上限,单个组可以吃掉几乎全部 CPU。要限制峰值请用 cpu.max 配额,要绑定核心请用 cpuset。cgroup v1 的对应参数是 cpu.shares(默认 1024),两者数值体系不同,迁移时不能照抄。
基本信息
| 接口 | /sys/fs/cgroup/<组>/cpu.weight |
|---|---|
| 默认值 | 100 |
| 取值范围 | 1 到 10000 |
| systemd 对应 | CPUWeight=200 |
| v1 对应参数 | cpu.shares,默认 1024 |
典型使用场景
- 多服务共享同一台机器,按重要性分配份额
- 保护关键业务在资源争抢时获得更多时间
- 与 cpu.max 搭配:权重管竞争分配,配额管峰值上限
- 容器编排中为不同优先级的工作负载设置权重
- 排查「调高权重后空闲时也没变快」的误解
查看与设置
查看与设置
cat /sys/fs/cgroup/<组>/cpu.weight
echo 200 > /sys/fs/cgroup/<组>/cpu.weight
systemctl set-property myservice.service CPUWeight=200
cat /sys/fs/cgroup/<组>/cpu.stat # 查看实际用量与节流统计
systemd-cgtop -m # 各组实时 CPU 占用对比
cat /sys/fs/cgroup/cpu.weight # 根组取值,用于换算相对比例权重与配额的分工
| 参数 | 语义 | 何时生效 |
|---|---|---|
| cpu.weight | 组之间的相对份额 | 仅在多个组竞争同一 CPU 时生效 |
| cpu.max | 组的绝对带宽上限 | 始终生效,超限即节流 |
| cpu.shares(v1) | v1 的对应参数 | 数值体系不同,迁移需重新设计 |
权重只在争用时生效:空闲时任务可以远超其份额,想要峰值上限必须用 cpu.max。
权重是相对值:把一组从 100 调到 200,等价于把其他组的相对份额减半,实际效果取决于同一父组下所有兄弟组的取值组合。
常见误解与事实
- 误解权重越高越先被调度,事实是它按比例分配时间,不改变先后顺序
- 误解调高权重能提高峰值性能,事实是系统空闲时权重不参与计算
- 误解 v1 与 v2 的数值可以互抄,事实是 shares 默认 1024 与 weight 默认 100 体系不同
- 误解只改一个组就够,事实是份额是相对量,取决于同层所有组的取值