我有一個systemd foo.slice
,cgroup設置爲CPUShares
。 我的想法是在系統啓動期間的某個時刻更改設置,這將由systemd服務觸發。系統資源控制在運行時使用gdbus的SetProperties
我做了一些測試工作來檢查如何在運行時更改設置。
在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
。
此選項'StartupCPUShares ='比'systemd 211'晚。而我的問題更多的是通常用systemd更改cgroup設置。我甚至在systemd達到default.target後檢查,如果我通過dbus或shell更改了設置,我仍然需要重啓設備以激活'/ sys/fs/cgroup'中的設置。正如我在問題中所描述的那樣,應該觸發更改,這意味着不在'default.target'的時間點。非常感謝您的幫助。 – Shuangistan
這可能是systemd在這個領域的一個bug。你好像你已經嘗試了一切。你沒有特權問題,你甚至可以獲得改變信號的屬性。但是,您不會從上游獲得相對較舊的系統版本的幫助。你最好的選擇可能是升級到最新的systemd。 – Umut
你是對的,至少它可以在我的Ubuntu機器上運行'systemd 225'。謝謝你的評論。 – Shuangistan