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? [дублікат] на сайті 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файлу .
Дивись також