управление приоритетом приложений с использованием cgroups

8

Я хотел бы лучше понять cgroups и хотел бы понять варианты использования cgroups.

Являются ли cgroups хорошим способом расстановки приоритетов для различных приложений (т. Е. Придания более высокого приоритета конкретным типам приложений, например веб-серверам)?

Johnnie
источник
Регулирование
Кен Шарп

Ответы:

8

Есть несколько вариантов использования групп . Из системного администрирования, вероятно, наиболее важным является ограничение ресурсов - классическим примером здесь является доступ к процессору. Если вы создаете группу, например, sshdи даете ей незначительную долю времени процессора (по сравнению с другими группами или по умолчанию, в которую попадают все несортированные процессы), вы гарантированно сможете войти в систему даже в те моменты, когда машина будет работать задачи с интенсивным использованием процессора.

Что еще интереснее, если вы дадите этим процессам «удаленного доступа» гораздо большую долю ресурсов ЦП, чем остальным, вы сможете войти в систему почти мгновенно (поскольку демон ssh будет иметь приоритет над остальными запущенными процессами), в то время как вы не пострадаете общая вычислительная мощность машины, поскольку ресурсы распределяются только на основе потребностей. Обычно вы хотите сделать это вместе с приоритетами ввода / вывода (включая сеть). Однако, как правильно указывает Джон в комментарии ниже, никто не хочет делать эти вещи небрежно (так как это может произойти неожиданным образом). Важно помнить, что группы наследуются по умолчанию - то есть никто не хочет запускать нагрузку на память / процессор из такого сеанса ssh. Однако для этого существуют механизмы, которые могут назначать процессы группам при их запуске.

Другое использование - это изоляция процессов друг от друга - в сочетании с другими функциями (изоляция пространства имен) в последних ядрах Linux, которые они используют для создания виртуализации на уровне ОС, такой как LXC (контейнеры Linux) .

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

Две ссылки здесь, должны быть разумной отправной точкой, если вы ищете дополнительную информацию. Вы также можете проверить Documentation/cgroupsкаталог в дереве исходного кода ядра Linux.

peterph
источник
благодарю вас. Пример sshd интересен и поднимает еще одну мысль. один из аспектов, который я не учел, - это обеспечение надлежащего распределения других ресурсов - я предполагаю, что кто-то с неполным знанием профиля приложения может нанести ущерб, только выделяя ресурсы для ЦП (в этом примере) и не выделяя для I / O (скажем, сеть). Если да, то есть ли где-нибудь опубликованные профили для групп?
Джонни
@ Джон действительно интересный вопрос. Возможно, вы захотите проверить дистрибутивы, которые имеют systemd(а), которые используют cgroups для своих собственных целей - системные файлы модулей для сервисов могут дать некоторые подсказки о том, что может быть разумным. Но в конце концов, системный администратор всегда должен усвоить сложный путь, который на самом деле не является «Хорошей идеей (TM)».
Петер
1
@kokbira зависит от того, на каком уровне вы обычно пишете в cgroupпсевдофайловую систему, которую вам, возможно, потребуется сначала смонтировать. В большинстве случаев сегодня система init делает это за вас и часто уже использует cgroups. Единственный окончательный ответ - прочитайте документацию: документы ядра , OpenRC @ Gentoo , systemd @ freedesktop .
Петер
1
@kokbira операционная система делает то, что вы говорите (по крайней мере, хороший - есть некоторые, которые делают много других вещей, которые вы им не говорите, но это другая история). Идея состоит в том, что если вы запускаете приложение, вы хотите, чтобы оно получало все необходимое для выполнения того, что вы ожидаете. Если приложение плохо себя ведет, то системный оператор (в данном случае это вы) должен что-то с этим сделать. Авторы дистрибутива могли бы придумать некоторые эвристики, как отследить такого рода проблемы, но это вызовет больше проблем, которые будут исправлены.
Петер
1
@kokbira, что касается самого Firefox, я бы предложил использовать некоторые дополнения, которые уменьшают нагрузку на браузер и, следовательно, на всю систему. Из моего опыта достаточно NoScript и UBlock. Особенно NoScript в «блокировать все по умолчанию» творит чудеса - просто включите необходимый минимум, необходимый для работы с веб-сайтами, которые вы используете, и вы можете легко получить доступ к сотням вкладок в системе 8 ГБ ОЗУ и при этом работать довольно хорошо. Кроме того, у вас есть дополнительный уровень защиты от всего мусора, который большинство веб-сайтов используют в наши дни для ненужных необычных эффектов.
Петер