44.3. Uso de grupos de control a través de un sistema de archivos virtual
Puede utilizar control groups (cgroups
) para establecer límites, priorizar o controlar el acceso a los recursos de hardware para grupos de procesos. Esto le permite controlar granularmente el uso de recursos de las aplicaciones para utilizarlos de forma más eficiente. Las siguientes secciones proporcionan una visión general de las tareas relacionadas con la gestión de cgroups
tanto para la versión 1 como para la versión 2 utilizando un sistema de archivos virtual.
44.3.1. Establecimiento de límites de CPU a las aplicaciones mediante cgroups-v1 Copiar enlaceEnlace copiado en el portapapeles!
A veces una aplicación consume mucho tiempo de CPU, lo que puede afectar negativamente a la salud general de su entorno. Utilice el sistema de archivos virtuales /sys/fs/
para configurar los límites de CPU a una aplicación utilizando control groups version 1 (cgroups-v1
).
Requisitos previos
- Una aplicación cuyo consumo de CPU se quiere restringir.
Verifique que los controladores de
cgroups-v1
fueron montados:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimiento
Identifique el ID del proceso (PID) de la aplicación que desea restringir en el consumo de la CPU:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La salida de ejemplo del programa
top
revela quePID 6955
(aplicación ilustrativasha1sum
) consume muchos recursos de la CPU.Cree un subdirectorio en el directorio del controlador de recursos
cpu
:mkdir /sys/fs/cgroup/cpu/Example/
# mkdir /sys/fs/cgroup/cpu/Example/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow El directorio anterior representa un grupo de control, donde se pueden colocar procesos específicos y aplicar ciertos límites de CPU a los procesos. Al mismo tiempo, se crearán en el directorio algunos archivos de la interfaz
cgroups-v1
y archivos específicos del controladorcpu
.Opcionalmente, inspeccione el grupo de control recién creado:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La salida de ejemplo muestra archivos, como
cpuacct.usage
,cpu.cfs._period_us
, que representan configuraciones y/o límites específicos, que pueden establecerse para los procesos en el grupo de controlExample
. Observe que los nombres de los archivos respectivos llevan como prefijo el nombre del controlador del grupo de control al que pertenecen.Por defecto, el grupo de control recién creado hereda el acceso a todos los recursos de la CPU del sistema sin límite.
Configurar los límites de la CPU para el grupo de control:
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
Copy to Clipboard Copied! Toggle word wrap Toggle overflow El archivo
cpu.cfs_period_us
representa un periodo de tiempo en microsegundos (µs, representado aquí como \ "us") para la frecuencia con la que se debe reasignar el acceso de un grupo de control a los recursos de la CPU. El límite superior es de 1 segundo y el inferior de 1000 microsegundos.El archivo
cpu.cfs_quota_us
representa la cantidad total de tiempo en microsegundos que todos los procesos de un grupo de control pueden ejecutar durante un periodo (definido porcpu.cfs_period_us
). Tan pronto como los procesos de un grupo de control, durante un solo período, utilizan todo el tiempo especificado por la cuota, son estrangulados para el resto del período y no se les permite ejecutar hasta el siguiente período. El límite inferior es de 1000 microsegundos.Los comandos de ejemplo anteriores establecen los límites de tiempo de la CPU para que todos los procesos colectivamente en el grupo de control
Example
puedan ejecutarse sólo durante 0,2 segundos (definido porcpu.cfs_quota_us
) de cada 1 segundo (definido porcpu.cfs_period_us
).Opcionalmente, verifique los límites:
cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Añada el PID de la aplicación al grupo de control
Example
:echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs echo "6955" > /sys/fs/cgroup/cpu/Example/tasks
# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs or # echo "6955" > /sys/fs/cgroup/cpu/Example/tasks
Copy to Clipboard Copied! Toggle word wrap Toggle overflow El comando anterior asegura que una aplicación deseada se convierta en miembro del grupo de control
Example
y por lo tanto no exceda los límites de CPU configurados para el grupo de controlExample
. El PID debe representar un proceso existente en el sistema. ElPID 6955
aquí fue asignado al procesosha1sum /dev/zero &
, utilizado para ilustrar el caso de uso del controladorcpu
.Compruebe que la aplicación se ejecuta en el grupo de control especificado:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow El ejemplo anterior muestra que el proceso de la aplicación deseada se ejecuta en el grupo de control
Example
, que aplica límites de CPU al proceso de la aplicación.Identifique el consumo actual de CPU de su aplicación estrangulada:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Observe que el consumo de la CPU de
PID 6955
ha disminuido del 99% al 20%.
Recursos adicionales
- Para obtener información sobre el concepto de grupos de control, consulte Sección 44.1, “Entender los grupos de control”.
-
Para más información sobre los controladores de recursos, consulte la sección Sección 44.2, “Qué son los controladores de recursos del núcleo” y la página del manual
cgroups(7)
. -
Para más información sobre el sistema de archivos virtual
/sys/fs/
, consulte la página del manualsysfs(5)
.