Contexto

Contexto

Contexto

Tenho um sistema no qual preciso verificar periodicamente o uso:

  • relativo (porcentagens) paraCPU
  • e absoluto (GB) para memory.

Como está implementado atualmente

A linguagem que estamos usando é python.

No âmbito do sistemapsutil

Para estatísticas de todo o sistema, é trivial, pois podemos usar psutil.cpu_percent()e psutil.virtual_memory().

cgroup(v1)

O problema é que às vezes o script é executado dentro do contêiner e gostaríamos de monitorar o uso de estatísticas específicas cgroupem vez de estatísticas de todo o sistema.

Já existe implementação cgroupsem nosso sistema que se baseia em:

  • para CPU:
    • cpu.cfs_period_us
    • cpu.cfs_quota_us
    • cpuacct.usage
  • para memória:
    • memory.usage_in_bytes
    • memory.limit_in_bytes

O que eu preciso

Aqui preciso de uma resposta para duas perguntas:

  • A implementação atual é baseada na leitura de valores diretamente de arquivos cgroup?
  • Caso contrário, existem ferramentas que apoiem a obtenção fácil desse tipo de informação.
  • Se sim, como posso adaptar esta solução cgroup2?

Por que a solução atual não funciona paracgroup2

O principal problema que tenho agora é a falta de suporte, cgroup2já que a implementação atual é baseada na estrutura de arquivos aninhados.

cgroupsobreUbuntu 20.04

$ cat /proc/mounts | grep cgroup
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0

cgroup2sobreUbuntu 22.04

$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0

informação relacionada