Ограничьте общее использование ЦП с помощью cgroups

У меня есть сценарий, который использует ulimit -t 5, чтобы ограничить программу 5 секундами процессорного времени.

Теперь эта программа порождает дочерние элементы, поэтому вместо этого я хочу использовать контрольные группы, чтобы ограничить использование ЦП процессом и его дочерними элементами. Однако я не могу найти способ установить жесткий верхний предел использования ЦП cgroup.


person Chris Jefferson    schedule 24.04.2017    source источник
comment
У меня была та же проблема, но принятый ответ не работал у меня. Я попытался найти альтернативу здесь: stackoverflow.com/questions/45555186   -  person Flogo    schedule 10.08.2017


Ответы (1)


Cgroups не остановит процесс за вас, но ограничит время его выполнения за определенный период. Вы можете использовать очень длинный период для cpu.cfs_period_us и проверять список задач cgroup после этого периода. Если задачи все еще выполняются, убейте их вручную, используя:

kill -9 $(cat /sys/fs/cgroup/.../tasks)

cpu.cfs_period_us

указывает период времени в микросекундах (мкс, представленный здесь как us), в течение которого должен регулярно перераспределяться доступ контрольной группы к ресурсам ЦП. Если задачи в контрольной группе должны иметь доступ к одному ЦП в течение 0,2 секунды из каждой 1 секунды, установите для cpu.cfs_quota_us значение 200000, а для cpu.cfs_period_us — 1000000. Верхний предел параметра cpu.cfs_quota_us равен 1 секунде, а нижний ограничение составляет 1000 микросекунд.

cpu.cfs_quota_us

указывает общее количество времени в микросекундах (мкс, представленное здесь как us), в течение которого все задачи в контрольной группе могут выполняться в течение одного периода (как определено cpu.cfs_period_us). Как только задачи в контрольной группе используют все время, указанное в квоте, они регулируются на оставшееся время, указанное в периоде, и не могут выполняться до следующего периода. Если задачи в контрольной группе должны иметь доступ к одному ЦП на 0,2 секунды из каждой 1 секунды, установите для cpu.cfs_quota_us значение 200000, а для cpu.cfs_period_us значение 1000000. Обратите внимание, что параметры квоты и периода работают на основе ЦП. Например, чтобы позволить процессу полностью использовать два ЦП, установите для cpu.cfs_quota_us значение 200000 и для cpu.cfs_period_us значение 100000. Установка значения в cpu.cfs_quota_us на -1 означает, что контрольная группа не придерживается каких-либо ограничений по времени ЦП. Это также значение по умолчанию для каждой cgroup (кроме корневой cgroup).

person Liran Funaro    schedule 27.04.2017