如何通过组/GID过滤systemd cgroup用户切片并为特定用户组分配CPU资源?
如何通过组/GID过滤systemd cgroup用户切片并为特定用户组分配CPU资源?
嘿,这个思路完全可行!我来一步步给你讲清楚怎么操作,还有一些需要注意的细节:
首先,你不需要复制整个默认的配置文件,systemd的drop-in机制就是用来做这种局部修改的,既不会破坏系统默认配置,还能精准针对特定组生效。
具体操作步骤:
创建专属的drop-in配置文件
不要动系统默认的/lib/systemd/system/user-.slice.d/10-defaults.conf,而是在/etc/systemd/system/user-.slice.d/目录下新建一个优先级更高的文件,比如20-contractor-cpu.conf(文件名前面的数字越大,优先级越高,会覆盖默认配置里的冲突项)。编写配置内容
这个文件里只需要写你要新增或修改的项就行,默认配置里的内容会自动继承,不用重复写:[Unit] # 这里填你的目标组名或者GID,二选一就行 ConditionGroup=contractors # 比如用GID的话就是 ConditionGroup=1001 [Slice] # 设置CPU权重,默认值是100,数值越高,CPU竞争时能拿到的资源越多 CPUWeight=300 # 如果需要保留原有的TasksMax=33%,也可以加进来,不过默认配置已经有了,不用重复 # TasksMax=33%让配置生效
执行这条命令重新加载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
相关产品推荐
相关产品推荐

