Что такое cgroups v2
cgroups v2 - это механизм ядра, который делит ресурсы системы между группами процессов. Для каждой группы ядро считает и ограничивает CPU, память, дисковый и сетевой IO. Всё управляется через файловую систему /sys/fs/cgroup.
Проверить, используется ли v2:
mount | grep cgroup2
cat /sys/fs/cgroup/cgroup.controllers
Иерархия и контроллеры
Все группы - это директории внутри /sys/fs/cgroup. В каждой можно включить контроллеры и настроить лимиты. Процесс "попадает" в cgroup, когда его PID записывают в файл cgroup.procs.
Пример создания отдельной группы вручную:
cd /sys/fs/cgroup
mkdir test.slice
echo "+cpu +memory +io" > cgroup.subtree_control
cd test.slice
echo $$ > cgroup.procs # добавить текущий shell
Ограничение CPU
CPU в v2 настраивается через квоту и период. Так ядро решает, какую долю от одного ядра может использовать группа. Пример: не более 50% одного CPU:
echo "100000" > cpu.max # период 100 мс
echo "50000" >> cpu.max # квота 50 мс
Для полного запрета ограничения (no throttle):
echo "max" > cpu.max
Ограничение памяти
Ядро отслеживает все страницы памяти группы и сравнивает их с лимитом. При превышении включается reclaim, а в крайнем случае OOM внутри cgroup. Пример жёсткого лимита 512 МБ:
echo $((512 * 1024 * 1024)) > memory.max
Текущие значения и пики:
cat memory.current
cat memory.events
Ограничение дискового IO
Контроллер io задаёт лимиты на чтение и запись для конкретных устройств. Ядро контролирует количество операций и суммарную пропускную способность. Пример: ограничить чтение до 10 МБ/с для /dev/sda:
echo "8:0 rbps=10485760" > io.max
Узнать номера устройств:
lsblk --output NAME,MAJ:MIN
Вывод
cgroups v2 - это единая иерархия, где для каждой директории можно включить контроллеры CPU, памяти и IO, добавить процессы и задать жёсткие лимиты. Всё управление сводится к записи чисел и параметров в файлы внутри /sys/fs/cgroup, а дальше ядро само выполняет политику.
LinuxCamp | #overview
