De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

cgroups (abreviado de grupos de control ) es una característica del kernel de Linux que limita, tiene en cuenta y aísla el uso de recursos (CPU, memoria, E / S de disco, red, etc.) de una colección de procesos .

Los ingenieros de Google (principalmente Paul Menage y Rohit Seth ) comenzaron a trabajar en esta función en 2006 con el nombre de "contenedores de proceso". [1] A finales de 2007, la nomenclatura cambió a "grupos de control" para evitar la confusión causada por los múltiples significados del término " contenedor " en el contexto del kernel de Linux, y la funcionalidad de los grupos de control se fusionó con la línea principal del kernel de Linux en la versión 2.6 del kernel. .24, que fue lanzado en enero de 2008. [2] Desde entonces, los desarrolladores han agregado muchas características y controladores nuevos, como soporte para kernfs en 2014, [3] cortafuegos , [4] y jerarquía unificada.[5] cgroup v2 se fusionó en el kernel 4.5 de Linux con cambios significativos en la interfaz y la funcionalidad interna. [6]

Versiones [ editar ]

Hay dos versiones de cgroups.

Cgroups fue escrito originalmente por Paul Menage y Rohit Seth, y se incorporó al kernel de Linux en 2007. Posteriormente, esto se llama cgroups versión 1. [7]

Luego, Tejun Heo se hizo cargo del desarrollo y mantenimiento de cgroups . Tejun Heo rediseñó y reescribió cgroups. Esta reescritura ahora se llama versión 2, la documentación de cgroups-v2 apareció por primera vez en el kernel 4.5 de Linux lanzado el 14 de marzo de 2016. [8]

A diferencia de v1, cgroup v2 tiene una única jerarquía de procesos y discrimina entre procesos, no entre subprocesos.

Funciones [ editar ]

Uno de los objetivos de diseño de cgroups es proporcionar una interfaz unificada para muchos casos de uso diferentes , desde el control de procesos individuales (mediante el uso de nice , por ejemplo) hasta la virtualización completa a nivel de sistema operativo (como lo proporcionan OpenVZ , Linux-VServer o LXC , por ejemplo). Cgroups proporciona:

Limitación de recursos
los grupos se pueden configurar para que no excedan un límite de memoria configurado , que también incluye el caché del sistema de archivos [9] [10]
Priorización
algunos grupos pueden obtener una mayor proporción de utilización de CPU [11] o rendimiento de E / S de disco [12]
Contabilidad
mide el uso de recursos de un grupo, que puede utilizarse, por ejemplo, con fines de facturación [13]
Control
congelación de grupos de procesos, sus puntos de control y reinicio [13]

Utilice [ editar ]

Como ejemplo de uso indirecto, systemd asume acceso exclusivo a la función cgroups

Un grupo de control (abreviado como cgroup) es una colección de procesos que están sujetos a los mismos criterios y asociados con un conjunto de parámetros o límites. Estos grupos pueden ser jerárquicos, lo que significa que cada grupo hereda límites de su grupo principal. El kernel proporciona acceso a múltiples controladores (también llamados subsistemas) a través de la interfaz cgroup; [2] por ejemplo, el controlador de "memoria" limita el uso de la memoria, "cpuacct" cuenta el uso de la CPU, etc.

Los grupos de control se pueden utilizar de varias formas:

  • Accediendo al sistema de archivos virtual de cgroup manualmente.
  • Creando y administrando grupos sobre la marcha usando herramientas como cgcreate , cgexec y cgclassify (de libcgroup ).
  • A través del "demonio del motor de reglas" que puede mover automáticamente los procesos de ciertos usuarios, grupos o comandos a cgroups como se especifica en su configuración.
  • Indirectamente a través de otro software que utiliza cgroups, como Docker , Firejail , LXC , [14] libvirt , systemd , Open Grid Scheduler / Grid Engine , [15] y lmctfy de Google, que ya no existe en el desarrollo .

La documentación del kernel de Linux contiene algunos detalles técnicos de la configuración y el uso de los grupos de control versión 1 [16] y versión 2. El comando [17] systemd-cgtop[18] se puede usar para mostrar los grupos de control principales por su uso de recursos.

Rediseñar [ editar ]

El rediseño de cgroups comenzó en 2013, [19] con cambios adicionales traídos por las versiones 3.15 y 3.16 del kernel de Linux. [20] [21] [22]

Aislamiento del espacio de nombres [ editar ]

