controlando a prioridade de aplicativos usando cgroups

8

Eu gostaria de entender melhor o cgroups e gostaria de entender os casos de uso para aplicar o cgroups.

Os cgroups são uma boa maneira de priorizar aplicativos diferentes (ou seja, dar maior prioridade a tipos específicos de aplicativos, como servidores da Web)?

Johnnie
fonte
A otimização da CPU é um bom caso de uso para cgroups: kennystechtalk.blogspot.co.uk/2015_04_01_archive.html
Ken Sharp

Respostas:

8

Existem vários usos para cgroups . Da administração do sistema, provavelmente o mais importante é a limitação de recursos - o exemplo clássico aqui é o acesso à CPU. Se você criar um grupo para, por exemplo, sshde conceder a ele um compartilhamento de tempo da CPU não desprezível (comparado a outros grupos ou o padrão no qual se enquadram todos os processos não classificados), é garantido que você poderá fazer login mesmo nos momentos em que a máquina estiver em execução tarefas com uso intensivo de CPU.

O mais interessante é que, se você conceder a esse processo de "acesso remoto" um compartilhamento de CPU muito maior do que o restante, será possível fazer logon quase instantaneamente (porque o daemon ssh será priorizado nos demais processos em execução) enquanto você não machucar a força geral da computação da máquina, uma vez que os recursos são alocados somente conforme a necessidade. Você geralmente deseja fazer isso junto com a priorização de E / S (incluindo rede). No entanto, como John aponta corretamente no comentário abaixo, não se deseja fazer essas coisas descuidadamente (pois isso pode ser disparado de maneira inesperada). O importante é ter em mente que os grupos são herdados por padrão - ou seja, não se deseja iniciar um problema de memória / CPU a partir de uma sessão ssh. No entanto, para isso, existem mecanismos que podem atribuir processos aos cgroups quando eles começam.

Outro uso é isolar os processos um do outro - em combinação com outros recursos (isolamento de namespace) nos kernels recentes do Linux, eles são usados ​​para criar virtualização no nível do SO, como o LXC (Linux Containers) .

Fora isso, você pode fazer várias coisas de contabilidade e controle (congelando alguns grupos de processos, atribuindo-os a núcleos específicos da CPU, etc.).

Os dois links aqui devem ser um ponto de partida razoável se você estiver procurando mais informações. Você também pode verificar o Documentation/cgroupsdiretório na árvore de fontes do kernel do Linux.

peterph
fonte
obrigado. o exemplo sshd é interessante e traz outro pensamento relacionado. um aspecto que eu não tinha considerado é garantir que outros recursos sejam alocados adequadamente - presumo que alguém com conhecimento incompleto do perfil de um aplicativo possa causar estragos alocando apenas recursos para CPU (neste exemplo) e sem alocação para I / O (diga rede). Em caso afirmativo - existem perfis bem conhecidos para cgroups publicados em algum lugar?
31412 Johnnie
@ John pergunta interessante de fato. Você pode verificar as distribuições que possuem systemd, que (ab) usam o cgroups para seus próprios propósitos - os arquivos da unidade systemd para serviços podem fornecer algumas dicas sobre o que pode ser razoável. Mas, no final, é sempre tarefa do administrador do sistema aprender da maneira mais difícil, o que realmente não é a "Good Idea (TM)".
Peterph
1
O @kokbira depende de qual nível - geralmente você escreve no sistema de cgrouppseudo - arquivos que pode ser necessário montar primeiro. Atualmente, na maioria dos casos, o sistema init faz isso por você e muitas vezes já usa o cgroups de alguma forma. A única resposta definitiva é ler a documentação: documentação do kernel , OpenRC @ Gentoo , systemd @ freedesktop .
Peterph 27/12/18
1
@kokbira o sistema operacional faz o que você manda (pelo menos um bom - há alguns que fazem muitas outras coisas que você não manda, mas isso é outra história). A idéia é que, se você executa um aplicativo, deseja que ele obtenha o que precisa para executar o que você espera. Se o aplicativo se comportar mal, cabe ao operador do sistema (que é você neste caso) fazer algo a respeito. Os autores da distribuição poderiam apresentar algumas heurísticas sobre como capturar esse tipo de problemas, mas isso causaria mais problemas que seriam corrigidos.
Peterph
1
@kokbira Quanto ao próprio Firefox, sugiro usar alguns complementos que diminuam a carga aplicada no navegador e, consequentemente, em todo o sistema. Da minha experiência, a origem NoScript e uBlock é suficiente. Especialmente o NoScript no "bloquear tudo por padrão" faz maravilhas - basta ativar o mínimo necessário para trabalhar com os sites que você está usando e você pode facilmente chegar a centenas de guias em um sistema de 8 GB de RAM e ainda funcionar muito bem. Além disso, você tem um nível adicional de proteção contra todo o lixo JS que a maioria dos sites usa atualmente para efeitos de fantasia desnecessários.
Peterph