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
файлу .
Дивись також