Aunque técnicamente no es parte del trabajo de cgroups, una característica relacionada del kernel de Linux es el aislamiento del espacio de nombres , donde los grupos de procesos están separados de manera que no pueden "ver" los recursos de otros grupos. Por ejemplo, un espacio de nombres PID proporciona una enumeración separada de identificadores de proceso dentro de cada espacio de nombres. También están disponibles los espacios de nombres de montaje, usuario, UTS, red y SysV IPC.

  • El espacio de nombres PID proporciona aislamiento para la asignación de identificadores de proceso (PID), listas de procesos y sus detalles. Si bien el nuevo espacio de nombres está aislado de otros hermanos, los procesos en su espacio de nombres "principal" aún ven todos los procesos en los espacios de nombres secundarios, aunque con diferentes números PID. [23]
  • El espacio de nombres de red aísla los controladores de interfaz de red (físicos o virtuales), las reglas de firewall de iptables , las tablas de enrutamiento, etc. Los espacios de nombres de red se pueden conectar entre sí utilizando el dispositivo Ethernet virtual "veth". [24]
  • El espacio de nombres "UTS" permite cambiar el nombre de host .
  • El espacio de nombres de montaje permite crear un diseño de sistema de archivos diferente o hacer que ciertos puntos de montaje sean de solo lectura. [25]
  • El espacio de nombres IPC aísla la comunicación entre procesos de System V entre espacios de nombres.
  • El espacio de nombres de usuario aísla las ID de usuario entre espacios de nombres. [26]
  • Espacio de nombres Cgroup [27]

Los espacios de nombres se crean con el comando " unshare " o syscall , o como nuevos indicadores en una llamada al sistema "clon". [28]

El subsistema "ns" se agregó al principio del desarrollo de cgroups para integrar espacios de nombres y grupos de control. Si se montó el cgroup "ns", cada espacio de nombres también crearía un nuevo grupo en la jerarquía de cgroup. Este fue un experimento que luego se consideró inadecuado para la API de cgroups y se eliminó del kernel.

Los espacios de nombres de Linux se inspiraron en la funcionalidad de espacio de nombres más general utilizada en gran medida en Plan 9 de Bell Labs . [29]

Jerarquía unificada [ editar ]

Kernfs se introdujo en el kernel de Linux con la versión 3.14 en marzo de 2014, siendo el autor principal Tejun Heo. [30] Uno de los principales motivadores para un kernfs separado es el sistema de archivos cgroups. Kernfs se crea básicamente dividiendo parte de la lógica del sysfs en una entidad independiente, lo que facilita a otros subsistemas del kernel la implementación de su propio sistema de archivos virtual con manejo de la conexión y desconexión de dispositivos, creación y eliminación dinámicas y otros atributos. El rediseño continuó en la versión 3.15 del kernel de Linux. [31]

Grupos de control de memoria del núcleo (kmemcg) [ editar ]

Los grupos de control de memoria del kernel ( kmemcg ) se fusionaron en la versión 3.8 (18 de febrero de 2013 ; hace 8 años ) de la línea principal del kernel de Linux . [32] [33] [34] El controlador kmemcg puede limitar la cantidad de memoria que el kernel puede utilizar para administrar sus propios procesos internos. ( 18-02-2013 )

cgroup concientización sobre el asesino de OOM [ editar ]

Linux Kernel 4.19 (octubre de 2018) introdujo el conocimiento de cgroup de la implementación del asesino de OOM que agrega la capacidad de eliminar un cgroup como una sola unidad y así garantizar la integridad de la carga de trabajo. [35]

Adopción [ editar ]

Varios proyectos utilizan cgroups como base, incluidos CoreOS , Docker (en 2013), Hadoop , Jelastic , Kubernetes , [36] lmctfy (Let Me Contain That For You), LXC (LinuX Containers), systemd , Mesos y Mesosphere [36 ] y HTCondor . Las principales distribuciones de Linux también lo adoptaron, como Red Hat Enterprise Linux (RHEL) 6.0 en noviembre de 2010, tres años después, la adopción por parte del núcleo principal de Linux. [37]

El 29 de octubre de 2019, el Proyecto Fedora modificó Fedora 31 para usar CgroupsV2 por defecto [38]

Ver también [ editar ]

  • Implementaciones de virtualización a nivel de sistema operativo
  • Grupo de proceso
  • Tc (Linux)  : una utilidad de control de tráfico que tiene una ligera superposición funcional con la configuración de cgroup orientada a la red

