Cgroups

cgroups (grupos de controle) é um recurso do kernel Linux para limitar, contar e isolar o uso de recursos ( processador , memória , uso de disco , etc.).

Este trabalho foi iniciado pelos engenheiros do Google (primeiro Paul Menage e Rohit Seth) em 2006 com o nome de “contêiner de processo”; no final de 2007, foi renomeado como Grupos de Controle (devido à confusão causada pelos diferentes significados do termo "contêiner" no kernel do Linux) e incluído na versão 2.6.24 do kernel do Linux. Desde então, muitos novos recursos e controladores foram adicionados.

Características

Um dos objetivos de design dos cgroups tem sido fornecer uma interface unificada para diferentes casos de uso, variando do controle de processos simples (como nice ) à virtualização no nível do sistema operacional (como OpenVZ , Linux -VServer , LXC ). Cgroups oferece:

usar

Um grupo de controle é uma série de processos vinculados pelos mesmos critérios. Esses grupos podem ser organizados hierarquicamente, de modo que cada grupo herde os limites de seu grupo pai. O kernel fornece acesso a vários controladores (subsistemas) por meio da interface cgroup. Por exemplo, o controlador de “memória” limita o uso da memória, “cpuacct” conta o uso da CPU e assim por diante.

Os grupos de controle podem ser usados ​​de várias maneiras:

A documentação do kernel Linux contém muitos detalhes sobre a instalação e uso de cgroups.

Isolamento de namespace

Embora não seja tecnicamente parte do trabalho dos cgroups, um recurso relacionado é o isolamento do namespace , no qual conjuntos de processos são separados de tal forma que não podem "ver" os recursos de outros grupos. Por exemplo, um namespace de identificador de processo (PID) fornece um conjunto separado de identificadores de processo em cada namespace. Também estão disponíveis namespaces por montagem, UTS, rede e SysV IPC. Bem no início do desenvolvimento de cgroups, o subsistema "ns" foi adicionado, para integrar namespaces e cgroups. Se o cgroup "ns" tivesse sido montado, cada namespace também teria que criar um novo grupo na hierarquia do grupo de nomenclatura. Esta foi uma tentativa que mais tarde foi considerada inadequada para a API cgroups e removida do kernel.

Os namespaces são criados com o comando "unshare" ou uma chamada de sistema , ou como novos marcadores em uma chamada de sistema "clone".

Referências

  1. (em) Jonathan Corbet, "  Process containers  " , LWN.net,29 de maio de 2007
  2. (en) Jonathan Corbet, "  Notas de um contêiner  " , LWN.net,29 de outubro de 2007
  3. (em) Jonathan Corbet, "  Controlling memory use in containers  " , LWN, 31 de julho, 31 de julho de 2007
  4. [PDF] (em) Balbir Singh and Vaidynathan Srinivasan, "  Containers: Challenges with the memory resource controller and Its Performance  " , Ottawa Linux Symposium ,Julho de 2007
  5. (in) Jonathan Corbet, "  Kernel space: Fair user scheduling for Linux  " , Network World,23 de outubro de 2007(acessado em 22 de agosto de 2012 )
  6. (em) Kamkamezawa Hiroyu (19 de novembro de 2008). “  Cgroup and Memory Resource Controller  ” (slides de apresentação em PDF), Japan Linux Symposium. 
  7. (em) Dave Hansen. “  Resource Management  ” (slides de apresentação em PDF), Linux Foundation. 
  8. Cyril Zarak, “  Usando cgroups v1  ” ,4 de janeiro de 2020
  9. (in) Matt Helsley, "  LXC: Linux container tools  " , IBM developerWorks, 3 fe. 2009
  10. (em) "  Grid Engine cgroups Integration  " , Scalable Logic22 de maio de 2012
  11. http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
  12. (em) Pavel Emelyanov, Kir Kolyshkin, "  namespaces PID no kernel 2.6.24  " , LWN.net,19 de novembro de 2007
  13. (em) Jonathan Corbet, "  Network namespaces  " , LWN.net,30 de janeiro de 2007
  14. (em) Serge E. Hallyn Ram Pai, "  Applying mount namespaces  " , IBM developerWorks,17 de setembro de 2007
  15. (em) Janak Desai, "  documentação do kernel Linux não compartilhada  " ,11 de janeiro de 2006

Apêndices

Artigos relacionados

Link externo