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

Посилання

  • Linux kernel documentation on cgroups [Архівовано 7 листопада 2018 у Wayback Machine.]
  • п
  • о
  • р
Організація
Ядро
Підтримка
  • Розробники
    • The Linux Programming Interface
    • kernel.org
    • LKML
    • Linux conferences
  • Користувачі
    • Linux User Group (LUG)
Реалізація
Debugging
Завантаження
ABIs
APIs
Kernel
System Call
Interface
  • POSIX
    • ioctl
    • select
    • open
    • read
    • close
    • sync
  • Linux-only
    • futex
    • epoll
    • splice
    • dnotify
    • inotify
    • readahead
In-kernel
Userspace
Демони,
Файлові системи
Бібліотеки-
обгортки
Компоненти
  • модулі ядра
  • BlueZ
  • cgroups
  • консоль
  • bcache
  • Device mapper
  • dm-cache
  • dm-crypt
  • DRM
  • EDAC
  • evdev
  • Kernel same-page merging (KSM)
  • LIO
  • Framebuffer
  • LVM
  • KMS driver
  • Netfilter
  • Netlink
  • nftables
  • Network scheduler
  • perf
  • SLUB
  • zram
  • zswap
  • Process and I/O schedulers:
  • O(n) scheduler
  • O(1) scheduler
  • Completely Fair Scheduler (CFS)
  • Brain Fuck Scheduler
  • Noop scheduler
  • SCHED_DEADLINE
  • initramfs
  • KernelCare
  • kexec
  • kGraft
  • kpatch
  • Ksplice
Variants
Віртуалізація
Adoption
Range
of use
  • Desktop
  • Embedded
  • Gaming
  • Тонкий клієнт:
  • Сервер:
  • Devices
Adopters
  • List of Linux adopters
  • GENIVI Alliance
  •   Портал «Інформаційні технології/Вільне програмне забезпечення»
  • Категорія Категорія:Ядро Linux
    • п
    • о
    • р
    Апаратна
    (гіпервізори)
    Native
    Hosted
    Specialized
    • Basilisk II
    • Bochs
    • Cooperative Linux
    • DOSBox
    • DOSEMU
    • PCem
    • PikeOS
    • SheepShaver
    • SIMH
    • Windows on Windows
      • Virtual DOS machine
    • Win4Lin
    Independent
    Tools
    В операційній
    системі
    контейнери ОС
    • FreeBSD jail
    • iCore Virtual Accounts
    • Linux-VServer
    • Linux Containers
    • OpenVZ
    • Solaris Containers
    • Virtuozzo
    • Workload Partitions
    контейнери програм
    віртуальне ядро
    • Rump kernel
    • User-mode Linux
    • vkernel
    інше
    • BrandZ
    • cgroups
    • chroot
    • namespaces
    • eBPF
    • seccomp
    оркестрація
    Десктопа
    • Citrix Virtual Apps
    • Citrix Virtual Desktops
    • Remote Desktop Services
    • VMware Horizon
    Аплікації
    • Ceedo
    • Citrix Virtual Apps
    • Dalvik
    • InstallFree
    • Microsoft App-V
    • Remote Desktop Services
    • Symantec Workspace Virtualization
    • Turbo
    • VMware ThinApp
    • ZeroVM
    Мережі
    інше