cgroups
Контрольные Группы (control groups) нужны для того, чтобы ограничивать процессам доступные ресурсы
Потому что если какой-то процесс потребит все ресурсы системы, то их не хватит для других, возможно, более важных процессов
В ядро 4.5 была официально добавлена новая версия механизма cgroups - cgroup v2
(cgroupv2 по сути переписан с нуля, он стремится избежать некоторых недостатков cgroup v1, предоставляя более унифицированный и предсказуемый интерфейс, используется только одна иерархия cgroup, в отличие от множества иерархий в cgroup v1)
Механизм cgroup состоит из ядра и подсистем
blkio
— устанавливает лимиты на чтение и запись с блочных устройств;cpuacct
— генерирует отчёты об использовании ресурсов процессора;cpu
— обеспечивает доступ процессов в рамках контрольной группы к CPU;cpuset
— распределяет задачи в рамках контрольной группы между процессорными ядрами;devices
— разрешает или блокирует доступ к устройствам;freezer
— приостанавливает и возобновляет выполнение задач в рамках контрольной группыhugetlb
— активирует поддержку больших страниц памяти для контрольных групп;memory
— управляет выделением памяти для групп процессов;net_cls
— помечает сетевые пакеты специальным тэгом, что позволяет идентифицировать пакеты, порождаемые определённой задачей в рамках контрольной группы;netprio
— используется для динамической установки приоритетов по трафику;pids
— используется для ограничения количества процессов в рамках контрольной группы.
Список подсистем можно получить так:
root@mon-test-vm-03x:/sys/fs/cgroup# ls -lh
total 0
dr-xr-xr-x 6 root root 0 Aug 25 2023 blkio
lrwxrwxrwx 1 root root 11 Aug 25 2023 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Aug 25 2023 cpuacct -> cpu,cpuacct
dr-xr-xr-x 6 root root 0 Aug 25 2023 cpu,cpuacct
dr-xr-xr-x 3 root root 0 Aug 25 2023 cpuset
dr-xr-xr-x 6 root root 0 Aug 25 2023 devices
dr-xr-xr-x 3 root root 0 Aug 25 2023 freezer
dr-xr-xr-x 6 root root 0 Aug 25 2023 memory
lrwxrwxrwx 1 root root 16 Aug 25 2023 net_cls -> net_cls,net_prio
dr-xr-xr-x 3 root root 0 Aug 25 2023 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Aug 25 2023 net_prio -> net_cls,net_prio
dr-xr-xr-x 3 root root 0 Aug 25 2023 perf_event
dr-xr-xr-x 6 root root 0 Aug 25 2023 pids
dr-xr-xr-x 2 root root 0 Aug 25 2023 rdma
dr-xr-xr-x 6 root root 0 Aug 25 2023 systemd
dr-xr-xr-x 5 root root 0 Aug 25 2023 unified
Чтобы создать контрольную группу нужно создать директорию в любой из подсистем. Там автоматически будут созданы все управляющие файлы
Чтобы добавить процессы в группу нужно прописать их pid'ы в файл tasks
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# mkdir vandudcgroup
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# mkdir vandudcgroup/vandudchildcgroup
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# mkdir vandudcgroup/vandudchildcgroup/vandudchildchildcgroup
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# tree vandudcgroup/
vandudcgroup/
├── cgroup.clone_children
├── cgroup.procs
├── cpuacct.stat
├── cpuacct.usage
├── cpuacct.usage_all
├── cpuacct.usage_percpu
├── cpuacct.usage_percpu_sys
├── cpuacct.usage_percpu_user
├── cpuacct.usage_sys
├── cpuacct.usage_user
├── cpu.cfs_period_us
├── cpu.cfs_quota_us
├── cpu.shares
├── cpu.stat
├── notify_on_release
├── tasks
└── vandudchildcgroup
├── cgroup.clone_children
├── cgroup.procs
├── cpuacct.stat
├── cpuacct.usage
├── cpuacct.usage_all
├── cpuacct.usage_percpu
├── cpuacct.usage_percpu_sys
├── cpuacct.usage_percpu_user
├── cpuacct.usage_sys
├── cpuacct.usage_user
├── cpu.cfs_period_us
├── cpu.cfs_quota_us
├── cpu.shares
├── cpu.stat
├── notify_on_release
├── tasks
└── vandudchildchildcgroup
├── cgroup.clone_children
├── cgroup.procs
├── cpuacct.stat
├── cpuacct.usage
├── cpuacct.usage_all
├── cpuacct.usage_percpu
├── cpuacct.usage_percpu_sys
├── cpuacct.usage_percpu_user
├── cpuacct.usage_sys
├── cpuacct.usage_user
├── cpu.cfs_period_us
├── cpu.cfs_quota_us
├── cpu.shares
├── cpu.stat
├── notify_on_release
└── tasks
2 directories, 48 files
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# yes >/dev/null &
[2] 26816
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# echo 26816 > vandudcgroup/vandudchildcgroup/vandudchildchildcgroup/tasks
root@mon-test-vm-03x:/sys/fs/cgroup/cpu# cat vandudcgroup/vandudchildcgroup/vandudchildchildcgroup/tasks
26816
No Comments