Глава 2. Работа с контрольными группами

Управление контрольными группами осуществляется с помощью инструментов из пакета libcgroup. В принципе, параметры групп можно изменить на время текущего сеанса с помощью стандартных команд оболочки, но libcgroup значительно упрощает этот процесс и предоставляет больше возможностей. В данном руководстве рассматривается настройка групп с использованием libcgroup, но приводятся и эквивалентные команды оболочки.

Примечание

В режиме root:
~]# yum install libcgroup

2.1. Служба cgconfig

cgconfig устанавливается вместе с libcgroup и рекомендуется для создания иерархий, их связи с подсистемами и управления группами.
В Red Hat Enterprise Linux 6 cgconfig не запускается по умолчанию. При ее запуске с помощью chkconfig будет прочитан файл конфигурации /etc/cgconfig.conf. Каждый раз при запуске группы будут создаваться заново и таким образом сохранять постоянство. Исходя из настроек в /etc/cgconfig.conf, cgconfig может создавать иерархии, подключать файловые системы, создавать контрольные группы и настраивать подсистемы для каждой группы.
В исходном /etc/cgconfig.conf определены настройки для создания и подключения иерархии для каждой подсистемы, и для связи подсистем с этими иерархиями.
При остановке cgconfig (команда service cgconfig stop) все иерархии будут отключены.

2.1.1. cgconfig.conf

Файл cgconfig.conf содержит два типа записей — mount и group. В секции mount создаются иерархии, которые затем подключаются как виртуальные файловые системы. Созданным иерархиям могут быть назначены подсистемы. Формат:
mount {
<подсистема> = <путь>;
…
}

Пример 2.1. Создание секции mount

Пример создания иерархии для подсистемы cpuset:
mount {
    cpuset = /cgroup/cpu;
}
что эквивалентно командам:
~]# mkdir /cgroup/cpu
~]# mount -t cgroup -o cpu cpu /cgroup/cpu
Записи group содержат определения групп и параметры подсистем. Например:
group <имя> {
    [<права>]
    <подсистема> {
        <параметр> = <значение>;
        …
    }
    …
}
Секция прав доступа не является обязательной. Ее формат:
perm {
    task {
        uid = <пользователь>;
        gid = <группа>;
    }
    admin {
       uid = <администратор>;
       gid = <админ_группа>;
    }
}

Пример 2.2. Создание секции group

В следующей секции создается контрольная группа для служб sql. Пользователям в группе sqladmin разрешается добавлять задачи в группу, а пользователю root разрешается изменять параметры подсистем.
group daemons/sql {
    perm {
        task {
            uid = root;
            gid = sqladmin;
        } admin {
            uid = root;
            gid = root;
        }
    } cpu {
        cpu.shares = 100;
    }
}
Эквивалентный набор команд оболочки в комбинации с секцией mount (см. Пример 2.1, «Создание секции mount») будет выглядеть так:
~]# mkdir -p /cgroup/cpu/daemons/sql
~]# chown root:root /cgroup/cpu/daemons/sql/*
~]# chown root:sqladmin /cgroup/cpu/daemons/sql/tasks
~]# echo 100 > /cgroup/cpu/daemons/sql/cpu.shares

Примечание

Чтобы изменения в /etc/cgconfig.conf вступили в силу, надо перезапустить cgconfig:
~]# service cgconfig restart
При установке libcgroup будет создан шаблон файла /etc/cgconfig.conf. Знаки # в начале строки отделяют комментарии, которые cgconfig будет игнорировать.