在运行时使用 gdbus 进行 systemd 资源控制 SetProperties
systemd resource control SetProperties with gdbus at runtime
我有一个带有 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
。
如果您试图在 systemd 达到其 default.target 之前更改 cpu 份额,您需要使用 StartupCPUShares=
。
我有一个带有 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
。
如果您试图在 systemd 达到其 default.target 之前更改 cpu 份额,您需要使用 StartupCPUShares=
。