User beancounters (UBC)


Основаная информация /proc/user_beancounters
 

Определение

UBC, или User Beancounters - ряд органичений и гарантий, для Виртуального окружения. UBC - главный компонент управления ресурса OpenVZ.

UBC параметры

Все существующие параметры перечислены в таблице параметров UBC.

По значимости, параметры разделены на 3 группы: первичные параметры, вторичные параметры и вспомогательные параметры. Более детальное описание параметров и механизмов контроля ресурсов, которыми управляют параметры дается в соответствующих статьях.

Общая информация обо всех параметрах

Все параметры контроля ресурсов имеют некоторые общие свойства и некоторые различия.

1. Большинство параметров обеспечивает рассчет ресурсов системы, и позволяет управлять их потреблением. Исключения: - physpages (только считающий параметр) и vmguarpages (только управляющий), объясненны ниже.

2. Каждый параметр имеет 2 переменные, названные barrier'ом и limit'ом. Хотя обе переменные можно менять, только одна (кроме исключений) может эффективно использоваться для контроля ресурсов для некоторых параметров. Например, physpages - параметр только для учета, и обе его переменные не используются в текущей версии OpenVZ. Описание каждого параметра объясняет значение barrier'а и limit'а, и как они должны быть установлены, даже если не используются. Однако, для всех параметров значение barrier не должен быть больше, чем значение limit.

3. Параметры управляют распределением ресурсов между Виртуальными окружениямии в терминах:

limits - пределы, то есть верхние границы того, что это Виртуальное окружение может потреблять, и

guarantees - гарантии, то есть механизмы, гарантирующие, что это Виртуальное окружение может получить назначенные ресурсы независимо от деятельности и количества ресурсов, требуемых другими Виртуальными окружениями

Параметры, содержащие "guar" в названии, то есть vmguarpages   и   oomguarpages  - это гарантии Виртуального окружения. Они гарантируют количество ресурсов и определенный уровень обслуживания до значения, определенного barrier'ом, и не гарантируют выше значения  barrier'а. Однако, эти параметры не налагают ограничения использования. Гарантии обсуждаются более подробно в параграфах, описывающих эти параметры. Значение   limit для параметров vmguarpages и oomguarpages должно устанавливаться в максимальное значение (то есть. MAX_ULONG).

4. Для некоторый ресурсов, ограничивающих параметры (напрмер kmemsize), эффективно используются настройки как barrier'а так и limit'а . Если использование ресурса превышает barrier, но не превышает limit, операции (типа расширения стека процесса) все еще могут резервировать новые ресурсы, а другие уже не могут. Промежуток между barrier'ом и limit'ом дает приложениям возможности более гибко обращаться с ресурсами. Для других параметров, типа numproc, ограничивающие значение barrier'а и limit'а должны иметь одинаковые значения.

5. Каждый параметр имеет "естественные единицы измерения" - единицы измерения значений, показанных через интерфейс /proc/user_beancounters и принятый vzctl. Значения параметров с названиями, начинающимися с "num" измерены в пунктах (и являются целыми числами). Значения параметров с названиями, заканчивающимися "pages" измерены в страницах памяти (страница памяти равна 4 килобайтам на аппаратных средствах IA-32). Остальные значения параметров, заканчивающиеся на "buf" измерены в байтах. (См. "Единицы параметра UBC").

Свойства параметров описаны в "Cвойствах параметра UBC".

Единицы параметров UBC.

1. Параметры, которые имеют в названии слово "page", измерены в страницах памяти (4 КБ на x86 и x86_64, 16 КБ для IA64). Это - privvmpages, oomguarpages и другие.

2. Параметры с названиями, содержащими "num" измерены в пунктах. То есть numproc - число процессов, numiptent - число iptables записей.

3. Другие параметры, как kmemsize, tcprcvbuf, tcpsndbuf  измерены в байтах.

Первичные параметры UBC.

Самые важные параметры, определяющие ресурсы, доступные для Виртуального окружения объясняются ниже. Значение параметров показано исходя из того,что Виртуальное окружение управляет нескольними сетевыми приложениями сервера.

numproc

Максимальное число процессов и потоков ядерного уровня доступных для этого Виртуального окружения.

Многие серверные приложения (как Web-сервер (apache), ftp и почтовые серверы) порождают процесс, чтобы управлять каждым клиентом, таким образом ограничение на число процессов определяет, с каким количеством клиентов приложение будет в состоянии работать параллельно. Однако, число процессов не ограничивает как "большое" приложение так и возможности сервера обслужить сложные запросы клиентов.

Формируя систему управления ресурса, важно оценить и максимальное число процессов, и среднее число процессов ( avnumproc ). Другие (зависимые) параметры контроля ресурсов могут зависеть и от limit'а и от среднего числа (avnumproc) (см. "проверка последовательности UBC").

Значение barrier  параметра numproc  не обеспечивает дополнительный контроль и должно быть установлено равный limit'у.

Есть ограничение на общее количество процессов в системе. Больше чем ~16000 процессов начинают вызывать замедление реакции системы, ухудшаясь с ростом числа процессов. Общее количество процессов, превышающих 32000, вероятнее всего, вызовет зависание из системы.

