systemd 的 cgroup 配置在哪里?

systemd 的 cgroup 配置在哪里?

我的理解是,默认情况下,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

(我欢迎对这一点的任何纠正。)

相关内容