You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过组/GID过滤systemd cgroup用户切片并为特定用户组分配CPU资源?

如何通过组/GID过滤systemd cgroup用户切片并为特定用户组分配CPU资源?

嘿,这个思路完全可行!我来一步步给你讲清楚怎么操作,还有一些需要注意的细节:

首先,你不需要复制整个默认的配置文件,systemd的drop-in机制就是用来做这种局部修改的,既不会破坏系统默认配置,还能精准针对特定组生效。

具体操作步骤:

  1. 创建专属的drop-in配置文件
    不要动系统默认的/lib/systemd/system/user-.slice.d/10-defaults.conf,而是在/etc/systemd/system/user-.slice.d/目录下新建一个优先级更高的文件,比如20-contractor-cpu.conf(文件名前面的数字越大,优先级越高,会覆盖默认配置里的冲突项)。

  2. 编写配置内容
    这个文件里只需要写你要新增或修改的项就行,默认配置里的内容会自动继承,不用重复写:

    [Unit]
    # 这里填你的目标组名或者GID,二选一就行
    ConditionGroup=contractors
    # 比如用GID的话就是 ConditionGroup=1001
    
    [Slice]
    # 设置CPU权重,默认值是100,数值越高,CPU竞争时能拿到的资源越多
    CPUWeight=300
    # 如果需要保留原有的TasksMax=33%,也可以加进来,不过默认配置已经有了,不用重复
    # TasksMax=33%
    
  3. 让配置生效
    执行这条命令重新加载systemd配置:

    systemctl daemon-reload
    

    注意:已经登录的目标组用户需要重新登录,因为他们的用户切片已经创建好了,新配置只对之后创建的切片生效。

关键细节说明:

  • ConditionGroup的作用:这个条件会让这个切片配置只对属于目标组的用户生效,其他用户还是会使用系统默认的用户切片配置,完美实现你的分组过滤需求。
  • CPUWeight的逻辑:这是一个相对权重值,默认所有用户的CPUWeight都是100。比如你给目标组设为300,当该组用户和普通用户同时占满CPU时,目标组用户会拿到3/4的CPU资源(300/(300+100)),如果有多个目标组用户,他们会平分这个组的总权重。
  • 验证配置是否生效:
    • 让目标组用户登录后,执行systemctl status user-<用户UID>.slice,可以看到该切片的配置详情
    • 或者用systemctl show user-<用户UID>.slice --property CPUWeight直接查看CPU权重是否正确设置

补充提醒:

如果你之前想复制默认配置再修改,其实完全没必要——drop-in机制会自动合并主配置和你的自定义配置,只写需要新增的项就够了,这样也能避免系统更新时覆盖你的修改。

备注:内容来源于stack exchange,提问作者OldManWaterfall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:08:04