Menu Close

Red Hat Training

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

3.4. cpuset

O subsistema cpuset atribui CPUs individuais e nós de memória para cgroups. Cada cpuset pode ser especificada de acordo com os seguintes parâmetros, cada um em um pseudofile separado, dentro de um sistema de arquivo virtual de cgroup:

Importante

Alguns subsistemas possuem parâmetros obrigatórios que você precisa definir antes de mover uma tarefa em um cgroup que usa qualquer destes subsistemas. Por exemplo, antes de mover uma tarefa em um cgroup que usa o subsistema cpuset, os parâmetros cpuset.cpus e cpuset.mems devem estar definidos para o cgroup.
cpuset.cpus (obrigatório)
especifica as CPUs cujas tarefas deste cgroup possuem acesso. Esta é uma lista separada por vírgulas em formato ASCII, com hífens ("-") que representam classes. Por exemplo,
0-2,16
representa CPUs 0, 1, 2 e 16.
cpuset.mems (obrigatório)
especifica os nós de memória cujas tarefas neste cgroup possuem acesso. Esta é uma lista separada por vírgulas em formato ASCII, com hífens ("-") que representam classes. Por exemplo,
0-2,16
representa nós de memória 0,1,2 e 16.
cpuset.memory_migrate
contém uma sinalização (0 ou 1) que especifica se a página na memória deve migrar para um novo nó se os valores em cpuset.mems mudarem. Por padrão, a migração de memória é desabilitada (0) e a página fica no nó para o qual eles foram alocados originalmente, até mesmo se este nó não for mais um dos nós agora especificados em cpuset.mems. Se habilitado (1), o sistema irá migrar páginas para nós de memória dentro dos novos parâmetros especificados pelo cpuset.mems, mantendo sua colocação relativa se possível, por exemplo, páginas no segundo nó na lista especificada inicialmente pelo cpuset.mems será alocada ao segundo nó na lista agora especificada por cpuset.mems, se este local estiver disponível.
cpuset.cpu_exclusive
contém um sinalizador (0 ou 1) que especifica se outras cpusets além desta e seus pais e filhos podem compartilhar as CPUs especificadas para este cpuset. Por padrão o (0), CPUs não são alocadas exclusivamente à uma cpuset.
cpuset.mem_exclusive
contém uma sinalização (0 ou 1) que especifica se outra cpuset pode compartilhar os nós de memória especificaods para este cpuset. Por padrão (0), os nós de memória não são alocados exclusivamente à uma cpuset. Ao reservar os nós de memória ao uso exclusivo de uma cpuset (1) é funcionalmente o mesmo que habilitar uma hardwall de memória com o cpuset.mem_hardwall.
cpuset.mem_hardwall
contém uma sinalização (0 ou 1) que especifica se alocações de kernel de página de memória e dados de buffer devem ser restringidos à nós de memórias especificados por esta cpuset. Por padrão (0), os dados de buffer e página são compartilhados com os processos que pertencem aos usuários múltiplos. Com o hardwall habilitado (1) cada alocação de usuário de tarefa pode ser mantido separadamente.
cpuset.memory_pressure
um arquivo de somente leitura que contém uma média de execução de pressão de memória criada por processos neste cpuset. O valor neste pseudofile é automaticamente atualizado quando o cpuset.memory_pressure_enabled é habilitado, caso contrário o psedudofile conterá o valor 0.
cpuset.memory_pressure_enabled
contém uma sinalização (0 ou 1) que especifica se o sistema deve computar a pressão de memória criada pelos processos neste cgroup. Os valores computados são apresentados em cpuset.memory_pressure e representam a taxa na qual os processos tentam liberar a memória em uso, reportada como um valor inteiro de tentativas para requerer memória por segundo, multiplicada por 1000.
cpuset.memory_spread_page
contém uma sinalização (0 ou 1) que especifica se os buffers de sistema de arquivo devem ser espalhados de maneira igual entre os nós de memória alocados à este cpuset. Por padrão (0), nenhuma tentativa é feita para espalhar páginas de memória para estes buffers de forma igual, e os buffers são colocados no mesmo nó no qual o processo que o criou estiver rodando.
cpuset.memory_spread_slab
contém uma sinalização (0 ou 1) que especifica se o slab do kernel agrupamento de operações de entrada/saída do arquivo, deve ser distribuído igualmente entre as cpuset. Por padrão (0), não é feita nenhuma tentativa de distribuir caches de slab do kernel igualmente, e os caches de slab são colocados no mesmo nó no qual o processo que o criou estiver rodando.
cpuset.sched_load_balance
contém uma sinalização (0 ou 1) que especifica se o kernel irá balancear as cargas nas CPUs neste cpuset. Por default (1), o kernel balanceia cargas movendo processos de CPUs sobrecarregadas para CPUs menos usadas.
Observe, entretanto que definir este sinalizador em um cgroup não possui efeito se o balanceador de carga estiver ativado ou em qualquer cgroup pai, já que o balanceador de carga já está sendo usado em um nível maior. Portanto para desativar o balanceador de carga em um cgroup, desative o balanceador de carga também em cada um de seus pais na hierarquia. Neste caso, você deve também considerar se o balanceador de carga deve estar ativado para quaisquer irmãos no cgroup em questão.
cpuset.sched_relax_domain_level
contém um inteiro entre -1 e um valor positivo pequeno, o qual representa a largura da classe da CPUs nos quais o kernel deve tentar balancear cargas. Este valor não é nulo se cpuset.sched_load_balance estiver desabilitada.
O efeito preciso deste valor varia de acordo com a arquitetura do sistema, mas os valores seguintes são típicos:
Valores de cpuset.sched_relax_domain_level
ValorEfeito
-1Usa o valor padrão do sistema para carregar balanceamento
0Não realiza balanceamento de carga imediata, balanceia cargas somente periódicamente.
1Balanceia cargas imediatamente em todas as opções no mesmo núcleo.
2Balanceia cargas imediatamente em núcleos do mesmo pacote
3Balanceia cargas imediatamente em CPUs do mesmo nó ou blade
4Balanceia cargas imediatamente em diversas CPUs em arquiteturas com acesso de memória não uniforme (NUMA)
5Balanceia cargas imediatamente em todas as CPUs em arquiteturas com NUMA.