Изучаем CGroups
Совсем кратко о Linux Control Groups
Control Groups ("Контрольные группы") - механизм ядра Linux для объединения/разделения наборов задач (процессов/потоков) и их (потенциальных) потомков в иерархические группы со строго определённым поведением по отношению к использованию системных ресурсов. Более подробно с терминологией и механизмами cgroups, можно ознакомиться в официальной документации производителя.
CGroups заменяют традиционный метод контроля за потреблением ресурсов каждым процессом в отдельности, на метод при котором управление осуществляется централизованно, на основании групповых правил.
В "классической ситуации" мы должны контролировать потребление ресурсов каждым процессом по отдельности. CGroups даёт нам возможность использовать централизованное управление ресурсами системы на основании разделения процессов по группам поддерживающим иерархии.
Говоря о "группе процессов" подразумевается, что ничего не мешает создать "группу" из одного процесса и ограничить его каким угодно образом в индивидуальном порядке, например поместив в неё сервис потребляющий все ресурсы процессора, или браузер, норовящий съесть всю память в системе.
С практической точки зрения это даёт следующие возможности:
- Установка жёстких ограничений потребления памяти группами процессов, включая подсистемы ядра. Все потомки процесса автоматически помещаются в ту же группу что и их родитель.
- Привязка группы процессов к наборам CPU, установку приоритетов доступа к ресурсу процессора, жёсткое лимитирование использования процессорного времени.
- Ограничение скорости ввода/вывода для сети и блочных устройств.
- "Заморозка процессов" - можно применить к особо буйным процессам "до выяснения".
- Ограничение прямого доступа к устройствам.
- Удобные и быстрые счётчики потребления ресурсов процессами в группах.
В связи с объёмностью, материал разбит на несколько частей, публикуемых по мере изучения и оформления статей.
В изложении я постарался сделать упор на последовательность в изучении и разбор "подводных камней" с которыми сталкиваются начинающие использовать cgroups.
Примечание: для возможностей нормальной работы с утилитами cgroup-bin пришлось пересобрать Debian пакет.