Conhecendo o Cgroups

Vamos conhecer o Cgroups e suas funcionalidades

Posted by Diego Aquino on March 14, 2024 · 7 mins read

Conhecendo o Cgroups

Cgroups no Linux

Cgroups, abreviação de “control groups”, é um recurso do kernel do Linux que permite organizar, priorizar, limitar, e isolar o uso de recursos do sistema (como CPU, memória, disco e rede) por conjuntos de processos. Introduzido no kernel 2.6.24 em 2007, tem sido continuamente aprimorado em versões subsequentes.

Os cgroups são essenciais para administradores de sistema e softwares de orquestração de contêineres, como Docker e Kubernetes, pois fornecem ferramentas para gerenciar e monitorar os recursos do sistema de forma eficiente. Com os cgroups, é possível:

  • Limitar: Alocar uma quantidade máxima de recursos do sistema. Exemplo: limitar um grupo a usar no máximo 20% da CPU disponível ou 1 GB de memória.

  • Priorizar: Definir pesos ou prioridades relativos entre diferentes grupos de processos, permitindo uma distribuição mais flexível dos recursos.

  • Isolar: Garantir que os recursos usados por um grupo de processos sejam separados dos demais, crucial para a segurança e estabilidade em ambientes compartilhados.

  • Monitorar: Acompanhar o uso de recursos por grupos de processos, facilitando a identificação de problemas e a otimização do desempenho.

Hierarquia e Flexibilidade

Os cgroups são organizados hierarquicamente, permitindo a criação de subgrupos com suas próprias regras de gestão de recursos, o que proporciona uma flexibilidade sem igual na administração dos recursos do sistema.

Versões do Cgroups

Existem várias versões do cgroups, sendo a mais recente conhecida como cgroups v2. Esta versão oferece uma API mais simplificada e consistente, além de abordar algumas das limitações encontradas na versão anterior.

Importância nos Contêineres Linux

Cgroups é uma tecnologia fundamental para a infraestrutura de contêineres Linux, utilizada amplamente por ferramentas de orquestração de contêineres para assegurar que os aplicativos rodem eficientemente e de forma segura, gerenciando o compartilhamento dos recursos do sistema de maneira controlada.

I. Laboratório Prático de Cgroups no Linux

Este laboratório prático demonstra o uso de cgroups no Linux para limitar o uso de CPU por um grupo de processos. Execute as etapas a seguir em um ambiente de teste ou com cautela em um ambiente de produção.

Pré-requisitos:

  • Acesso a um terminal Linux com privilégios de superusuário (root).
  • Suporte a cgroups habilitado no seu kernel Linux.

Passo 1: Criar um Grupo de Controle

Crie um grupo de controle chamado lab-cgroups sob o subsistema cpu:

mkdir /sys/fs/cgroup/cpu/lab-cgroups

Passo 2: Limitar o Uso da CPU

Para limitar o uso da CPU a, no máximo, 20%, escreva 20000 em cpu.cfs_quota_us:

echo 20000 > /sys/fs/cgroup/cpu/lab-cgroups/cpu.cfs_quota_us

Passo 3: Associar um Processo ao Grupo de Controle

Adicione um processo ao grupo escrevendo seu PID no arquivo tasks:

echo [PID] > /sys/fs/cgroup/cpu/lab-cgroups/tasks

Substitua [PID] pelo ID do processo desejado.

Passo 4: Verificar o Limite de CPU

Use ferramentas como top ou htop para observar o limite de uso da CPU pelo processo.

Passo 5: Remover o Grupo de Controle

Após os testes, remova o grupo de controle:

rmdir /sys/fs/cgroup/cpu/lab-cgroups

Lembre-se de remover todos os processos do grupo antes de tentar remover o diretório.

Este laboratório oferece uma introdução básica ao uso de cgroups para limitação de recursos no Linux.

II. Laboratório de Uso do cgcreate

Introdução

Este documento serve como um guia para criar e gerenciar grupos de controle (cgroups) no Linux, utilizando o comando cgcreate. Grupos de controle permitem limitar, priorizar, negar, monitorar e isolar recursos do sistema utilizados por processos.

Pré-requisitos

  • Sistema Linux com suporte a cgroups.
  • Pacote cgroup-tools instalado. Para instalar, execute um dos seguintes comandos, dependendo da sua distribuição:
# Para Debian/Ubuntu
sudo apt update
sudo apt install cgroup-tools

# Para CentOS/RHEL
sudo yum install libcgroup-tools

Criando um Grupo de Controle

  1. Criar o Grupo: Para criar um novo grupo de controle chamado meugrupo para os subsistemas de CPU e memória, utilize o seguinte comando:
sudo cgcreate -g cpu,memory:/meugrupo

Este comando cria um novo grupo de controle sob os subsistemas cpu e memory.

  1. Definir Limites de Recursos: Para definir um limite de memória de 512MB para o grupo meugrupo, use:
sudo cgset -r memory.limit_in_bytes=512M meugrupo
  1. Adicionar Processos ao Grupo: Para adicionar um processo ao grupo, você pode usar o cgclassify. Por exemplo, para adicionar o processo com PID 1234 ao meugrupo:
sudo cgclassify -g cpu,memory:meugrupo 1234

Verificando e Monitorando

  • Listar Grupos: Para listar todos os grupos de controle existentes e seus processos, use:
cgls
  • Mostrar Estatísticas do Grupo: Para mostrar estatísticas detalhadas de uso do grupo meugrupo, execute:
cgget -r memory.stat meugrupo

Conclusão

Este laboratório ofereceu uma introdução básica ao uso do cgcreate e outras ferramentas de cgroup no Linux para gerenciar recursos do sistema. Os cgroups são uma parte poderosa da administração do sistema Linux, permitindo controle fino sobre o uso de recursos.