Отметьте, что практически число процессов обычно меньше. Каждый процесс потребляет некоторое количество памяти, и доступную память и "low memory", ограничьте число процессов, чтобы понизить потребление памяти. С типичными процессами, до 8000 процессов в системе – это нормальное состояние.

numtcpsock

Максимальное число сокетов TCP.

Этот параметр ограничивает число TCP соединений и, как следствие, число клиентов, с которыми серверное приложение может работать параллельно. Значение barrier  этого параметра должно быть установлено равным  limit'у. Если каждое Виртуальное окружение имеет собственные настройки IP адресов (что является единственным способом, которым система OpenVZ может быть сконфигурирована), нет никаких прямых ограничений на общее количество сокетов TCP в системе. Числом сокетов нужно управлять, потому что каждый сокет нуждается в определенном количестве памяти для получения и передачи буферов (см. описания tcpsndbuf   и  tcprcvbuf , и ресурс памяти ограниченн.

numothersock

Максимальное число не-TCP сокетов (локальные сокеты, UDP и другие типы сокетов).

Локальные (UNIX) сокеты используются для взаимодействия в системе. "Многопоточные" приложения (например, Web-приложение с сервером базы данных ), возможно, нуждаются в одном или нескольких локальных сокетах, чтобы обслужить каждого клиента. Приложения (например, большинство почтовых серверов, за исключением postfix'a) не используют локальные сокеты.

Сокеты UDP используются для DNS запросов, но число таких сокетов, открытых одновременно невелико. UDP и другие сокеты могут также использоваться в некоторых очень специфических приложениях (агенты SNMP и другие).

Значение barrier   этого параметра должен быть установлен равный limit'у. Число локальных сокетов в системе не ограничено. Число сокетов UDP в системе также не ограничено в системах OpenVZ.

Подобно параметру numtcpsock, число не-TCP сокетов нужно контролировать, потому что каждый сокет нуждается в определенном количестве памяти для его буферов, а ресурс памяти ограниченн.

vmguarpages

Гарантия распределения памяти.

Этот параметр управляет количеством памяти, доступной для Виртуального окружения (то есть количетсво памяти которое его приложения могут резервироваться malloc (3) или другими стандартными механизмами распределения памяти Linux). Чем большее количество клиентов обслуживается или чем более "тяжелое" приложение, тем больше памяти требуется.

Количество памяти, которая гарантированно будет выделенна приложению Виртуального окружения, определено как значение barrier  параметра vmguarpages. Текущее количество выделенного размера памяти считается в параметре privvmpages, а параметр vmguarpages не имеет собственного учета (параметры held и maxheld = 0 ). Значения barrier и limit  параметра privvmpages налагают верхний предел на распределения памяти (см. privvmpages). Значение limit'а для параметра vmguarpages неуказанно в текущей версии и должно быть установленно в максимально позволенное значение (MAX_ULONG).

Если текущее количество выделенного объема памяти не превышает гарантируемое количество (значение barrier параметра параметра vmguarpages), резервирование памяти приложениям Виртуального окружения всегда успешно. Если текущее количество выделенного объема памяти превышает гарантию, но ниже значения barrier параметра privvmpages, распределения могут быть или не быть успешными, в зависимости от общей суммы доступной памяти в системе.

Начиная со значения barrier   параметра privvmpages, распределение приоритетов проходит нормальнои, а начиная со значения limit параметра privvmpages, все попытки распределения памяти, сделанные приложениями терпят неудачу. Гарантия резервирования памяти (vmguarpages) - первичный инструмент для управления памятью, доступной для Виртуального окружения, потому что это позволяет администраторам обеспечивать "Соглашения Уровня Обслуживания" - соглашения, гарантирующие определенное качество обслуживания, определенное количество ресурсов и общей уровень обслуживания. Единица измерения значений vmguarpages - страницы памяти (4 КБ на x86 процессорах).

Вторичные параметры UBC.

Вторичные параметры UBC непосредственно связаны с первичными и не могут конфирурироваться произвольно.

kmemsize

Размер несвапируемой памяти, зарезервированной ядром операционной системы.

Это включает все ядерные внутренние структуры данных, связанные с процессами Виртуального окружения, кроме буферов сети, обсуждаемых ниже. Эти структуры данных находятся в первом гигабайте RAM компьютера, так называемой "low memory".

Этот параметр связан с числом процессов (numproc). Каждый процесс потребляет определенное количество ядерной памяти - 24 килобайта минимально, 30-60 КБ типично. Очень большие процессы могут потреблять намного больше.

Важно иметь определенный безопасный промежуток между значениями barrier  и limit  параметра kmemsize (например, 10% значения, как в примерах конфигурации UBC). Равные barrier  и  limit  параметра kmemsize могут привести к ситуации, где ядро будет вынуждено убить приложения Виртуального окружения, чтобы удерживать значение kmemsize ниже  limit'а.

Значение limit   параметра kmemsize не может быть установлено произвольно высоко. Общая сумма значений параметров kmemsize потребляемых всеми Виртуальными окружениями в системе плюс размер буфера сокета (см. ниже) ограничена ресурсами аппаратных средств системы. Это общее органичение обсуждается в "low memory".

tcpsndbuf

Полный размер буферов, используемых чтобы посылать данные через TCP-соединения сети. Эти буферы сокета находятся в "low memory".

Параметр tcpsndbuf зависит от числа TCP сокетов (numtcpsock) и должен учитывать некоторое минимальное количество памяти буфера сокета для каждого сокета, как обсуждается в  "проверке согласованности параметров UBC":


Если это ограничение не удовлетворено, некоторые сетевые соединения могут остановиться из-за невозможности передать данные.

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

Значение limit  параметра tcpsndbuf  не может быть установлено произвольно высоко. Общая сумма значений параметра   tcpsndbuf,   потребляемых всеми Виртуальными окружениями в системе плюс kmemsize и другие буферы сокетов ограничена аппаратными ресурсами системы. Это общее ограничение обсуждается в "low memory".

tcprcvbuf

Общий размер буферов, используемых для временного хранения данныч, прибывающие от сетевых соединений TCP. Эти буферы сокетов также находятся в "low memory".

Параметр tcprcvbuf зависит от числа сокетов TCP (numtcpsock) и должен учитывать некоторое минимальное количество памяти буфера для каждого сокета, как обсуждается в "проверке последовательности UBC":


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

Подобно tcpsndbuf, установка высоких значений для параметра tcprcvbuf может, но не обязательно, увеличить производительность взаимодействия сети. Достижение значения limit параметра tcprcvbuf и неудачное резервирование буфера сокета не имеет сильного отрицательного эффекта на приложения, а только уменьшает произодительность взаимодействия сети. Однако, пребывание выше значения barrier параметра tcprcvbuf в течение долгого времени менее безопасно, чем для tcpsndbuf. Длительные периоды превышения значенияbarrier'а могут вызвать завершение некоторых соединений.

Значениt limit параметра tcprcvbuf не могут быть установлены произвольно высоко. Общая сумма значений параметра tcprcvbuf, потребляемых всеми Виртуальными окружениями в системе плюс kmemsize и другие буферы сокетов ограничена ресурсами аппаратных средств системы. Это общее ограничение обсуждается в "low memory".

othersockbuf

Общий размер буферов, используемых локальными (UNIX) соединениями между процессами внутри системы (например, соединения с локальным сервером базы данных), send UDP-буферами и другими датаграмными протоколами.

Параметр othersockbuf зависит от числа не-TCP сокетов (numothersock).

Конфигурация othersockbuf должна удовлетворять правилу:


Увеличенние limit  для othersockbuf  необходимо для увеличения эффективности коммуникаций через локальные ( UNIX) сокеты. Однако, подобно tcpsndbuf, превышение othersockbuf  затрагивает только производительность коммуникации, и не затрагивает функциональность.

Значение limit   параметра othersockbuf   не может быть установлен произвольно высоко. Общая сумма значений параметра othersockbuf, отреблеяемых всеми Виртуальными окружениями в системе плюс kmemsize  и другие буферы сокетов ограничена аппаратными ресурсами системы. Это общее ограничение обсуждается в "low memory".

dgramrcvbuf

Общий размер буферов, используемых временного хранения входящих UDP- пакетов и других датаграмных протоколов.

Параметр dgramrcvbuf  зависит от числа не-TCP сокетов (numothersock).

Значение limit   параметра dgramrcvbuf   обычно не должны быть высокими. Только если Виртуальное окружение должно посылать и получать очень большие датаграммы, значение  barrier  и для othersockbuf  и для dgramrcvbuf  параметров должны быть подняты.

Превышение параметра dgramrcvbuf  означает, что некоторые датаграммы будут отброшены, что может иметь значение для функциональных возможностей приложений (а может и не иметь никакого значения). UDP-протокол - протокол, не гарантирующий доставку, так что даже если буферы разрешают, датаграммы также могут быть также отброшены на любой стадии обработки, и приложения должны быть готовы к этому.

В отличие от других параметров буфера сокетов, для dgramrcvbuf barrier   должен быть равен limit.

Значение limit параметра dgramrcvbuf не может быть установлен произвольно высоко. Общая сумма значений параметра dgramrcvbuf, потребляемых всеми Виртуальными окружениями в системе плюс kmemsize и другие буферы сокетов ограничена аппаратными ресурсами системы. Это общее ограничение обсуждается в "low memory".

oomguarpages

Гарантируемое количество памяти для случая перераспределения памяти (гарантия на случай нехватки памяти (out-of-memory)).

Параметр oomguarpages связан с параметром vmguarpages. Если приложения начинают потреблять больше памяти, чем имеется в системе, система оказывается в условиях нехватки памяти. В этом случае операционная система начнет убивать процессы Виртуального окружения, чтобы освободить какое-то количество памяти и предотвратить полный крах системы. Хотя это случается очень редко, уничтожение процессов в ситуациях нехватки памяти - это нормальная реакция системы, и это встроено в каждое ядро Linux [1].

Параметр oomguarpages считает общую сумму памяти и размера swap`а используемый процессами специфического Виртуального окружения. Значение barrier параметра oomguarpages - это гарантия от нехватки памяти.

Если текущее использование памяти и размер swap`а (значение oomguarpages) плюс количество используемой ядерной памяти (kmemsize) и буферов сокетов - ниже barrier'а, то процессы в этого Виртуального окружения гарантированно не будут убиты в ситуациях нехватки памяти. Если система будет в ситуации нехватки памяти, и есть несколько Виртуальных окружений с oomguarpages избытком, то приложения в Виртуальном окружении с самым большим избытком будут убиты первыми. Счетчик failcnt oomguarpages параметра увеличивается, когда процесс в этом Виртуальном окружении убит из-за нехватки памяти.

Если администратору нужно убедиться, что какое-то приложение не будет вынужденно убито независимо от поведения, то установка значения limit параметра privvmpages, не больше, чем гарантия (barrier) oomguarpages значительно уменьшает вероятность вынужденного завершения приложения, и устанка этого значения в половину гарантии (barrier) oomguarpages полностью предотвращает это. Такие конфигурации не популярны, потому что они значительно уменьшают использование аппаратных средств.

Значение limit   для параметра oomguarpages не указывается в текущей версии.

Общие гарантии от нехватки памяти, данные Виртуальными окружениями не должны превысить физическую вместимость компьютера, как обсуждается в разделе "Память и swap". Если для гарантии больше чем, имеет система, в ситуации нехватки памяти приложения в Виртуальном окружении с гарантируемым уровнем обслуживания и демоны системы могут быть убиты.

privvmpages

Ограничение распределения памяти.

Параметр privvmpages позволяет управлять количеством памяти, зарезервированной приложениями.

Значения barrier  и  limit  параметра privvmpages   управляют верхней границей общего размера зарезервированной памяти. Отметьте, что эта верхняя граница не гарантирует, что Виртуальное окружение будет в состоянии выделить столько памяти, и при этом это не гарантирует, что другие Виртуальные окружения будут в состоянии выделить их законную долю памяти. Первичный механизм контроля распределением памяти - это гарантия vmguarpages.

privvmpages - это параметр учетывает выделенную память (но, возможно, не используемой) памяти. Посчитанное значение - это оценка, сколько памяти будет действительно потрачено, когда приложения Виртуального окружения начинают использовать выделенную память. Расходованную память считается в параметре oomguarpages.

Так как память, считавшая в privvmpages не может фактически использоваться, сумма текущих значение параметра privvmpages для всех Виртуальных окружений может превысить RAM и размер swap`а компьютера.

Между значениями barrier   и limit  параметра privvmpages  должен быть промежуток безопасности, чтобы уменьшить количество неудачного распределения памяти, с которым приложение неспособно справиться. Этот промежуток будет использоваться для "первоочередных" распределений памяти, типа расширения стека процесса. Распределения с нормальным приоритетом будут терпеть неудачу, когда значение barrier  параметра privvmpages   будет достигнуто.

Общее количество privvmpages   должно соответствовать физическим ресурсам компьютера. Кроме того, важно не позволить любому Виртуальному окружению зарезервировать существенную часть всей RAM системы, чтобы избежать серьезной деградации уровня обслуживания для другого Виртуального окружения. Оба этих требования конфигурации обсуждаются в разделе "Выделенная память".

Есть также статья, описывающая как использовать учет пользовательских страниц.

Единицы :

Значения параметров oomguarpages и privvmpages измерены в страницах памяти. Для других вторичных параметров, значения указаны в байтах.

Ограничения системы :

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

Примечания:

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

UBC вспомогательные параметры

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

Основные функции вспомогательных параметров :

Эти параметры улучшают обработку ошибок приложений и ограничивают потребления ресурса. Без вспомогательных параметров, возможные ошибки в приложениях ( типа неудачной разблокировки заблокированных файлов или неполучения сигналов) вызовут замедление и, после некоторого времени, прерывание работы приложений из-за израсходования памяти. В присутствии этих параметров, приложения заметят проблему (потому что, например, попытки создавать новые заблокированные файла начинают терпеть неудачу), и покажут соответствующее сообщение, помогающее отлаживать проблему. Другой пример: Каждый объект: открытый файл или установленные сетевые соединения потребляет определенные ресурсы. Когда Виртуальное окружение близко к истощению выделеннох ему ресурсов, обычно лучше отказаться от создания нового объекта, чем позволить его создать и отказать в распределении памяти или завершить (в случае полного истощения ресурсов) уже запущенное приложение.

Эти параметры улучшают изоляцию ошибок между приложениями в одном Виртуальном окружении. Ошибка одного приложения в Виртуальном окружении, более вероятно, вызовут превышение limit'а какого-то вспомогательного параметра и нормальное завершение этого неправильно ведущего себя приложения, чем некорректное завершение другого запущенного приложения в том же самом Виртуальном окружении.

Эти параметры могут использоваться, чтобы наложить некоторые административные ограничения на Виртуальное окружение (например, не позволить пользователю запустить сервер базы данных, ограничивая количество shmpages, или ограничивая число одновременных shell-сессий через numpty).

Так, вспомогательные параметры играют роль, подобную ограничениям, наложенным setrlimit (2) интерфейс или ограничениям, конфигурируемыем sysctl (8) в стандартных установках Linux.

Из-за этой роли помощника в контроле ресурса, система управления может показать вспомогательные параметры только в расширенном режиме для опытных администраторов и скрыть их в "основных" способах управления.

lockedpages

Страницы, которые не могут быть перещены из swap`a (страницы, заблокированные mlock (2)).

Размер этих страниц также учитывается в kmemsize. Значение barrier  может быть установлено равным значению limit   или с некоторым промежуток, в зависимости от приложений, использующего особенности блокировки памяти.

Отметьте, что типичные приложения сервера как web-приложения, FTP, почтовые серверы не используют свойство блокировки памяти.

Конфигурация этого параметра не затрагивает безопасность и стабильность целой системы или изоляцию между Виртуальными окружаниями. Его конфигурация затрагивает функциональные возможности и реакцию на нехватку ресурса приложений только в конкретном Виртуальном окружении.

shmpages

Полный размер совместно используемой памяти (IPC и объекты tmpfs).

Эти страницы также считаются в privvmpages.

Значение barrier должно быть установлено равным limit'у. Конфигурация этого параметра не затрагивает безопасность и стабильность целой системы или изоляции между Виртуальными окружениями. Его конфигурация затрагивает функциональные возможности и реакцию приложений на нехватку ресурсов только в данном Виртуальном окружении.

physpages

Общее количество страниц RAM, используемых процессами в этой Виртуальном окружении.

Для страниц памяти, используемых несколькими различными Виртуальными окружениями (отображение, планирование (mapping) разделяемых библиотек, например), только часть страницы приписывают к каждому Виртуальному окружению. Сумма physpages использования для всех Виртуальных окружений соответствует общему количеству страниц, используемых в системе всеми Виртуальными окружениями.

physpages -  это параметр только для учета в настоящее время. В будущих выпусках OpenVZ, этот параметр позволит обеспечивать гарантируемое количество прикладной памяти, находяейся в RAM и несвапируемой. Для совместимости с будущими версиями, barrier   этого параметра должен быть установлен в 0, а limit   - в максимально дозволенное значение (MAX_ULONG).

numfile

Число открытых файлов.

Значение barrier  должно быть установлено равным limit'у. Конфигурация этого параметра не затрагивает безопасность и стабильность целой системы или изоляции между Виртуальными окружениями. Его конфигурация затрагивает только функциональные возможности и реакцию приложений на нехватку ресурсов в данном Виртуальном окружении.

numflock

Число файлов-"замков" (file locks) (Вкратце: перед тем, как открыть файл, доступный для записи, создается соответствующий уникальный lock-файл, который удаляется после закрытия "основного" файла. Таким образом, другая копия процесса, перед открытием данного файла, проверяет наличие соответствующего ему блокировочного "флага" и, если он присутствует, процесс ожидает, когда этот "флаг" будет удален, после чего сам создает такой файл-флаг, блокируя доступ к рабочему файлу для других запущенных копий скрипта.).

Конфигурация этого параметра должна иметь промежуток между значениями barrier  и limit , как показано в примерах конфигурации UBC.

Очень высокое значение limit  для параметра numflock  и большое число файлов- замков в системе могут вызвать определенное замедление целой системы (но не фатальные). Так, limit'у  на этом параметре должны быть разумно установлены, в зависимости от реальных требований приложений.

numpty

Число псевдотерминалов.

Этот параметр обычно используется, чтобы ограничить число одновременных shell-сессий. Значение barrier  должно быть установлено равным limit'у. Конфигурация этого параметра не затрагивает безопасность и стабильность целой системы или изоляции между Виртуальными окружениями . Его конфигурация затрагивает только функциональные возможности и реакцию приложений на нехватку ресурсов в данном Виртуальном окружении. Однако, в системах OpenVZ, фактическое число псевдотерминалов для одного Виртуального окружения ограничен 256.

numsiginfo

Число siginfo структур.

Размер структуры также считается в kmemsize. Установка по умолчанию автономных систем Linux ограничивают это числом 1024 для целой системы. В установке OpenVZ, значение limit  параметра numsiginfo   применяется к каждому Виртуальному окружению индивидуально.

Значение barrier   должно быть установлено равным limit'у. Очень высокие значения limit'а  этого параметра могут замедлить реакцию системы. Маловероятно, что любое Виртуальное окружение будет нуждаться в limit'е,  больше чем предустановленное в Linux - 1024.

dcachesize

Полный размер dentry (каталоговые записи) и inode (индексные дескрипторы) структур, блокированные в памяти.

Параметр dcachesize управляет связанным с файловой системой кэшем, типа dentry (каталоговые записи) и inode кэш. Значение, считающееся в dcachesize также включено в kmemsize.

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

Конфигурация этого параметра должна иметь промежуток между значениями barrier  и  limit,  как показано в примерах конфигурации UBC. Конфигурация этого параметра не затрагивает безопасность и стабильность целой системы или изоляции между Виртуальными окружениями. Его конфигурация затрагивает только функциональные возможности приложений и реакцию приложений на нехватку ресурсов в данном Виртуальном окружении.

numiptent

Число записей NETFILTER (IP фильтрование пакета).

Значение barrier  должно быть установлено равным limit'у. Есть ограничение на общее количество numiptent. Это зависит от количества других распределений в так называемой "vmalloc" области памяти и составляет приблизительно 250000 записей. Нарушение этого ограничения может вызвать неудачное завершение операций с таблицами пакетного фильтра ( iptables (8)) в любом Виртуальном окружении или основной системе, или отказ запуска Виртуального окружения. Кроме того, большие значения параметра numiptent   вызывают значительное замедление обработки пакетов сети. Не рекомендуют позволять Виртуальным окружениям создавать больше чем 200-300 записей numiptent.

Учет пользовательских страниц.

Эта статья описывает устройство учета страниц пользовательского пространства .

Введение

Пользовательские страницы - второй по важности ресурс (после kmemsize), который должен учитываться. В отличие от ядерной памяти, которая либо используется, либо нет, набор пользовательских страниц может иметь различные классификации. Страницы могут быть заняты файлом, заблокированы, неиспользованны, то есть запрошены mmap/brk, но еще не получены и так далее. Таким образом учет пользовательских страниц является более сложным, чем тот же для ядерных страниц.

Способы учета.

Есть различные подходы к пользовательскому контролю страниц:

  • Считать все распределения на mmap/brk и отклонять, как только сумма VMA достигает barrier'а. - Этот подход очень плох, поскольку приложения всегда занимают больше, чем они действительно используют, очень часто НАМНОГО больше.

  • Считать только действительно используемую память и отклонять, как только RSS достигает limit'а - Этот подход не хорош так как единственное место, где страницы появляются в пользовательском месте - счетчик ошибки страницы, и единственный способ отклонять - убить задачу. В сравнении с предыдущим сценарием, это намного хуже, поскольку приложение даже не сможет корректно завершиться.

  • Считать часть памяти на mmap/brk и отклонять, и счет остальной части памяти в счетчике ошибок страницы отклонять. - Этот тип учета используется в UBC.

  • Считать физическую память и поступать как автономное ядро - исправлять пользовательскую память по исчерпанию. - Этот тип контроля памяти должен быть введен позже как дополнение к текущей схеме. UBC обеспечивает всю необходимую статистику для этого (физическая память, страницы swap`a и т.д.)

UBC пользовательские страницы

Следующие термины используются UBC:

shmem mapping - карта файла, принадлежащего tmpfs. UBC считает эти страницы отдельно, и описание ниже не принимает во внимание такие страницы;

private mapping - этот термин включает следующие типы карт:

writable anonymous mappings - перезаписываемые анонимные карты

writable private file mappings - перезаписываемые частные карты файла .
Оба типа не поддержаны дисковым файлом и таким образом не могут быть только освобождены. Эти картографии заряжают в возможном, отклоняют право, когда они сделаны - в sys_mmap ()/sys_brk ().

unused pages - это число страниц, которые принадлежат частной карте, но еще не затронуты.


Проверка согласованности параметров UBC

Параметры контроля ресурсов системы имеют определенные взаимозависимости. Ограничения на настройки параметров упомянуты ниже. Индексы bar  и  lim  в нижнем регистре формул обозначают соответственно значения barrier   и  limit  параметров .

Конфигурация параметров контроля ресурса для Виртуального окружения недействительна, если эти ограничения не удовлетворены. Лучший способ гарантировать согласованность конфигурации состоит в том, чтобы использовать программу vzcfgvalidate (8) пакета OpenVZ.

Все взаимозависимости, обсуждаемые ниже и их важность указаны в таблице взаимозависимостей UBC.


Ограничения конфигурации можно проверить :
    на интерфейсе /proc/user_beancounters;
    в файлах конфигурации Виртуального окружения в директории /etc/vz/conf/ .

Параметр kmemsize должен быть установлен достаточным для ожидаемого числа процессов


(avnumproc здесь поддерживает ожидаемое среднее число процессов).

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


limits распределения памяти не должны быть меньше, чем guarantee
Если это ограничение не будет удовлетворено, то параметр vmguarpages не будет работать.
Отправляющие буферы, должны иметь достаточно места для всех сокетов

Эти ограничения также важны. Если они не удовлетворены, передача данных по сокетым может приостанавливаться при некоторых обстоятельствах.

Другие TCP буферы сокетов должны быть достаточно большими




Равенство левой и правой стороны в неравенствах гарантирует минимальную работу коммуникаций сети. Увеличение левой стороны до определенной степени увеличит производительность сети.


Буферы сокетов UDP должны быть достаточно большими, если система не ограничена в памяти



Эти ограничения желательны, но не обязательный. Достаточно большие буферы для UDP сокетов улучшают надежность датаграммной пересылки. Однако, если пересылка UDP пакетов является настолько нестабильным, что это нуждается в большем буфере, датаграммы будут вероятно потеряны не из-за limit'ов, а из-за других ограничений памяти и производительности.

Значение limit  параметра numfile  должно быть адекватным ожидаемого числа процессов


Отметьте, что каждый процесс после системного вызова execve (2) запрашивает файл для каждой загруженной разделяемой библиотеки. Слишком низкое значение limit  параметра numfile увеличит вероятность падения в течение вызова execve (2) с неясной диагностикой.

Ограничение общего размера dentry и inode структур, заблокированных в памяти должен быть адекватным разрешенному количеству файлов (numfile)


Слишком низкоe значение limit  параметра   dcachesize увеличит возможности на отказы операции файла, не ожидаемые приложениями.

Значение barrier  должно быть меньше или равно значению limit .


В дополнение к упомянутым выше условиям,


должен быть соблюдены для каждого параметра.

UBC конфигурация системы

Статья "Проверка согласованности параметров UBC" обсуждала ратификацию конфигурации контроля ресурсов для одного Виртуального окружения. Эта статья обсуждает конфигурации Виртуальных окружения в рамках целой системы .

Конфигурации, где ресурсы Виртуальные окружения, превышают возможности основной системы опасны с точки зрения стабильности. Они могут привести к некорректному завершению приложений, нестабильности и, иногда, зависанию системы. Принимая во внимание, что согласованность конфигурации, обсужденная в "проверке последовательности UBC" обтностится к прикладным функциональным возможностям, согласованность, которую рассматривают в этой секции нацелена на безопасность и стабильность системы в целом.

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

Ресурсы Использование (Utilization ) и Уровень обязательства (Commitment level)

Несколько ресурсов основной системы ( типа RAM) обсуждаются ниже в терминах Utilization - и Commitment level.

Использование (Utilization) показывает количество ресурсов, потребляемых всеми Виртуальными окружениями в данное время. Низкое значение использования означают, что система недостаточно использована. Это означает, что система способна к поддержке большего количества Виртуальных окружений, если существующие VEs продолжают поддерживать ту же нагрузку и уровень потребления ресурса. Высокие значения использования (вообще, больше чем 1) означают, система перегружена, и уровень обслуживания Виртуальных окружений ниже возможного.

Уровень обязательства (Commitment level) показывает, насколько ресурсы "выделяются" существующим Виртуальным окружениям. Низкий уровень обязательства означают, что система способна к поддержке большего количества Виртуальных окружений. Уровень обязательства, которые больше 1 - средний, показывает что Виртуальным окружениям выделяется больше ресурсов, чем система имеет, и в этом случае ресурся системы, как говорят, сверхпереданы. Если система управляет большим количеством Виртуальных окружений, обычно приемлемо иметь некоторое сверхобязательство, потому что маловероятно, что все Виртуальные окружения запросят ресурсы одновременно. Однако, более высокие уровни обязательства (как обсуждается ниже для каждого ресурса индивидуально) могут привести к тому , что Виртуальные окружениям может быть отказано ассигновать и использовать ресурсы, обещанные им.


"Low memory"

Из-за специфических особенностей архитектуры процессоров Intel, RAM компьютера не может использоваться однородно. Самая важная область памяти - так называемая "low memory", часть памяти, находящаяся в более нижних адресах и непосредственно доступная ядру. Для текущих ядер Linux, размер нижней области памяти - 832 МБ (или, если компьютер имеет меньше RAM, чем 832 МБ, то размер RAM).

Использование

Ниже связанная оценка низкого использования памяти


где

allsocketbuf = tcprcvbuf tcpsndbuf dgramrcvbuf othersockbuf.

Использование low memory ниже 1 нормально. Использование выше 1 небезопасно, и использование выше 2 опасно, очень вероятно, вызовет отклик системы с ошибками прикладных программ в течение многих секунд или больше и завершения некоторых приложений.

Уровень обязательства

Уровень обязательства может быть вычислен так :


Уровни обязательства ниже 1 нормальны. Уровни между 1 и 1.2 обычно приемлемы для систем приблизительно с 100 Виртуальных окружений. Системы с большим количеством Виртуальных окружений могли увеличить уровень обязательства до 1.5 - 2 для 400 VEs. Более высокие уровни обязательства для этого ресурса не рекомендуются, потому что последствия превышения низких мощностей памяти серьезны и затрагивают целую систему и все Виртуальные окружения.

Полная RAM

Этот подраздел обсуждает использование целой RAM. Использование swap`а и суммы используемой RAM и swap`а обсуждается ниже в разделе "Память и swap".

Текущая версия OpenVZ не может гарантировать использование определенного количества памяти (вместо суммы памяти и размер swap`а), таким образом уровень обязательства не применим к полной RAM. Такие гарантии будут осуществлены в будущих версиях.

Использование

Количество RAM, потребляемой всеми Виртуальными окружениями может быть вычислено как


Различие между использованием памяти, показанным free или /proc/meminfo   и общей суммой RAM, потребляемой Виртуальными окружениями состоит в том, что память также используется демонами системы и различными кэшами. Использование памяти может быть вычислено как


Уровни использования от 0.8 до 1 нормальны. Более низкое использование означает, что система недостаточно использована, и если другие ресурсы и уровень обязательств системы позволяет, система может содержать большее количество Виртуальных окружений. Однако в практике учета параметра physpages и других параметров, полное использование RAM не может быть больше чем 1.

Память и swap

Главный ресурс компьютера, определяющего количество памяти, которое приложения можугт использовать - сумма размеров SWAP`a и RAM. Если полный размер используемой памяти превышает размер RAM, ядро Linux перемещает некоторые данные в SWAP, и загружает их обратно, когда приложение нуждается в них. Часто используемые данные имеют тенденцию оставаться в RAM, редко используемые данные в основном находятся в SWAP`е.

Хранение данных в SWAP`е уменьшает работу системы до некоторой степени. Однако, если эта деятельность не чрезмерна, уменьшение работы не очень примечательно. С другой стороны, выгоды использования swap`а являются весьма большими, позволяя увеличивать количество Виртуальных окружений в системе приблизительно в 2 раза.

SWAP необходим для сдержания пиков нагрузки системы. Система с достаточным SWAP`ом только замедляется при высоких пиках нагрузки системы, тогда как система без SWAP`a реагирует на высокую нагрузку системы, отказом распределения памяти (что приводит к отказу обслуживания приложением клиентов) и завершению некоторых приложений. Также наличие swap`а помогает системе лучше сбалансировать память и передачу данных между "low memory" и остальной частью RAM.

Во всех поставках OpenVZ настоятельно рекомендуют иметь размера SWAP`a не меньше, чем размер RAM.

Кроме того, не рекомендуют создавать SWAP превышающий размер RAM больше чем 4 раза, из-за ухудщения работы, связанной с помещением данных в swap и извлечением их из swap`а. Таким образом, система должна формироваться так,


Оптимальная конфигурация - та, когда размер swapa в 2 раза больше, чем размер RAM.

Использование


Нормальное использование памяти плюс swap располагается между


и


Более низкое использование означает, что память системы недостаточно использована в момент проверки использования. Более высокое использование, вероятно, вызовет постепенное ухудшение работы связанной с помещением данных в swap и извлечением их из swap`а - признак перегрузки системы.

Уровень обязательства


Нормальный уровень обязательства - приблизительно 0.8-1.

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

Лучше гарантировать Виртуальные окружения меньше и иметь меньше уровней обязательства, чем случайно дать завышенные обязательства по распределению памятью и swap`a. Если система будет иметь запасную память и swap, то Виртуальные окружения прозрачно будут в состоянии использовать память и swap выше их гарантий. Гарантии, данные Виртуальным окружжениям не должны быть большими, и нормально, если использование памяти и swap`a для некоторого VEs остается выше их гарантии. Также нормально дать гарантии только Виртуальным окружениям с привилегированным обслуживанием. Но администраторы не должны гарантировать Виртуальным окружениям больше, чем система фактически имеет.

Выделенная память

Этот подраздел считает стандартное резервирование памяти приложениями в Виртуальном окружении. Распределениями для каждой Виртуального окружения управляют два параметра: vmguarpages и privvmpages, обсуждавшиеся ранее.

Резервированная память - это еще более виртуальный ресурс системы, чем RAM или RAM плюс swap. Приложения могут ассигновать память, но начать использовать ее позже, и количество свободной памяти системы уменьшится только в момент использования. Сумма выделенного размера памяти всех Виртуальных окружений оценивается исходя из того , сколько физической памяти будет использоваться, когда (и если) все приложения будут требовать выделенной памяти.

Использование


Этот уровень использования - отношение количества выделенной памяти вместимости системы.

Низкий уровень использования означает, что система может поддержать больше Виртуальных окружений, если другие ресурсы разрешают. Высокие уровни использования могут, но не обязательно означать, что система перегружена. Как это объяснялось ранее, не все приложения используют всю выделенную память, таким образом этот уровень использования может превысить 1.

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

Уровень обязательства

Уровень обязательства распределения гарантии


является соотношением количества памяти, гарантируемого быть доступным для распределений вместимости системы. Подобно уровню обязательств памяти + swap (как обсуждается в подразделе "Памяти и swap"), этот уровень должен быть сохранен ниже 1. Если уровень - выше 1, это значительно увеличивает вероятность, что приложения будут "убиты" вместо уведомления о нехватке памяти в случае, если система испытывает нехватку памяти.

Лучше обеспечить более низкие гарантии, чем гарантировать больше, чем система имеет, потому что Виртуальные окружения получить выделенной памяти выше их гарантии, если система не испытывает недостатка в памяти. Также нормально дать гарантии только Виртуальным окружениям с привилегированным обслуживанием.

Ограничение выделенной памяти

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

Если система имеет много Виртуальных окружений, важно удостовериться что для каждого Виртуального окружения


Если это условие не удовлетворено, одно Виртуальное окружение может легко стать причиной превышение извлечения данных из swap`a и ухудшение работы основной системы вцелом. Обычно, для каждого Виртуального окружения значение параметра privvmpages задается намного меньше, чем размер RAM.

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


Это число показывает, сколько памяти позволяют ассигновать приложениям по сравнению с производительностью системы.

Практически, многие приложения заявлений использует память не очень эффективно и, иногда, ассигнованная память никогда не будет использоваться позже. Например, Web-сервер Apache при запускео ассигнует приблизительно на 20-30 %% больше памяти, чем в последствии будет использовать. Некоторые мультипоточные приложения особенно неудачно использут свою память, и их доля резервированной памяти для использования может достигать 1000 %.

Чем больше уровень ограничений распределения памяти, тем больше вероятность, что приложения будут завершены вместо того, чтобы получить сообщение об ошибке при следующем распределении памяти в случае, если система испытывает нехватку памяти. Уровни в 1.5 - 4 можно счесть приемлемыми. Администраторы могут экспериментально найти оптимальное урегулирование для их нагрузки, основываясь на частоте сообщений "Нехватка памяти: завершение процесса" в логах системы, сохраненных klogd (8) и syslogd (8). Однако, для стабильности критических приложений, лучше держать уровень, не превышающий 1.

Первичные параметры:
numproc, numtcpsock, numothersock, vmguarpages
 
Вторичные параметры:
kmemsize, tcpsndbuf, tcprcvbuf, othersockbuf, dgramrcvbuf, oomguarpages, privvmpages
 
Вспомогательные параметры:
lockedpages, shmpages, physpages, numfile, numflock, numpty, numsiginfo, dcachesize, numiptent

 
Учет пользовательских страниц
 
Проверка согласованности параметров UBC
 
Конфигурация системы:
Low memory,RAM, memory и swap , allocate memory
 
Таблица значений и свойств параметров
 
Примеры конфигурации