cgroups

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

cgroups (англ. control groups) — механізм ядра Linux, який обмежує і ізолює обчислювальні ресурси (процесорні, мережеві, ресурси пам'яті, ресурси вводу-виводу) для груп процесів. Механізм дозволяє утворювати ієрархічні групи процесів із заданими ресурсними властивостями і забезпечує програмне керування ними.

Історія[ред.ред. код]

Розробка була розпочата інженерами Google Полом Менеджем (Paul Menage) і Рохітом Сетом (Rohit Seth) в 2006 році і спочатку називалася «контейнери процесів» (англ. process containers)[1]. У 2007 році проект був перейменований в сgroups (від англ. 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 (2007-05-29). «Process containers». LWN.net. 
  2. а б в Jonathan Corbet (2007-10-29). «Notes from a container». LWN.net. 
  3. Jonathan Corbet (2007-07-31). «Controlling memory use in containers». LWN. 
  4. Jonathan Corbet (2007-10-23). «Kernel space: Fair user scheduling for Linux». Network World. Процитовано 2012-08-22. 
  5. Kamkamezawa Hiroyu(2008-11-19). "Cgroup and Memory Resource Controller"(PDF presentation slides). {{{назва_книги}}}, Japan Linux Symposium.
  6. а б Dave Hansen. "Resource Management"(PDF presentation slides). {{{назва_книги}}}, Linux Foundation.
  7. Matt Helsley (2009-02-03). «LXC: Linux container tools». IBM developerWorks. 
  8. «Grid Engine cgroups Integration». Scalable Logic. 05-22-2012. Архів оригіналу за 2013-01-26. 
  9. cgroups, kernel.org, http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt 

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