Eu quero tentar o cgroup v2, mas não tenho certeza se ele está instalado na minha máquina linux
>> uname -r
4.14.66-041466-generic
Como o cgroup v2 está disponível na versão 4.12.0-rc5, presumo que ele esteja disponível na versão do kernel que estou usando.
https://www.infradead.org/~mchehab/kernel_docs/unsorted/cgroup-v2.html
No entanto, não parece que meu sistema tenha o cgroup v2, pois os arquivos de interface de memória mencionados em sua documentação não estão disponíveis no meu sistema.
https://www.kernel.org/doc/Documentation/cgroup-v2.txt
Parece que eu ainda tenho cgroup v1.
/sys/fs/cgroup/memory# ls
cgroup.clone_children memory.kmem.failcnt memory.kmem.tcp.usage_in_bytes memory.memsw.usage_in_bytes memory.swappiness
cgroup.event_control memory.kmem.limit_in_bytes memory.kmem.usage_in_bytes memory.move_charge_at_immigrate memory.usage_in_bytes
cgroup.procs memory.kmem.max_usage_in_bytes memory.limit_in_bytes memory.numa_stat memory.use_hierarchy
cgroup.sane_behavior memory.kmem.slabinfo memory.max_usage_in_bytes memory.oom_control notify_on_release
docker memory.kmem.tcp.failcnt memory.memsw.failcnt memory.pressure_level release_agent
memory.failcnt memory.kmem.tcp.limit_in_bytes memory.memsw.limit_in_bytes memory.soft_limit_in_bytes tasks
memory.force_empty memory.kmem.tcp.max_usage_in_bytes memory.memsw.max_usage_in_bytes memory.stat
Perguntas de acompanhamento Obrigado Brian pela ajuda. Por favor, deixe-me saber se eu deveria estar criando uma nova pergunta, mas acho que pode ser útil para outras pessoas se eu apenas fizer minhas perguntas aqui.
1) Não consigo adicionar controladores cgroup, seguindo o comando no documento
>> echo "+cpu +memory -io" > cgroup.subtree_control
No entanto, recebi "echo: erro de gravação: argumento inválido". Estou faltando um pré-requisito para esta etapa?
2) Eu executei um contêiner do docker, mas o log do daemon do docker reclamou de não conseguir encontrar "/sys/fs/cgroup/cpuset/docker/cpuset.cpus". Parece que o docker ainda está esperando o cgroupv1. Qual é a melhor maneira de habilitar o suporte ao cgroupv2 no meu daemon docker?
docker -v
Docker version 17.09.1-ce, build aedabb7
Você poderia executar o seguinte comando:
Se o seu sistema suportar cgroupv2, você verá:
Em um sistema com apenas cgroupv1, você só veria:
A maneira mais fácil é tentar montar o pseudo-sistema de arquivos. Se você puder montá-lo em um local, poderá tentar gerenciar processos com a interface:
Vejo que você citou a documentação acima. Um dos pontos que pode estar faltando é que os caminhos ainda precisam ser criados. Não há motivo para você gerenciar recursos do cgroup em qualquer local específico. É apenas convenção.
Por exemplo, você pode apresentar totalmente
procfs
em/usr/monkeys
... desde que o diretório/usr/monkeys
exista:Da mesma forma, posso fazer isso com o pseudo-sistema de arquivos cgroup v2:
Para verificar se o seu sistema Linux suporta cgroup v2 , verifique a existência de
cgroup.controllers
:Para inicializar o host com cgroup v2 , adicione a seguinte string à
GRUB_CMDLINE_LINUX
linha/etc/default/grub
e executesudo update-grub
:systemd.unified_cgroup_hierarchy=1
Distribuições Linux atuais que suportam cgroups v2
Docker 20.10 recomendado para cgroups v2
Também é útil - verificar se você está em um namespace sem privilégios
Alguns sistemas irão montar o cgroup v1 e o cgroup v2 por padrão, apenas em locais diferentes. Pode ajudar a ver onde eles estão com:
Saída de exemplo (no Ubuntu 20.04 LTS):
No entanto, isso não diz estritamente se o seu sistema suporta cgroup v2. Como a outra resposta mencionada,
grep cgroup /proc/filesystems
é ótimo para isso.Pode não ser relevante não apenas ver se o cgroup é suportado, mas também se eles estão habilitados, pois o seguinte comando pode ser usado:
stat -fc %T /sys/fs/cgroup/
No caso dos estados de saída
cgroup2fs
, cgroups v2 são usados,tmpfs
no caso de cgroups v1. Caso o sistema suporte cgroups v2, mas não seja ativado por padrão, ele pode ser ativado configurandosystemd.unified_cgroup_hierarchy=1
como parâmetro do kernel (por exemploGRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0
, em sistemas com GRUB)