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
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.