44.3. Usando grupos de controle através de um sistema de arquivo virtual
Você pode usar control groups (cgroups
) para estabelecer limites, priorizar ou controlar o acesso aos recursos de hardware para grupos de processos. Isto permite que você controle granularmente o uso de recursos de aplicações para utilizá-los de forma mais eficiente. As seções seguintes fornecem uma visão geral das tarefas relacionadas ao gerenciamento do cgroups
tanto para a versão 1 como para a versão 2, utilizando um sistema de arquivo virtual.
44.3.1. Definição de limites de CPU para aplicações usando cgroups-v1 Copiar o linkLink copiado para a área de transferência!
Às vezes uma aplicação consome muito tempo de CPU, o que pode ter um impacto negativo na saúde geral de seu ambiente. Use o sistema de arquivo virtual /sys/fs/
para configurar os limites da CPU para uma aplicação usando control groups version 1 (cgroups-v1
).
Pré-requisitos
- Uma aplicação cujo consumo de CPU você deseja restringir.
Verifique se os controladores do
cgroups-v1
foram montados:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento
Identificar o ID do processo (PID) da aplicação que você deseja restringir no consumo da CPU:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O exemplo de saída do programa
top
revela quePID 6955
(aplicação ilustrativasha1sum
) consome muitos recursos de CPU.Criar um subdiretório no diretório do controlador de recursos
cpu
:mkdir /sys/fs/cgroup/cpu/Example/
# mkdir /sys/fs/cgroup/cpu/Example/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O diretório acima representa um grupo de controle, onde você pode colocar processos específicos e aplicar certos limites de CPU aos processos. Ao mesmo tempo, alguns arquivos de interface
cgroups-v1
ecpu
arquivos específicos do controlador serão criados no diretório.Opcionalmente, inspecionar o grupo de controle recém-criado:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O exemplo de saída mostra arquivos, tais como
cpuacct.usage
,cpu.cfs._period_us
, que representam configurações e/ou limites específicos, que podem ser definidos para processos no grupo de controleExample
. Observe que os respectivos nomes de arquivos são prefixados com o nome do controlador do grupo de controle ao qual pertencem.Por padrão, o grupo de controle recém-criado herda o acesso a todos os recursos da CPU do sistema sem um limite.
Configurar os limites da CPU para o grupo de controle:
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O arquivo
cpu.cfs_period_us
representa um período de tempo em microssegundos (µs, aqui representado como "us") para a freqüência com que o acesso de um grupo de controle aos recursos da CPU deve ser realocado. O limite superior é de 1 segundo e o limite inferior é de 1000 microssegundos.O arquivo
cpu.cfs_quota_us
representa a quantidade total de tempo em microssegundos para o qual todos os processos em um grupo de controle podem ser executados coletivamente durante um período (como definido porcpu.cfs_period_us
). Assim que os processos em um grupo de controle, durante um único período, esgotam todo o tempo especificado pela cota, eles são acelerados para o restante do período e não podem ser executados até o período seguinte. O limite inferior é de 1000 microssegundos.Os comandos do exemplo acima estabelecem os limites de tempo da CPU para que todos os processos coletivamente no grupo de controle
Example
possam ser executados apenas por 0,2 segundos (definido porcpu.cfs_quota_us
) de cada 1 segundo (definido porcpu.cfs_period_us
).Opcionalmente, verificar os limites:
cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adicione o PID do aplicativo ao grupo de controle
Example
:echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs echo "6955" > /sys/fs/cgroup/cpu/Example/tasks
# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs or # echo "6955" > /sys/fs/cgroup/cpu/Example/tasks
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O comando anterior assegura que uma aplicação desejada se torne um membro do grupo de controle
Example
e, portanto, não exceda os limites de CPU configurados para o grupo de controleExample
. O PID deve representar um processo existente no sistema. OPID 6955
aqui foi atribuído ao processosha1sum /dev/zero &
, utilizado para ilustrar o caso de uso do controladorcpu
.Verificar se a aplicação é executada no grupo de controle especificado:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O exemplo acima mostra que o processo da aplicação desejada é executado no grupo de controle
Example
, que aplica limites de CPU ao processo da aplicação.Identificar o consumo atual da CPU de sua aplicação acelerada:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Observe que o consumo de CPU do
PID 6955
diminuiu de 99% para 20%.
Recursos adicionais
- Para informações sobre o conceito de grupos de controle, ver Seção 44.1, “Entendendo os grupos de controle”.
-
Para mais informações sobre controladores de recursos, consulte a seção Seção 44.2, “O que são controladores de recursos do kernel” e a página do manual
cgroups(7)
. -
Para mais informações sobre o sistema de arquivos virtuais
/sys/fs/
, consulte a página do manualsysfs(5)
.