Глава 1. Введение в контрольные группы

Red Hat Enterprise Linux 6 предоставляет новые возможности ядра — контрольные группы или cgroups (от англ. control groups). Контрольные группы позволяют распределять между процессами ресурсы — процессорное время, память, доступ к сети. Настройки существующих групп можно изменять динамически, запрещать и разрешать их доступ к ресурсам. С помощью cgconfig можно обеспечить сохранение конфигурации cgroups между перезагрузками.
Cgroups позволяют осуществлять тонкий контроль распределения, приоритизации и управления системными ресурсами. При этом ресурсы оборудования эффективно распределяются между пользователями и заданиями.

1.1. Организация контрольных групп

Подобно процессам, контрольные группы организованы иерархически, и дочерние группы наследуют атрибуты родительских. Существует две основных модели организации групп (см. ниже).

Модель процессов Linux

Все процессы в Linux являются дочерними по отношению к init, который запускается во время загрузки системы и запускает другие процессы. Таким образом, иерархия процессов Linux представляет собой дерево с единственным корнем.
Все процессы за исключением init наследуют настройки окружения (переменную PATH и пр.) [1] и другие атрибуты родительского процесса (дескрипторы файлов и пр.).

Модель контрольных групп

Основные сходства контрольных групп и процессов:
  • организованы в виде иерархии;
  • дочерние группы выборочно наследуют атрибуты родительской группы.
Основное отличие заключается в том, что в системе одновременно может существовать множество независимых иерархий контрольных групп.
Каждая иерархия может соответствовать одной или нескольким подсистемам. Подсистема[2] определяет отдельный тип ресурса, например процессорное время или память. Всего в Red Hat Enterprise Linux 6 есть 9 подсистем (см. ниже).

Подсистемы в Red Hat Enterprise Linux

  • blkio: ограничение ввода-вывода блочных устройств (дисков, USB и т.п.).
  • cpu: использует планировщик для управления доступом к процессору.
  • cpuacct: генерирует отчеты об использовании процессорных ресурсов.
  • cpuset: отвечает за выделение процессоров и узлов памяти в многопроцессорных системах .
  • devices: отвечает за управление доступом заданий к устройствам.
  • freezer: останавливает и возобновляет работу заданий контрольной группы.
  • memory: накладывает ограничения и генерирует отчеты об использовании памяти.
  • net_cls: позволяет присвоить сетевым пакетам идентификатор класса (classid), который помогает контроллеру tc идентифицировать пакеты, поступающие из заданной контрольной группы.
  • ns: подсистема пространства имен.

Примечание

Возможно, вы уже сталкивались с терминами контроллер и контроллер ресурсов в документации ядра. Оба термина являются синонимами «подсистемы».
Само определение подсистемы довольно расплывчато — это механизм управления группами процессов.


[1] Родительский процесс может изменять настройки окружения до передачи их дочернему процессу.
[2] В документации и на справочных страницахlibcgroup подсистемы также называются контроллерами ресурсов или просто контроллерами.