Контекст
У меня есть система, в которой мне приходится периодически проверять использование:
- относительный (проценты) для
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