首页/系统/Linux 内核与性能调优速查/cgroup v2 cpu.weight 相对权重
CPU 与调度60 条

cgroup v2 cpu.weight 相对权重

cpu.weight 是 CPU 时间的相对份额(默认 100,范围 1-10000);仅在多组竞争 CPU 时按权重分配,空闲时不设上限。

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 体系不同
  • 误解只改一个组就够,事实是份额是相对量,取决于同层所有组的取值

易错点

  • 以为权重能限速:空闲时高权重组仍可用满 CPU,需要上限请用 cpu.max
  • 把 v1 与 v2 的数值直接照搬:cpu.shares 默认 1024 与 cpu.weight 默认 100 换算关系不同
  • 只调一个组的权重:份额是相对量,效果由整棵控制组的取值共同决定
  • 忽略 cgroup 层级:父组权重与子组共同作用,只改叶子组可能看不到预期变化
  • 把权重当优先级顺序:它按比例分配时间,不是严格的先后次序

数据来源与参考

  • Linux 内核 Documentation/admin-guide/cgroup-v2.rst
  • systemd.resource-control 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