cgroup

O /sys/fs/cgroup/ é uma parte essencial do sistema de arquivos virtual no Linux que oferece uma interface para gerenciar e monitorar os control groups (cgroups). Cgroups são uma funcionalidade do kernel do Linux que permite limitar, priorizar, monitorar e isolar recursos (como CPU, memória, disco e rede) de processos ou grupos de processos.

O que é um cgroup?

Um cgroup (control group) é um mecanismo que permite agrupar processos e controlar a quantidade de recursos que esses processos podem usar. Isso é útil em várias situações, como em servidores onde você deseja garantir que um processo não consuma todos os recursos, ou em ambientes de containers, onde cada container deve ser limitado em termos de recursos.

Estrutura do /sys/fs/cgroup/

A estrutura de diretórios em /sys/fs/cgroup/ reflete os diferentes tipos de recursos que podem ser controlados. Cada subdiretório em /sys/fs/cgroup/ representa um subsistema ou controladora de cgroup, como cpu, memory, blkio, net_cls, entre outros.

Exemplos de subdiretórios:

  • /sys/fs/cgroup/cpu/: Controla o uso da CPU.

  • /sys/fs/cgroup/memory/: Gerencia o uso de memória.

  • /sys/fs/cgroup/blkio/: Controla as operações de entrada/saída em dispositivos de bloco.

  • /sys/fs/cgroup/net_cls/: Marca pacotes de rede para classificação.

Exemplos práticos

  1. Limitando o uso de CPU de um processo:

    Suponha que você queira limitar o uso da CPU de um processo. Você pode criar um novo grupo dentro do cgroup de CPU e atribuir o processo a esse grupo.

    mkdir /sys/fs/cgroup/cpu/mygroup
    echo 100000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
    echo <PID> > /sys/fs/cgroup/cpu/mygroup/tasks

    Aqui, cpu.cfs_quota_us é definido como 100000, o que significa que os processos neste grupo só podem usar 10% de uma CPU. O <PID> é o identificador do processo que você deseja limitar.

  2. Limitando o uso de memória de um grupo de processos:

    Suponha que você tenha um grupo de processos que não deve usar mais que 512MB de memória.

    mkdir /sys/fs/cgroup/memory/mygroup
    echo 536870912 > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
    echo <PID1> > /sys/fs/cgroup/memory/mygroup/tasks
    echo <PID2> > /sys/fs/cgroup/memory/mygroup/tasks

    Neste exemplo, memory.limit_in_bytes é configurado para 536870912 bytes (512MB). Os processos <PID1> e <PID2> estarão sujeitos a esse limite de memória.

  3. Isolando I/O em disco:

    Você pode controlar a quantidade de operações de entrada/saída que um grupo de processos pode realizar.

    mkdir /sys/fs/cgroup/blkio/mygroup
    echo "8:0 1048576" > /sys/fs/cgroup/blkio/mygroup/blkio.throttle.write_bps_device
    echo <PID> > /sys/fs/cgroup/blkio/mygroup/tasks

    Aqui, 8:0 se refere ao dispositivo (por exemplo, /dev/sda), e 1048576 limita as operações de gravação a 1MB/s.

Monitoramento

Além de limitar e controlar recursos, o cgroup também permite monitorar o uso de recursos. Por exemplo:

  • Para verificar o uso atual da CPU de um grupo:

  • Para verificar o uso de memória:

Conclusão

O diretório /sys/fs/cgroup/ é uma interface poderosa para gerenciar recursos no Linux. Com cgroups, você pode garantir que os recursos do sistema sejam utilizados de forma eficiente e que processos ou grupos de processos não monopolizem esses recursos, melhorando a estabilidade e previsibilidade do sistema.

Last updated