Планирование процессов Linux пользователем?

Планирование процессов Linux пользователем?

Похоже, Linux планирует выполнение процесса независимо от пользователя процесса. Так что, если один пользователь запускает 100 процессов, а другой пользователь запускает 1 процесс, в среднем первый получит в 100 раз больше процессорного времени, чем второй.

Существует ли возможность сбалансировать процессорное время по пользователям, то есть в этом примере оба пользователя получат по 50% процессорного времени?

решение1

Поскольку это Linux, то, конечно, настройки по умолчанию относительно базовые, но есть много конкурирующих вариантов инструментов для их изменения. Но не все они доступны в каждом дистрибутиве, поэтому не очевидно, какой из них использовать.

В системах cgroups ресурсы ЦП поддерживают модель взвешенного распределения, в которой каждой группе назначается доля доступных ресурсов в пропорции, соответствующей весу.

В системах systemd концепция среза напрямую соответствует использованию cgroups. Читатьman systemd.resource-controlи рассмотрите возможность включения DefaultCPUAccounting=. Применить тот же коэффициент ЦП к каждому рассматриваемому блоку. Например, чтобы сделать это для каждого интерактивного пользователя, введите это как-то так /etc/systemd/system/user-.slice.d/resource.conf

[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control

[Slice]
CPUWeight=100

Точное значение числа не важно, пока каждый рассматриваемый блок получает что-то в правильной пропорции. Кроме того, они не делят общий системный ЦП, а ЦП, назначенный родительскому user.slice. Если вместо этого настраивается сервисный блок, они выходят из system.slice.

В системах, использующих pam_limit, ограничения ресурсов POSIX могут быть установлены для вошедших в систему пользователей. Смотрите man limits.conf, и файл конфигурации может быть вставленным, как /etc/security/limits.d/resource.conf. Практической вещью может быть установка nprocмаксимального количества задач, которые получает пользователь. Превышение этого значения приведет к тому, что все не сможет разветвляться. Или, cpuявляется заманчивым ограничением, однако превышение жесткого ограничения может привести к завершению процессов, что не очень удобно для пользователя.

А для варианта задания детской игры красный свет зеленый свет, естьcpulimit. Это отправляет сигналы SIGSTOP и SIGCONT для управления использованием ЦП, просто. Примечательно, что это немного ad hoc, так как нет файла конфигурации, его нужно вызывать для запуска процесса или ему нужно дать PID.

решение2

Вы можете использовать cgroup и назначать приложения в соответствии с вашими требованиями, одна из ссылок —cgroups-v2

Связанный контент