2016-03-02 6 views
0

У меня есть 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.

ответ

0

Если вы пытаетесь изменить общие ресурсы процессора до того, как systemd достигнет значения default.target, вам необходимо использовать StartupCPUShares=.

+0

Этот параметр 'StartupCPUShares =' вводится позже, чем 'systemd 211'. И мой вопрос больше связан с изменением настроек группы с помощью systemd. Я проверил даже после того, как systemd достигнет 'default.target', если я изменил настройку через dbus или shell, мне все равно нужно перезапустить устройство, чтобы активировать настройку в'/sys/fs/cgroup'. И как я описал в вопросе, изменение должно быть вызвано, что означает не в момент времени 'default.target'. Большое спасибо за вашу помощь. – Shuangistan

+1

Это вполне может быть ошибкой в ​​systemd в этой области. Кажется, вы все пробовали. У вас нет проблемы с привилегией, вы даже получаете свойства, измененные сигналом. Однако вы не получите справки вверх по течению для относительно старой версии systemd. Лучше всего, наверное, перейти на новейшую систему. – Umut

+0

Вы правы, по крайней мере, он работает на моей машине Ubuntu с 'systemd 225'. Спасибо за ваш комментарий. – Shuangistan