Cgroups
Los control groups es el mecanimo que tiene linux para controlar los recursos que usa cada proceso.
Historia
Los Control Groups (cgroups) fueron introducidos en 2007 como una funcionalidad en el núcleo de Linux, creados originalmente por ingenieros de Google. La idea era proporcionar un mecanismo para gestionar y aislar el uso de recursos (como CPU, memoria e I/O) de grupos de procesos. Inicialmente llamados "contenedores de procesos," fueron renombrados a cgroups para reflejar mejor su funcionalidad.
Los cgroups se integraron en la versión principal del núcleo de Linux con la versión 2.6.24 en 2008. Con el tiempo, se volvieron fundamentales para la gestión de recursos en sistemas Linux, particularmente en tecnologías de contenedores como Docker, LXC y Kubernetes. La primera iteración, cgroups v1, proporcionaba una estructura basada en jerarquías, pero carecía de una gestión unificada de recursos, lo que generaba complejidad.
Para abordar estas limitaciones, se introdujo cgroups v2 en 2016 con el núcleo de Linux 4.5. Esta versión ofrecía una única jerarquía unificada, una mayor consistencia y mejor integración con las cargas de trabajo modernas, incluidos los contenedores.
Problema con cgroups v1
En cgroups v1, es posible limitar múltiples recursos para un grupo de procesos, pero cada recurso (CPU, memoria, I/O, etc.) tiene su propia jerarquía independiente. Esto hace que la configuración sea más compleja porque debes asegurarte manualmente de que los procesos pertenezcan a los mismos grupos en todas las jerarquías para que los límites se apliquen de manera coherente. Aunque técnicamente es posible, es más propenso a errores y más difícil de administrar.
Ejemplo:
Un servidor quiere limitar CPU y memoria para dos contenedores, A y B. En cgroups v1, podrías:
- Crear un grupo en la jerarquía de memoria con un límite de 2 GB para
A. - Crear un grupo en la jerarquía de CPU con un límite del 50% para
A.
Sin embargo, como las jerarquías son independientes, podrías cometer errores como configurar el CPU correctamente pero olvidar asignar el proceso al grupo correcto de memoria, lo que resultaría en configuraciones inconsistentes.
Cómo lo soluciona cgroups v2
En cgroups v2, hay una única jerarquía para todos los recursos. Esto simplifica la gestión porque configuras los límites de todos los recursos de un grupo de procesos en un solo lugar, garantizando consistencia.
Con cgroups v2, simplemente creas un único grupo para A y defines allí tanto el límite de 2 GB de memoria como el 50% del CPU. No hay necesidad de gestionar múltiples jerarquías ni de preocuparte por que los procesos no estén correctamente sincronizados entre recursos. Esto simplifica la configuración y reduce errores.