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
ou1
) que especifica se a página na memória deve migrar para um novo nó se os valores emcpuset.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 emcpuset.mems
. Se habilitado (1
), o sistema irá migrar páginas para nós de memória dentro dos novos parâmetros especificados pelocpuset.mems
, mantendo sua colocação relativa se possível, por exemplo, páginas no segundo nó na lista especificada inicialmente pelocpuset.mems
será alocada ao segundo nó na lista agora especificada porcpuset.mems
, se este local estiver disponível. - cpuset.cpu_exclusive
- contém um sinalizador (
0
ou1
) 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
ou1
) 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 ocpuset.mem_hardwall
. - cpuset.mem_hardwall
- contém uma sinalização (
0
ou1
) 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 valor0
. - cpuset.memory_pressure_enabled
- contém uma sinalização (
0
ou1
) que especifica se o sistema deve computar a pressão de memória criada pelos processos neste cgroup. Os valores computados são apresentados emcpuset.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
ou1
) 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
ou1
) 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
ou1
) 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 secpuset.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_levelValor Efeito -1
Usa o valor padrão do sistema para carregar balanceamento 0
Não realiza balanceamento de carga imediata, balanceia cargas somente periódicamente. 1
Balanceia cargas imediatamente em todas as opções no mesmo núcleo. 2
Balanceia cargas imediatamente em núcleos do mesmo pacote 3
Balanceia cargas imediatamente em CPUs do mesmo nó ou blade 4
Balanceia cargas imediatamente em diversas CPUs em arquiteturas com acesso de memória não uniforme (NUMA) 5
Balanceia cargas imediatamente em todas as CPUs em arquiteturas com NUMA.