Контекст

Контекст

Контекст

У меня есть система, в которой мне приходится периодически проверять использование:

  • относительный (проценты) дляCPU
  • и абсолютный (ГБ) для memory.

Как это реализовано в настоящее время

Мы используем язык python.

общесистемныйpsutil

Для общесистемной статистики это тривиально, поскольку мы можем использовать psutil.cpu_percent()и psutil.virtual_memory().

cgroup(версия 1)

Проблема в том, что иногда скрипт запускается внутри контейнера, и тогда нам хотелось бы отслеживать использование конкретной, cgroupа не общесистемной статистики.

В нашей системе уже реализована реализация cgroups, основанная на:

  • для процессора:
    • cpu.cfs_period_us
    • cpu.cfs_quota_us
    • cpuacct.usage
  • для памяти:
    • memory.usage_in_bytes
    • memory.limit_in_bytes

Что мне нужно

Здесь мне нужен ответ на два вопроса:

  • Подходит ли текущая реализация, основанная на чтении значений непосредственно из файлов cgroup?
  • Если нет, то существуют ли какие-либо инструменты, позволяющие легко получить такую ​​информацию?
  • Если да, то как я могу адаптировать это решение cgroup2?

Почему текущее решение не работает дляcgroup2

Основная проблема, с которой я сейчас столкнулся, — это отсутствие поддержки, cgroup2поскольку текущая реализация основана на структуре вложенных файлов.

cgroupнаUbuntu 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

cgroup2наUbuntu 22.04

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

Связанный контент