Как ограничить количество одновременно выполняемых процессов в приложении?

Допустим, приложение А породило 20 процессов. За один раз A очень занят, и 20 процессов находятся в состоянии runnable. Тогда нагрузка на процессор будет высокой. Время отклика другого приложения будет снижено из-за 20 запущенных процессов.

Если есть способ ограничить количество запущенных процессов в шумном окружении, это уменьшит потери производительности. Например, только 5 процессов находятся в рабочем состоянии, остальные 15 находятся в прерываемом спящем режиме. Доля процессора cgroups или квота CFS мало помогают в этой проблеме. Потому что cgroups не мешает поставить 20 процессов в очередь выполнения.


person highfly22    schedule 30.03.2017    source источник
comment
Вы можете использовать /etc/security/limits.conf для управления этой проверкой поведения — nproc — максимальное количество процессов.   -  person Tharanga Abeyseela    schedule 30.03.2017
comment
Обычно приложение создает пул процессов в соответствии с количеством ядер ЦП. Приложение может сойти с ума, если я ограничу nproc.   -  person highfly22    schedule 30.03.2017
comment
да, это правда, другой способ - это набор задач. Планировщик Linux будет привязан к заданному привязке к ЦП, и процесс не будет выполняться ни на каких других ЦП. не уверен, что это применимо к вашей проблеме.   -  person Tharanga Abeyseela    schedule 30.03.2017
comment
Да, я использую cpuset для изоляции шумного соседа. Это поднимает еще одну сложную проблему — как эффективно распределять ядра ЦП для каждого приложения.   -  person highfly22    schedule 30.03.2017


Ответы (1)


Чтобы установить жесткое ограничение на шумного соседа, вы можете использовать это:

Настраиваемые параметры потолка

cpu.cfs_period_us

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

cpu.cfs_quota_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).

Просто ограничьте его использование, например, на период в 1000 долларов США квотой в 5000 долларов США. Это ограничит его максимальное использование до 5 процессоров без указания, какие именно процессоры.

person Liran Funaro    schedule 27.04.2017