
Parece que Linux programa la ejecución del proceso independientemente del usuario del proceso. Entonces, si un usuario ejecuta 100 procesos y otro usuario ejecuta 1 proceso, en promedio, el primero obtendrá 100 veces más tiempo de CPU que el segundo.
¿Existe alguna posibilidad de equilibrar el tiempo de CPU por usuario, lo que significa que, en este ejemplo, ambos usuarios obtienen el 50 % del tiempo de CPU?
Respuesta1
Al tratarse de Linux, por supuesto, los valores predeterminados son relativamente básicos, pero existen muchas opciones de herramientas para cambiarlos. Pero no todos están disponibles en todas las distribuciones, por lo que no es obvio cuál usar.
En los sistemas cgroups, los recursos de CPU admiten un modelo de distribución ponderada, donde a cada grupo se le asigna una fracción de los recursos disponibles en una proporción según el peso.
En los sistemas systemd, el concepto de segmento corresponde directamente al uso de cgroups. Leerman systemd.resource-control
y considere habilitarlo DefaultCPUAccounting=
. Aplique la misma proporción de CPU a cada unidad en cuestión. Por ejemplo, para hacer esto con cada usuario interactivo, colóquelo en algo como /etc/systemd/system/user-.slice.d/resource.conf
[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control
[Slice]
CPUWeight=100
El valor exacto del número no es importante, siempre y cuando cada unidad en cuestión tenga algo de la proporción correcta. Además, no es que estén dividiendo la CPU total del sistema, sino la CPU asignada al usuario principal.slice. Si, en cambio, modifica una unidad de servicio, éstas están fuera de system.slice.
En sistemas que utilizan pam_limit, los límites de recursos POSIX se pueden establecer para los usuarios que han iniciado sesión. Mira man limits.conf
, y el archivo de configuración podría ser un archivo desplegable como /etc/security/limits.d/resource.conf
. Una cosa práctica podría ser establecer nproc
el número máximo de tareas que recibe un usuario. Más allá de eso, las cosas no se bifurcan. O bien, cpu
es un límite tentador; sin embargo, exceder el límite estricto podría comenzar a matar procesos, lo que no es una buena experiencia para el usuario.
Y para la versión de tareas del juego infantil luz roja luz verde, haylímite de CPU. Esto envía señales SIGSTOP y SIGCONT para gestionar el uso de la CPU, de forma sencilla. En particular, es un poco ad hoc porque no hay un archivo de configuración, es necesario invocarlo para iniciar un proceso o recibir un PID.
Respuesta2
Puede usar cgroup y asignar la aplicación en consecuencia según sus requisitos, una referencia escgrupos-v2