2.5. Grupos de Controle

Red Hat Enterprise Linux oferece muitas opções úteis para ajuste do desempenho. Sistemas de grande porte, que escalam em centenas de processadores, podem ser ajustados para fornecer excelente desempenho. Mas ajuste desses sistemas requer considerável experiência e uma carga de trabalho bem definido. Quando grandes sistemas eram caros e poucos em número, era aceitável dar-lhes um tratamento especial. Agora que esses sistemas são mainstream, são necessários instrumentos mais eficazes.
Para complicar ainda mais as coisas, os sistemas mais poderosos estão sendo usados agora para a consolidação de serviço. As cargas de trabalho, que eram executadas em 4-8 servidores mais antigos são agora colocadas num único servidor. E, como discutido anteriormente Seção 1.2.1, “Computação Paralela”, muitos sistemas de médio alcance nos dias de hoje contêm mais núcleos do que máquinas antigas de alto desempenho.
Muitos aplicativos modernos são projetados para processamento paralelo, usando vários segmentos ou processos para melhorar o desempenho. No entanto, alguns aplicativos podem fazer uso efetivo de mais de oito threads. Por isso, várias aplicações normalmente precisam ser instaladas em um sistema de 32 CPU para maximizar a capacidade.
Considere a situação: pequenos sistemas convencionais de baixo custo já estão em paridade com o desempenho das máquinas antigas caras e de alto desempenho. Máquinas de alto desempenho mais baratas ofereceram aos arquitetos de sistemas a capacidade de consolidar mais serviços em menos máquinas.
No entanto, alguns recursos (tal como E/S e comunicação de rede) são compartilhadas e não crescem tão rapidamente quanto a conta de CPU. Como tal, um sistema que acomoda aplicativos múltiplos podem experienciar desempenho geral degradado quando um aplicativo monopoliza demais um único recurso.
Para resolver isso, o Red Hat Enterprise Linux 6 suporta agora os grupos de controle (cgroups). Os Cgroups permitem que os administradores aloquem recursos para tarefas específicas conforme necessário. Isto significa, por exemplo, ser capaz de alocar 80% dos quatro CPUs, 60GB de memória, e 40% de E/S de disco para um aplicativo de banco de dados. O aplicativo da Web em execução no mesmo sistema pode ter recebido duas CPUs, 2GB de memória, e 50% da largura de banda de rede disponível.
Como resultado, o banco de dados e os aplictivos da Web fornecem bom desempenho, pois o sistema evita que ambos consumam recursos de sistema excessivamente. Além disso, muitos aspectos do cgroups são auto-ajustáveis,permitindo que o sistema responda de forma adequada à mudanças na carga de trabalho.
Um cgroup possui dois componentes principais:
  • Uma lista de tarefas atribuídas ao cgroup
  • Recursos alocados a estas tarefas
As tarefas atribuídas ao cgroup executam dentro do cgroup. Qualquer tarefa filho que eles gerem também executam dentro do cgroup. Isto permite que um administrador gerencie um aplicativo todo como uma unidade única. Um administrador também pode configurar alocações para os seguintes recursos:
  • CPUsets
  • Memória
  • E/S
  • Rede (largura de banda)
Dentro das CPUsets, os cgroups permitem que administradores configurem o número de CPUs, afinidades para CPUs específicas ou nós [3], e a quantia de tempo da CPU utilizada por um conjunto de tarefas. O uso dos cgroups para configurar o CPUsets é crucial para garantir um desempenho bom geral, prevenindo um aplicativo de consumir recursos de forma excessiva no custo de outras tarefas enquanto garante simultaneamente que o aplicativo não falte durante o tempo de CPU.
A largura de banda de E/S e largura de banda de rede são gerenciadas por outros controladores de recursos. Novamente, os controladores de recursos permitem que vocÊ determine quanto de largura de banda as tarefas no cgroup poderão consumir, e garantir que as tarefas no cgroup não consumam recursos excessivamente nem fique sem recursos.
Os Cgroups permitem que os administradores definam e aloquem, em um alto nível, os recursos de sistemas que diversos aplicativos precisam (e continuarão) a consumir. O sistema então gerencia e balnceia automaticamente os diversos aplicativos, entregando um bom desempenho já esperado e otimizando o desempenho do sistema geral.
Para mais informações sobre como utilizar os grupos de controle, consulte o Guia de Gerenciamento de Recursos, disponível em http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.


[3] Um nó é geralmente definido como um conjunto de CPUs ou núcleos dentro de um soquete.