Referencias [ editar ]

  1. ^ Jonathan Corbet (29 de mayo de 2007). "Procesar contenedores" . LWN.net.
  2. ↑ a b Jonathan Corbet (29 de octubre de 2007). "Notas de un contenedor" . LWN.net . Consultado el 14 de abril de 2015 . Se consideró que el nombre original de los 'contenedores' era demasiado genérico; este código es una parte importante de una solución de contenedor, pero está lejos de ser todo. Así que los contenedores ahora han sido renombrados como 'grupos de control' (o 'cgroups') y fusionados para 2.6.24.
  3. ^ "cgroup: convertir a kernfs" . Lista de correo del kernel de Linux . 28 de enero de 2014.
  4. ^ "netfilter: x_tables: coincidencia de grupo de control de proceso ligero" . 23 de abril de 2014. Archivado desde el original el 24 de abril de 2014.
  5. ^ "cgroup: prepárese para la jerarquía unificada predeterminada" . 13 de marzo de 2014.
  6. ^ "cgroup v2: Varias jerarquías" .
  7. ^ "diferencia entre el kernel de Linux 4.4 y 4.5" . 14 de marzo de 2016.
  8. ^ "Documentation / cgroup-v2.txt como apareció en Linux kernel 4.5" . 14 de marzo de 2016.
  9. ^ Jonathan Corbet (31 de julio de 2007). "Control del uso de memoria en contenedores" . LWN.
  10. ^ Balbir Singh, Vaidynathan Srinivasan (julio de 2007). "Contenedores: desafíos con el controlador de recursos de memoria y su rendimiento" (PDF) . Simposio de Ottawa Linux.
  11. ^ Jonathan Corbet (23 de octubre de 2007). "Espacio de kernel: programación de usuario justa para Linux" . Mundo de la red. Archivado desde el original el 19 de octubre de 2013 . Consultado el 22 de agosto de 2012 .
  12. ^ Kamkamezawa Hiroyu (19 de noviembre de 2008). Controlador de recursos de memoria y Cgroup (PDF) . Simposio de Linux de Japón. Archivado desde el original (diapositivas de presentación en PDF) el 22 de julio de 2011.
  13. ^ a b Dave Hansen. Gestión de recursos (diapositivas de presentación en PDF) . Fundación Linux.
  14. ^ Matt Helsley (3 de febrero de 2009). "LXC: herramientas de contenedor de Linux" . IBM developerWorks.
  15. ^ "Integración de grupos de motores de cuadrícula" . Lógica escalable. 22 de mayo de 2012.
  16. ^ "cgroups" . kernel.org.
  17. ^ https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/cgroup-v2.rst
  18. ^ https://www.freedesktop.org/software/systemd/man/systemd-cgtop.html
  19. ^ "Todo sobre el kernel de Linux: rediseño de Cgroup" . Linux.com . 15 de agosto de 2013 . Consultado el 19 de mayo de 2014 .
  20. ^ "La jerarquía del grupo de control unificado en 3.16" . LWN.net . 11 de junio de 2014.
  21. ^ "Extraiga las actualizaciones de cgroup para 3.15 de Tejun Heo" . kernel.org . 3 de abril de 2014.
  22. ^ "Extraiga las actualizaciones de cgroup para 3.16 de Tejun Heo" . kernel.org . 9 de junio de 2014.
  23. ^ Pavel Emelyanov, Kir Kolyshkin (19 de noviembre de 2007). "Espacios de nombres PID en el kernel 2.6.24" . LWN.net.
  24. ^ Jonathan Corbet (30 de enero de 2007). "Espacios de nombres de red" . LWN.net.
  25. ^ Serge E. Hallyn, Ram Pai (17 de septiembre de 2007). "Aplicar espacios de nombres de montaje" . IBM developerWorks.
  26. ^ Michael Kerrisk (27 de febrero de 2013). "Espacios de nombres en funcionamiento, parte 5: Espacios de nombres de usuarios" . lwn.net Información de Linux de la fuente.
  27. ^ https://lkml.org/lkml/2016/3/26/132/
  28. ^ Janak Desai (11 de enero de 2006). "Documentación del kernel de Linux sobre no compartir" .
  29. ^ "El uso de espacios de nombres en el plan 9" . 1992. Archivado desde el original el 6 de septiembre de 2014 . Consultado el 15 de febrero de 2015 .
  30. ^ "kernfs, sysfs, driver-core: implementar la eliminación automática sincrónica" . LWN.net . 3 de febrero de 2014 . Consultado el 7 de abril de 2014 .
  31. ^ "Árbol de fuentes del kernel de Linux: kernel / git / torvalds / linux.git: cgroups: convertir a kernfs" . kernel.org . 11 de febrero de 2014 . Consultado el 23 de mayo de 2014 .
  32. ^ "memcg: infraestructura del controlador kmem" . código fuente de kernel.org . 18 de diciembre de 2012.
  33. ^ "memcg: infraestructura básica de contabilidad kmem" . código fuente de kernel.org . 18 de diciembre de 2012.
  34. ^ "memcg: agregar documentación sobre el controlador kmem" . kernel.org . 18 de diciembre de 2012.
  35. ^ https://kernelnewbies.org/Linux_4.19#Memory_management
  36. ^ a b "Mesosfera para llevar Kubernetes de Google a Mesos" . Mesosphere.io. 10 de julio de 2014. Archivado desde el original el 6 de septiembre de 2015 . Consultado el 13 de julio de 2014 .
  37. ^ https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/6.0_Release_Notes/Red_Hat_Enterprise_Linux-6-6.0_Release_Notes-en-US.pdf
  38. ^ https://bugzilla.redhat.com/show_bug.cgi?id=1732114

Enlaces externos [ editar ]

  • Documentación del kernel de Linux sobre cgroups
  • Espacios de nombres y cgroups del kernel de Linux por Rami Rosen
  • Espacios de nombres y cgroups, la base de los contenedores de Linux (incluidos los cgroups v2) , diapositivas de una charla de Rami Rosen, Netdev 1.1, Sevilla, España, 2016
  • Comprensión de la nueva API de grupos de control , LWN.net , por Rami Rosen, marzo de 2016
  • Gestión de clústeres a gran escala en Google con Borg , abril de 2015, por Abhishek Verma, Luis Pedrosa, Madhukar Korupolu, David Oppenheimer, Eric Tune y John Wilkes
  • Objetos de trabajo , característica similar en Windows