Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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>;
    }
}

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.