Capítulo 2. Usando Grupos de Controle
A maneira mais fácil de trabalhar com cgroups é instalar o pacote libcgroup, que contém um número de utilitários de linha de comando relacionados ao cgroup e suas páginas man associadas. É possível montar hierarquias e definir parâmetros de cgroup (não persistentes) usando comandos shell e utilitários disponíveis em qualquer sistema. Entretanto, usar os utilitários fornecidos do libcgroup simplifica o processo e extende suas capabilidades. Portanto, este guia foca principalmente em comandos do libcgroup. Na maioria dos casos nós incluimos os comandos shell equivalentes para ajudar a descrever o mecanismo subjacente. Entretanto, nós recomendamos que você use os comandos libcgroup sempre que for prático.
Nota
Para usar os cgroups, primeiro certifique-se que o pacote libcgroup está instalado no seu sistema rodando, como root:
~]# yum install libcgroup
2.1. O Serviço cgconfig
O serviço
cgconfig
instalado com o pacote libcgroup fornece uma maneira conveniente para criar hierarquias, anexar subsistemas à hierarquias e gerenciar cgroups com essas hierarquias. Nós recomendamos que você use o cgconfig para gerenciar hierarquias e cgroups no seu sistema.
O serviço
cgconfig
não é iniciado por padrão no Red Hat Enterprise Linux 6. Quando você inicia o serviço com chkconfig
, ele lê o arquivo de configuração — /etc/cgconfig.conf
. Os cgroups são portanto recriados de sessão para sessão e se tornam persistentes. Dependendo dos conteúdos do arquivo de configuração, o cgconfig pode criar hierarquias, montar sistemas de arquivos necessários, criar cgroups e definir parâmetros de subsistemas para cada grupo.
O arquivo padrão
/etc/cgconfig.conf
instalado com o pacote libcgroup cria e monta uma hierarquia individual para cada subsistema e anexa os subsistemas à estas hierarquias.
Se você parar o serviço
cgconfig
(com o comando service cgconfig stop
), ele desmonta todas as hierarquias que montou.
2.1.1. O Arquivo cgconfig.conf
O arquivo
/etc/cgconfig.conf
contém dois tipos principais de entrada — mount e group. As entradas do Mount criam e montam hierarquias como sistemas de arquivos virtuais, e anexam subsistemas àquelas hierarquias. Entradas Mount são definidas usando a seguinte sintaxe:
mount { <controller> = <path>; … }
Veja Exemplo 2.1, “Criando entradas mount” para um exemplo de uso.
Exemplo 2.1. Criando entradas mount
O seguinte exemplo cria uma hierarquia para o subsistema
cpuset
:
mount { cpuset = /cgroup/cpu; }
o equivalente ao comandos shell:
~]#mkdir /cgroup/cpu
~]#mount -t cgroup -o cpu cpu /cgroup/cpu
Entradas de grupo criam cgroups e definem parâmetros de subsistema. Entradas Group são definidas com a seguinte sintaxe:
group <name> {
[<permissions>]
<controller> {
<param name> = <param value>;
…
}
…
}
Note que a seção
permissions
é opcional. Para definir permissões para uma entrada de grupo, use a seguinte sintaxe:
perm { task { uid = <task user>; gid = <task group>; } admin { uid = <admin name>; gid = <admin group>; } }
Veja Exemplo 2.2, “Criando uma entrada group” para exemplo de uso:
Exemplo 2.2. Criando uma entrada group
O seguinte exemplo cria um cgroup para daemons sql, com permissões para os usuários no grupo
sqladmin
para adicionar tarefas ao cgroup e ao usuário root
para modificar parâmetros de subsistemas:
group daemons/sql { perm { task { uid = root; gid = sqladmin; } admin { uid = root; gid = root; } } cpu { cpu.shares = 100; } }
Quando combinados com o exemplo da entrada de montagem no Exemplo 2.1, “Criando entradas mount”, os comandos shell equivalentes são:
~]#mkdir -p /cgroup/cpu/daemons/sql
~]#chown root:root /cgroup/cpu/daemons/sql/*
~]#chown root:sqladmin /cgroup/cpu/daemons/sql/tasks
~]#echo 100 > /cgroup/cpu/daemons/sql/cpu.shares
Nota
Você deve iniciar o serviço
cgconfig
para as mudanças no /etc/cgconfig.conf
terem efeito:
~]# service cgconfig restart
Quando você instala o pacote libcgroup, é gravado um arquivo de configuração de amostra
/etc/cgconfig.conf
. Os simbolos hash ('#
') no início de cada linha comentam aquela linha e a torna invisível ao serviço cgconfig.