2.8. Movendo um Processo para um Grupo de Controle
Mova um processo em um cgroup executando o comando
cgclassify
:
~]# cgclassify -g cpu,memory:group1 1701
A sintáxe para
cgclassify
é: cgclassify -g
subsystems:path_to_cgroup pidlist
, onde:
- subsystems é uma lista separada por vírgula de subsistemas ou
*
para iniciar o processo nas hierarquias associadas com todos os subsistemas disponíveis. Note que se os cgroups do mesmo nome existirem um múltiplas hierarquias, a opção-g
move os processos em cada um desses grupos. Certifique-se que o cgroup exista dentro de cada uma das hierarquias cujos subsistemas você especifica aqui. - path_to_cgroup é o caminho para o cgrupo dentro de sua hierarquia
- pidlist é uma lista separada por espaços do process identifier (PIDs)
Você também pode adicionar a opção
--sticky
antes do pid para manter qualquer processo filho no mesmo cgroup. Se você não definir esta opção e o daemon cgred estiver rodando, os processos filhos serão alocados aos cgroups baseados nas configurações encontradas em /etc/cgrules.conf
. O próprio processo, no entanto, ficará no grupo de controle no qual você iniciou.
Ao usar o
cgclassify
, você poderá mover diversos processos simultaneamente. Por exemplo, este comando muda os processos com PIDs 1701
e 1138
para o cgroup group1/
:
~]# cgclassify -g cpu,memory:group1 1701 1138
Observe que os PIDs a serem movidos são separados por espaços e que os grupos especificados devem estar em hierarquias diferentes.
Método alternativo
Para mover um processo para um cgroup diretamente, grave seu PID no arquivo
tasks
do cgroup. Por exemplo, para mover um processo com o PID 1701
para um cgroup em /cgroup/lab1/group1/
:
~]# echo 1701 > /cgroup/lab1/group1/tasks
2.8.1. O Daemon cgred
O Cgred é um daemon que move tarefas para cgroups de acordo com os parâmetros definidos no arquivo
/etc/cgrules.conf
. Entradas no arquivo /etc/cgrules.conf
podem tomar uma ou duas formas:
- user hierarchies control_group
- user:command hierarchies control_group
Por exemplo:
maria devices /usergroup/staff
Esta entrada especifica que qualquer processo que pertence ao usuário chamado
maria
acessará o subsistema de dispositivos de acordo com os parâmetros especificados no cgroup /usergroup/staff
. Para associar comandos específicos aos cgroups específicos, adicione o parâmetro command como se segue:
maria:ftp devices /usergroup/staff/ftp
A entrada agora especifica que quando o usuário chamado
maria
usa o comando ftp
, o processo é automaticamente movido ao cgroup /usergroup/staff/ftp
na hierarquia que contém o subsistema devices
. Note, entretanto, que o daemon move o processo ao cgroup somente depois que a condição apropriada é cumprida. Portanto, o processo ftp
poderá rodar por um curto período no grupo incorreto. Além disso, se o processo rapidamente gera filhos enquanto no grupo incorreto, estes filhos não poderão ser movidos.
Entradas no arquivos
/etc/cgrules.conf
podem incluir a seguinte nota extra:
@
— quando pré-fixado para user, indica um grupo ao invés de um usuário individual. Por exemplo,@admins
são usuários no grupoadmins
.*
— representa "todos". Por exemplo,*
no camposubsystem
representa todos os subsistemas.%
— representa um item igual ao item na linha acima. Por exemplo:@adminstaff devices /admingroup @labstaff % %