cgroups
cgroups (англ. control groups) — механізм ядра Linux, який обмежує і ізолює обчислювальні ресурси (процесорні, мережні, ресурси пам'яті, ресурси вводу-виводу) для груп процесів. Механізм дозволяє утворювати ієрархічні групи процесів із заданими ресурсними властивостями і забезпечує програмне керування ними.
Історія
Розробка була розпочата інженерами Google Полом Менеджем (Paul Menage) і Рохітом Сетом (Rohit Seth) в 2006 році і спочатку називалася «контейнери процесів» (англ. process containers)[1]. У 2007 році проект був перейменований в cgroups (від англ. control groups) з причини неоднозначності значення терміну «контейнер» в ядрі Linux.
Починаючи з версії 2.6.24 ядра Linux технологія включена в офіційні версії ядра[2]. З цього моменту розробка значно активізувалася, в механізм додано багато додаткових можливостей, механізм істотно використовується в технології ініціалізації systemd, а також є ключовим елементом у реалізації системи віртуалізації на рівні операційної системи LXC.
Можливості
Одна з цілей механізму cgroups — надати єдиний програмний інтерфейс до цілого спектру засобів управління процесами, починаючи з контролю одиничного процесу (таких як, наприклад, утиліта nice) аж до повної віртуалізації на рівні системи (як у OpenVZ, Linux-VServer, LXC).
Механізм надає такі можливості:
- обмеження ресурсів (англ. resource limiting): використання пам'яті, в тому числі віртуальної[3]
- пріоритезацію: різним групам можна виділити різну кількість процесорного ресурсу[4] та пропускної спроможності підсистеми вводу-виводу[5]
- облік: підрахунок витрат тих чи інших ресурсів групою[6]
- ізоляцію: поділ просторів імен для груп таким чином, що одній групі недоступні процеси, мережні з'єднання і файли іншої[2]
- управління: призупинення (англ. freezing) груп, створення контрольних точок (англ. checkpointing) та їхнє перезавантаження[6]
Використання
Контрольна група (cgroup) — набір процесів, об'єднаних за деякими ознаками, угруповання може бути ієрархічним з успадкуванням обмежень і параметрів батьківського групи. Ядро Linux надає доступ до множини так званих контролерів (підсистем) через інтерфейс cgroup[2], наприклад, контролер «memory» обмежує використання оперативної пам'яті, контролер «cpuacct» враховує використання процесорного часу.
Керування в cgroups можливе різними способами:
- через доступ до віртуальної файлової системи cgroup (по типу /proc) безпосередньо;
- утилітами cgcreate, cgexec, cgclassify (з libcgroup);
- використовуючи демон механізму правил (англ. rules engine daemon), який автоматично переміщує процеси певних користувачів, груп або команд в cgroups згідно конфігурації;
- побічно через інші програмні засоби, що використовують cgroups, наприклад, через систему віртуалізації LXC[7], бібліотеку libvirt, технологію ініціалізації systemd, кластерне управляюче програмне забезпечення Grid Engine[8].
Опис установки і використання механізму включено в документацію ядра Linux[9].
Виноски
- Jonathan Corbet (29 травня 2007). Process containers. LWN.net.
- Jonathan Corbet (29 жовтня 2007). Notes from a container. LWN.net.
- Jonathan Corbet (31 липня 2007). Controlling memory use in containers. LWN.
- Jonathan Corbet (23 жовтня 2007). Kernel space: Fair user scheduling for Linux. Network World. Архів оригіналу за 19 жовтня 2013. Процитовано 22 серпня 2012.
- Kamkamezawa Hiroyu (19 листопада 2008). Cgroup and Memory Resource Controller (PDF presentation slides). Japan Linux Symposium. Архів оригіналу за 22 липня 2011. Процитовано 8 червня 2014.
- Dave Hansen. Resource Management (PDF presentation slides). Linux Foundation. Архів оригіналу за 9 жовтня 2011. Процитовано 8 червня 2014.
- Matt Helsley (3 лютого 2009). LXC: Linux container tools. IBM developerWorks.
- Grid Engine cgroups Integration. Scalable Logic. 05-22-2012. Архів оригіналу за 26 січня 2013. Процитовано 8 червня 2014.
- cgroups. kernel.org. Архів оригіналу за 6 вересня 2012. Процитовано 8 червня 2014.