У меня есть systemd foo.slice
с настройкой группы CPUShares
. Моя идея - изменить настройку в определенный момент во время запуска системы, который будет запущен службой systemd.systemd управление ресурсами SetProperties с gdbus во время выполнения
Я выполняю некоторые тестовые работы, чтобы проверить, как изменить настройку во время выполнения.
В 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>)]"
И я буду get
@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.
Этот параметр 'StartupCPUShares =' вводится позже, чем 'systemd 211'. И мой вопрос больше связан с изменением настроек группы с помощью systemd. Я проверил даже после того, как systemd достигнет 'default.target', если я изменил настройку через dbus или shell, мне все равно нужно перезапустить устройство, чтобы активировать настройку в'/sys/fs/cgroup'. И как я описал в вопросе, изменение должно быть вызвано, что означает не в момент времени 'default.target'. Большое спасибо за вашу помощь. – Shuangistan
Это вполне может быть ошибкой в systemd в этой области. Кажется, вы все пробовали. У вас нет проблемы с привилегией, вы даже получаете свойства, измененные сигналом. Однако вы не получите справки вверх по течению для относительно старой версии systemd. Лучше всего, наверное, перейти на новейшую систему. – Umut
Вы правы, по крайней мере, он работает на моей машине Ubuntu с 'systemd 225'. Спасибо за ваш комментарий. – Shuangistan