我的理解是,默认情况下,systemd 将启动单个 cgroup 下的所有进程,其中 cpu.share=1024。如果您选择覆盖某个服务的 cpu.share,它将为该服务下的进程创建一个新的 cgroup,并将 cpu.share 设置为您选择的任何值。
我想使用自定义 cpu.share 手动创建一个新的 cgroup,它可以提供 60% 的 CPU。为此,我需要知道所有现有 cgroup 的 cpu.share 值。 systemd 在哪里设置这些值?有没有简单的方法让我得到这个? /sys/fs/cgroup/cpu 仅包含根组(设置为 1024)和我手动创建的组。
答案1
systemd 的 CGroup 选项记录在man systemd.exec
(或在man systemd.resource-control
)。听起来您正在寻找的是:
CPUWeight=weight
,StartupCPUWeight=weight
如果系统上使用统一控制组层次结构,则将指定的 CPU 时间权重分配给执行的进程。这些选项采用整数值并控制“
cpu.weight
”控制组属性。允许的范围是 1 到 10000。默认为 100。有关此控制组属性的详细信息,请参见cgroup-v2.txt和 计划设计-CFS.txt。可用 CPU 时间根据 CPU 时间权重在一个切片内的所有单元之间分配。
答案2
我的理解是,默认情况下,systemd 将启动单个 cgroup 下的所有进程,其中 cpu.share=1024。
我不相信这是正确的。不过,请不要相信我的话具有权威性。以下是使我得出此结论的文档部分:
从systemd.resource-control(5)
:
CPUAccounting= Turn on CPU usage accounting for this unit. Takes a boolean argument. Note that turning on CPU accounting for one unit might also implicitly turn it on for all units contained in the same slice and for all its parent slices and the units contained therein. The system default for this setting maybe controlled with DefaultCPUAccounting= in systemd- system.conf(5).
并且:
CPUShares=weight, StartupCPUShares=weight ... Those options imply "CPUAccounting=true".
正如我所读到的,如果没有单位设置了值CPUShares
并且CPUAccounting
没有在任何地方显式启用(并且DefaultCPUAccounting
没有在 中设置),那么 systemd 可能根本system.conf
不会(不会?)使用层次结构。cpu
(我欢迎对这一点的任何纠正。)