Info
Content

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
Back to top