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файла .
Смотрите также