Los grupos de control, o cgroups para abreviar, son parte del kernel del sistema Linux con el cual se puede restringir y monitorear el uso de recursos por parte de los procesos. Desempeñan un papel importante en la gestión de recursos y la virtualización de contenedores.
Desde el principio, Linux trajo consigo varios mecanismos para controlar el uso de los recursos del sistema por los procesos. Pero las herramientas y los archivos de configuración como nice, ionice, cpulimit y /etc/security/limits.conf funcionan de manera inconsistente y ya no son lo suficientemente flexibles en la actualidad. Las plataformas en la nube modernas con técnicas como la contenedorización y los servidores virtuales requieren métodos más potentes para la administración de recursos y Aislamiento del proceso.
Algunos programadores de Google desarrollaron Cgroups en 2006 para proporcionar soluciones para varios casos de uso diferentes. Desde la versión 2.6.24 del kernel, que se lanzó en enero de 2008, los cgroups han sido una parte integral del kernel de Linux.
¿Cómo funcionan los cgroups?
Los procesos o tareas se organizan jerárquicamente en Linux desde el principio. Cada tarea debe ser iniciada por una diferente. Hereda varias propiedades, como el nivel agradable y la prioridad de E / S del proceso de llamada. De manera similar, los grupos de control son grupos de procesos estructurados jerárquicamente. Una diferencia esencial es que puede haber varias jerarquías de grupos mientras que solo existe un árbol de procesos.
Con la ayuda de cgroups, los procesos relacionados se pueden agrupar, por ejemplo, según equipos de trabajo, contenedores de software o servidores virtuales. De esta forma, los grupos de control se pueden asignar a diferentes subsistemas para la gestión de recursos. Cada subsistema (también llamado controlador de recursos) corresponde a un recurso administrado por el kernel.
Los subsistemas más importantes incluyen:
- cpu: limita o prioriza el uso de la CPU por parte de los procesos en un grupo.
- cpusets: define en qué núcleos de procesador se pueden ejecutar las tareas.
- blkio: limita el acceso a dispositivos de bloqueo como los medios de almacenamiento.
- device: controla qué dispositivos de hardware se pueden utilizar.
- memory: limita el requisito de memoria.
- net_prio: limita el rendimiento de datos de las conexiones de red.
- cpuacct: mide el tiempo del procesador utilizado para análisis y facturación.
- perf_event: habilita análisis de rendimiento.
Gestión de recursos con cgroups
Los grupos de control proporcionan varios métodos para establecer, configurar y controlar grupos. Por un lado, el kernel exporta un árbol de directorio virtual bajo «/ sys / fs / cgroup /». Aquí los grupos se pueden crear, eliminar o renombrar con comandos clásicos de Unix como “mkdir”, “rmdir” y “mv”. Para agregar procesos a grupos y subsistemas, los PID de la tarea se pueden escribir en archivos apropiados usando «echo» o «printf». Los límites se pueden establecer de la misma manera.
La administración a través de systemd o libcgroup es más conveniente. Ambos proporcionan comandos para tratar con cgroups, como systemd-cgls, systemd-run, systemd-cgtop o cgcreate, cgexec y cgclassify. Además, se pueden crear grupos de control permanentes con archivos de configuración como /etc/cgconfig.conf o archivos de unidad systemd. Este último también es de interés para los desarrolladores de aplicaciones. Puede ofrecer archivos de unidad con configuraciones predeterminadas para tus aplicaciones, servicios del sistema o contenedores de software.
Campos de aplicación de los grupos de control
Los cgroups resuelven varios problemas diferentes de manera uniforme. Los programas informáticos y que consumen mucha memoria, como los navegadores web, los sistemas de álgebra informática o las aplicaciones de simulación científica, pueden controlarse mejor en PC privadas o estaciones de trabajo de la empresa. También permiten una distribución precisa de los escasos recursos de dispositivos inteligentes, dispositivos IoT y otros dispositivos integrados.
Los grupos de control se destacan con servidores y virtualizaciones de contenedores. A menudo, varios servicios, como servidores web, bases de datos y servidores de aplicaciones, se ejecutan en un sistema y, con los paquetes de alojamiento virtual, varios usuarios comparten el mismo hardware. Hoy se necesita más aquí que los métodos rudimentarios o derrochadores de aislamiento y distribución de recursos a través de jaulas chroot y máquinas virtuales o agradables.
Los grupos de control proporcionan un sistema finamente granulado para la asignación y monitoreo de varios recursos. Con la ayuda de la función de contabilidad, las tarifas se pueden implementar sobre la base de los recursos utilizados en servidores virtuales y sistemas SaaS.
Los grupos de control se pueden combinar con espacios de nombres del kernel, capacidades y extensiones de seguridad como SELinux o AppArmor. Aunque el aislamiento resultante es menos estricto que con la virtualización completa, en muchos casos es suficiente. Las tecnologías de contenedores como Docker, Snap, LXC y libvirt se basan todas en esta combinación.