Как мне настроить LXC, чтобы разрешить использование SCHED_RR в контейнере?
Любые идеи о том, как я могу настроить LXC/cgroups, чтобы разрешить использование SCHED_RR для приложений в контейнере?
В интернете я видел упоминание о размонтировании cpu-cgroup, я пробовал это вручную (запуск umount на cpu cgroup), что, похоже, не помогло.
Любые идеи о том, как я постоянно размонтирую cgroup? На Федоре 20.
Является ли размонтирование, cpu cgroup, правильным методом, позволяющим приложениям-контейнерам использовать SCHED_RR?
Спасибо
2 ответа
Я считаю, что в дополнение к CAP_SYS_NICE вам также понадобится CAP_SYS_ADMIN. Я не могу сказать наверняка, но в ядре есть проверка для ioprio(), которая требует CAP_SYS_ADMIN && CAP_SYS_NICE для приоритета в реальном времени, такого как SCHED_RR.
Смотрите http://linux.die.net/man/2/ioprio_set
(Требуемые разрешения для установки приоритетов ввода / вывода)
Я столкнулся с той же проблемой с любыми вызовами sched_setsched(), возвращающими EPERM, когда я пытаюсь изменить приоритет планирования в контейнере. Я также получаю сообщение об ошибке EPERM, когда я пытаюсь сделать то же самое изменение с хоста на процесс в контейнере.
РЕДАКТИРОВАТЬ: На самом деле, я ошибаюсь по этому поводу. Я выясняю, как заставить SCHED_RR работать для моей настройки. Вызов sched_setscheduler() был ошибочным с EPERM, потому что я не установил бюджет в реальном времени в папке cgroups.
Политика группы управления не позволяет устанавливать политику планирования в реальном времени без выделения бюджета времени выполнения, который не задан в предоставленной конфигурации.
Помните, что обычно контейнеры LXC сбрасывают возможности при запуске. Вы должны, по крайней мере, разрешить CAP_SYS_NICE в контейнере. Эта возможность позволяет звонить sched_setscheduler()
какой вызов вам нужно установить SCHED_RR.
Пример для справки конфигурации LXC:
lxc.cap.keep = sys_nice
И, конечно, ваши приложения также должны иметь CAP_SYS_NICE (или запускаться от имени пользователя root, и в этом случае они уже будут).