Contexto

Contexto

Contexto

Tengo un sistema en el que tengo que comprobar periódicamente el uso:

  • relativo (porcentajes) paraCPU
  • y absoluto (GB) para memory.

Cómo se implementa actualmente

El lenguaje que estamos usando es python.

todo el sistemapsutil

Para estadísticas de todo el sistema es trivial ya que podemos usar psutil.cpu_percent()y psutil.virtual_memory().

cgroup(v1)

El problema es que a veces el script se ejecuta dentro del contenedor y luego nos gustaría monitorear el uso de estadísticas particulares cgroupen lugar de estadísticas de todo el sistema.

Ya existe una implementación cgroupsen nuestro sistema que se basa en:

  • para CPU:
    • cpu.cfs_period_us
    • cpu.cfs_quota_us
    • cpuacct.usage
  • para memoria:
    • memory.usage_in_bytes
    • memory.limit_in_bytes

Lo que necesito

Aquí necesito una respuesta para dos preguntas:

  • ¿Está bien la implementación actual basada en la lectura de valores directamente de archivos cgroup?
  • En caso negativo, ¿existen herramientas que permitan obtener ese tipo de información fácilmente?
  • En caso afirmativo, ¿cómo puedo adaptar esta solución cgroup2?

¿Por qué la solución actual no funciona?cgroup2

El principal problema que tengo ahora es la falta de soporte, cgroup2ya que la implementación actual se basa en una estructura de archivos anidados.

cgroupenUbuntu 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

cgroup2enUbuntu 22.04

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

información relacionada