Como posso configurar os cgroups para compartilhar recursos entre usuários?

11

Costumava haver uma opção de configuração do kernel chamada sched_user ou similar em cgroups. Isso permitiu (que eu saiba) que todos os usuários compartilhem razoavelmente os recursos do sistema. Em 2.6.35 não está disponível. Existe uma maneira que eu possa configurar o meu sistema para compartilhar automaticamente os recursos de io / cpu / memória entre todos os usuários (incluindo root?). Eu nunca configurei um cgroup antes, existe um bom tutorial para fazer isso? Muito obrigado.

    
por NightwishFan 23.12.2010 / 11:35

1 resposta

12

O kernel documentação fornece uma cobertura geral de cgroups com exemplos.

O pacote cgroups-bin (que depende de libcgroup1 ) já fornecido pela distribuição deve ser bom.

A configuração é feita editando os dois arquivos a seguir:

/etc/cgconfig.conf

Usado pelo libcgroup para definir grupos de controle, seus parâmetros e pontos de montagem.

/etc/cgrules.conf

Usado pelo libcgroup para definir os grupos de controle aos quais o processo pertence.

Esses arquivos de configuração já contêm exemplos, portanto, tente ajustá-los aos seus requisitos. As páginas man abrangem sua configuração muito bem.

Depois, inicie o daemon de gerenciador de carga de trabalho e de regras:

service cgconfig restart
service cgred restart

O gerenciador de carga de trabalho (cgconfig) é responsável por alocar os recursos.
Adicionando um novo processo ao gerente:

cgexec [-g <controllers>:<path>] command [args]

Adicionando um processo já em execução ao gerente:

cgclassify [-g <controllers>:<path>] <pidlist>

Ou automaticamente no arquivo cgrules.conf e no CGroup Rules Daemon (cgred), que força cada processo recém-gerado no grupo especificado.

Exemplo de /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

Exemplo /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Isso dividirá os recursos da CPU entre 50 e 50 entre o usuário 'alice' e 'bob'

    
por 24.12.2010 / 13:05