TL; DR : из краткого исследования выясняется, что можно ограничить команды определенным количеством ядер, однако во всех случаях вы должны использовать команду, которая фактически обеспечивает ограничение.
контрольные группы
Linux имеет то, cgroups
что часто используется именно с целью ограничения ресурсов, доступных процессам. Из очень короткого исследования вы можете найти пример в Arch Wiki с конфигурацией Matlab (научное программное обеспечение), установленной в /etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Чтобы такой конфиг вступил в силу, вы должны запустить процесс с помощью cgexec
команды, например, с той же вики-страницы:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
набор задач
Связанный с ним вопрос о проси Ubuntu и как ограничить процесс до одного ядра процессора в Linux? [duplicate] на сайте Unix & Linux показывает пример использования taskset
для ограничения процессорных ресурсов для процесса. В первом вопросе это достигается путем анализа всех процессов для конкретного пользователя.
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Во втором вопросе процесс запускается через taskset
себя:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Вывод
Хотя, конечно, можно ограничивать процессы, кажется, не так просто добиться этого для конкретных пользователей. Пример в связанном посте Ask Ubuntu потребует согласованного сканирования процессов, принадлежащих каждому пользователю и использующих taskset
каждый новый. Гораздо более разумный подход - выборочно запускать приложения, интенсивно использующие процессор, либо через, cgexec
либо taskset
; также не имеет смысла ограничивать все процессы определенным количеством CPUS, особенно для тех, которые фактически используют параллелизм и параллелизм для более быстрого выполнения своих задач - ограничение их до определенного числа процессоров может привести к замедлению обработки. Кроме того, как отметил ответ Тердона, это пустая трата ресурсов
Запуск избранных приложений через taskset
или cgexec
требует общения с пользователями, чтобы они знали, какие приложения они могут запускать, или создание сценариев-обёрток, которые запускают выбранные приложения через tasksel
или cgexec
.
Кроме того, рассмотрите возможность установки количества процессов, которые может порождать пользователь или группа, вместо ограничения количества процессоров. Это может быть достигнуто с помощью /etc/security/limits.conf
файла .
Смотрите также