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 cgroups
que 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 cgexec
comando, 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 taskset
para 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 taskset
sí 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 taskset
en cada uno nuevo. Un enfoque mucho más razonable sería ejecutar selectivamente aplicaciones intensivas de CPU, ya sea a través de cgexec
o 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 taskset
o cgexec
requiere comunicarse con sus usuarios para hacerles saber qué aplicaciones pueden ejecutar, o crear scripts de envoltura que inicien aplicaciones seleccionadas a través de tasksel
o 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.conf
archivo .
Ver también