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].

Виноски ред.

  1. Jonathan Corbet (29 травня 2007). Process containers. LWN.net. Архів оригіналу за 12 червня 2017. Процитовано 8 червня 2014.
  2. а б в Jonathan Corbet (29 жовтня 2007). Notes from a container. LWN.net. Архів оригіналу за 22 червня 2012. Процитовано 8 червня 2014.
  3. Jonathan Corbet (31 липня 2007). Controlling memory use in containers. LWN. Архів оригіналу за 29 січня 2018. Процитовано 8 червня 2014.
  4. Jonathan Corbet (23 жовтня 2007). Kernel space: Fair user scheduling for Linux. Network World. Архів оригіналу за 19 жовтня 2013. Процитовано 22 серпня 2012.
  5. Kamkamezawa Hiroyu (19 листопада 2008). Cgroup and Memory Resource Controller (PDF). Japan Linux Symposium. Архів оригіналу (PDF presentation slides) за 22 липня 2011. Процитовано 8 червня 2014.
  6. а б Dave Hansen. Resource Management (PDF). Linux Foundation. Архів оригіналу (PDF presentation slides) за 9 жовтня 2011. Процитовано 8 червня 2014.
  7. Matt Helsley (3 лютого 2009). LXC: Linux container tools. IBM developerWorks. Архів оригіналу за 29 жовтня 2012. Процитовано 8 червня 2014.
  8. Grid Engine cgroups Integration. Scalable Logic. 05-22-2012. Архів оригіналу за 26 січня 2013. Процитовано 8 червня 2014.
  9. cgroups, kernel.org, архів оригіналу за 6 вересня 2012, процитовано 8 червня 2014

Посилання ред.