1

我有一个foo.slice带有 cgroup 设置的 systemd CPUShares。我的想法是在系统启动期间的某个时刻更改设置,这将由 systemd 服务触发。

我做了一些测试工作来检查如何在运行时更改设置。

foo.slice我定义的CPUShares=256. 这会导致cat /sys/fs/cgroup/cpu/foo.slice/cpu.shares 256.

并会得到以下几行gdbus introspect

interface org.freedesktop.systemd1.Slice {
  methods:
  signals:
  properties:
    @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
    readonly s Slice = '-.slice';
    @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
    readonly s ControlGroup = '/foo.slice';
    @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
    readonly b CPUAccounting = false;
    @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
    readonly t CPUShares = 256;

我尝试CPUShares通过调用方法来更改:

@org.freedesktop.systemd1.Privileged("true")
SetProperties(in  b arg_0,
              in  a(sv) arg_1);

使用:

gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd/unit/foo_2eslice --method org.freedesktop.systemd1.Unit.SetProperties true "[('CPUShares', <@t 2048>)]"

我会得到

@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly t CPUShares = 2048;

但我还是得到了cat /sys/fs/cgroup/cpu/foo.slice/cpu.shares 256

重新启动切片后:

gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1/unit/foo_2eslice --method org.freedesktop.systemd1.Unit.Restart 'replace'

我会得到 cat /sys/fs/cgroup/cpu/foo.slice/cpu.shares 2048

我用systemd 211.

我希望了解有关此行为的更多详细信息,或者是否有更好的解决方案,即希望获得一些提示以CPUShares在运行时使用 systemd 更改。

4

1 回答 1

0

如果您尝试在 systemd 达到其 default.target 之前更改 CPU 份额,您需要使用StartupCPUShares=.

于 2016-03-03T12:40:31.343 回答