Capítulo 1. Introdução ao Grupos de Controle (Cgroups)
O Red Hat Enterprise Linux 6 fornece um novo recurso do kernel: control groups (grupos de controle), que são chamados por seu nome curto cgroups neste guia. Os cgroups permitem alocar recursos — tais como tempo da CPU, memória do sistema, largura de banda de rede ou combinações destes recursos — entre grupos de usuários definidos de tarefas (processos) rodando em um sistema. Você pode monitorar os cgroups que configurar, negar acesso dos cgroups a certos recursos e mesmo reconfigurar seus cgroups dinamicamente em um sistema em execução. O serviço
cgconfig (“control group config ”) pode ser configurado para iniciar no momento do boot e restabelecer seus cgroups pré definidos, fazendo-os persistentes através de reboots.
Usando cgroups, os administradores de sistema ganham controle refinado sobre a alocação, prioridades, negação, gerenciamento e recursos de monitoramento do sistema. Recursos de hardware podem ser divididos inteligentemente entre tarefas e usuários, aumentando a eficiência geral.
1.1. Como os Grupos de Controle são Organizados Copiar o linkLink copiado para a área de transferência!
Copiar o linkLink copiado para a área de transferência!
Os cgroups são organizados hierarquicamente, como processos, e cgroups filhos herdam alguns atributos de seus pais. Entretanto, existem diferenças entre os dois modelos.
O Modelo de Processo do Linux
Todos os processos em um sistema Linux são processos filhos de um pai comum: o processo
init, que é executado pelo kernel no momento de boot e inicia todos os outros processos (que por sua vez iniciam seus próprios processos filhos). Por causa que todos os processos descendem de um pai único, o modelo de processamento do Linux é uma hierarquia única, ou árvore.
Adicionalmente, todos os processos do Linux exceto o
init herdam o ambiente (tal como a variável PATH) [1] e outros certos atributos (tal como abrir arquivos descritores) de seu processo pai.
O Modelo Cgroup
Os cgroups são similares aos processos em:
- eles seguem uma hierarquia, e
- Os cgroups filhos herdam certos atributos de seus cgroups pais.
A diferença fundamental é que muitas hierarquias diferentes de cgroups podem existir simultaneamente em um sistema. Se o modelo de processo Linux é uma árvore única de processos, então o modelo cgroup é uma ou mais árvores desconectadas e separadas de tarefas (exemplo: processos).
Múltiplas hierarquias separadas de cgroups são necessárias porque cada hierarquia é anexada a um ou mais subsistemas. Um subsistema [2] representa um recurso único, tal como tempo de CPU ou memória, O Red Hat Enterprise Linux 6 fornece nove subsistemas cgroups, listados abaixo por nome e função.
Subsistemas Disponíveis no Red Hat Enterprise Linux
blkio— este subsistema define limites de acesso de entrada/saída para e a partir de dispositivos de bloco tais como drives físicos (disco, estado sólido, USB, etc).cpu— este subsistema usa o agendador para fornecer acesso às tarefas de cgroups para o CPU.cpuacct— este subsistema gera relatórios automáticos nos recursos de CPU usados pelas tarefas em um cgroup.cpuset— este subsistema atribui CPUs individuais (em sistema multicore) e nós de memória para atribuir em um cgroup.devices— este subsistema permite ou nega acesso aos dispositivos por tarefas em um cgroup.freezer— este subsistema suspende ou retoma tarefas em um cgroup.memory— este subsistema define limites no uso de memória pelas tarefas em um cgroup e gera relatórios automáticos nos recursos de memória usados por essas tarefas.net_cls— este subsistema marca os pacotes de rede com um identificador de classe (classid) que permite que o controlador de tráfego do Linux (tc) identifique os pacotes que originam de um cgroup em particular.ns— o subsistema do namespace.
Nota
Você pode encontrar o termo controlador de recursos (resource controller) ou simplesmente controlador (controller) nas literaturas do cgroup tais como as páginas man ou documentação do kernel. Ambos destes termos são sinônimos com “subsistemas”, e partem do fato que um subsistema tipicamente agenda um recurso ou aplica um limite aos cgroups na hierarquia que está anexada.
A definição de um subsistema (controlador de recurso) é bem geral: é algo que age sobre um grupo de tarefas, como exemplo os processos.
[1]
O processo pai é capaz de alterar o ambiente antes de passa-lo para outro processo filho
[2]
Você deve estar atento que subsistemas também são chamados controladores de recursos (resource controllers), ou simplesmente controladores (controllers), nas páginas man libcgroup e outras documentações.