Как я могу настроить cgroups для справедливого распределения ресурсов между пользователями?


11

Раньше в cgroups была опция конфигурации ядра, называемая sched_user или аналогичная. Это позволило (насколько мне известно) всем пользователям справедливо делиться системными ресурсами. В 2.6.35 он недоступен. Есть ли способ настроить мою систему для автоматического распределения ресурсов io / cpu / memory между всеми пользователями (включая root?). Я никогда не настраивал cgroup прежде, есть хороший учебник для этого? Большое спасибо.


Ну, я взял добычу в пакете cgroups-bin в Ubuntu, и я уверен, что он «делает это» по умолчанию, если я просто установлю его. Я предполагал, что это потребует настройки, однако я полагаю, что это просто делает, если у вас есть особые потребности. Я протестировал, запустив стресс с 2 потоками процессора под root и 2 под моим пользователем, и все 4 потока, похоже, делят 50% в топе, что заставляет меня думать, что это работает. Это может «решить» это для меня, однако, если что-то мне бы хотелось, чтобы у меня был более понятный способ подтверждения, или лучшая идея, как его настроить, еще раз спасибо!
NightwishFan

Ответы:


12

Ядро документация обеспечивает общий охват контрольных групп с примерами.

cgroups-binПакет (который зависит от libcgroup1) уже предусмотрено распределение должно быть в порядке.

Конфигурация выполняется путем редактирования следующих двух файлов:

/etc/cgconfig.conf

Используется libcgroup для определения контрольных групп, их параметров и точек монтирования.

/etc/cgrules.conf

Используется libcgroup для определения контрольных групп, к которым принадлежит процесс.

Эти файлы конфигурации уже содержат примеры, поэтому попробуйте настроить их в соответствии с вашими требованиями. Страницы руководства достаточно хорошо описывают их конфигурацию.

После этого запустите менеджер рабочих нагрузок и демон правил:

service cgconfig restart
service cgred restart

Менеджер рабочей нагрузки (cgconfig) отвечает за распределение ресурсов.
Добавление нового процесса в менеджер:

cgexec [-g <controllers>:<path>] command [args]

Добавление уже запущенного процесса в менеджер:

cgclassify [-g <controllers>:<path>] <pidlist>

Или автоматически поверх файла cgrules.conf и демона правил CGroup (cgred), который принудительно запускает каждый вновь созданный процесс в указанную группу.


Пример /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

Пример /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Это разделит ресурсы процессора примерно на 50-50 между пользователем 'alice' и 'bob'


Изучая cgroups, добавила это в закладки. Спасибо.
Джигар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.