TL; DR : De una breve investigación parece que es posible restringir los comandos a un número específico de núcleos, sin embargo, en todos los casos, debe usar un comando que realmente aplique la restricción.
cgroups
Linux tiene cgroupsque se utiliza con frecuencia exactamente con el fin de restringir los recursos disponibles para los procesos. A partir de una investigación muy breve, puede encontrar un ejemplo en Arch Wiki con la configuración de Matlab (un software científico) establecida en /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;
}
}
Para que dicha configuración surta efecto, debe ejecutar el proceso mediante un cgexeccomando, por ejemplo, desde la misma página wiki:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
conjunto de tareas
¿Una pregunta relacionada sobre Ask Ubuntu y cómo limitar un proceso a un núcleo de CPU en Linux? [duplicado] en el sitio de Unix y Linux muestra un ejemplo de uso tasksetpara limitar las CPU para el proceso. En la primera pregunta, se logra mediante el análisis de todos los procesos para un usuario en particular
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
En la otra pregunta, un proceso se inicia por tasksetsí mismo:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Conclusión
Si bien es ciertamente posible limitar los procesos, parece que no es tan simple lograrlo para usuarios particulares. El ejemplo en la publicación de Ask Ubuntu vinculada requeriría un escaneo consistente para los procesos que pertenecen a cada usuario y se usan taskseten cada uno nuevo. Un enfoque mucho más razonable sería ejecutar selectivamente aplicaciones intensivas de CPU, ya sea a través de cgexeco taskset; Tampoco tiene sentido restringir todos los procesos a un número específico de CPUS, especialmente para aquellos que realmente utilizan el paralelismo y la concurrencia para ejecutar sus tareas más rápido; limitarlos a un número específico de CPU puede tener el efecto de ralentizar el procesamiento. Además, como la respuesta de terdon mencionó es un desperdicio de recursos
Ejecutar aplicaciones seleccionadas a través de taskseto cgexecrequiere comunicarse con sus usuarios para hacerles saber qué aplicaciones pueden ejecutar, o crear scripts de envoltura que inicien aplicaciones seleccionadas a través de taskselo cgexec.
Además, considere establecer el número de procesos que puede generar un usuario o grupo en lugar de establecer el límite en el número de CPU. Esto se puede lograr a través del /etc/security/limits.confarchivo .
Ver también