【问题标题】:systemd resource control SetProperties with gdbus at runtime在运行时使用 gdbus 的 systemd 资源控制 SetProperties
【发布时间】:2016-03-02 14:05:41
【问题描述】:

我有一个带有 cgroup 设置 CPUShares 的 systemd foo.slice。 我的想法是在系统启动期间的某个时刻更改设置,这将由 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

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

【问题讨论】:

    标签: dbus systemd cgroups gdbus


    【解决方案1】:

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

    【讨论】:

    • 这个选项StartupCPUShares=systemd 211晚引入。我的问题更多是关于使用 systemd 更改 cgroup 设置。即使在 systemd 到达default.target 后我也检查过,如果我通过 dbus 或 shell 更改设置,我仍然需要重新启动单元以激活/sys/fs/cgroup 中的设置。正如我在问题中描述的那样,应该触发更改,这意味着不是在default.target 的时间点。非常感谢您的帮助。
    • 这很可能是 systemd 在这方面的一个错误。你似乎已经尝试了一切。你没有特权问题,你甚至得到了属性改变的信号。但是,对于相对较旧的 systemd 版本,您不会从上游获得帮助。您最好的选择可能是升级到最新的 systemd。
    • 你是对的,至少它可以在我的带有systemd 225 的 Ubuntu 机器上运行。感谢您的评论。
    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多