Механизм элементов управления ресурсами настраивается посредством базы данных project . См. Глава 2Проекты и задачи (обзор). Элементы управления ресурсами и другие атрибуты задаются в последнем поле записи базы данных project. Значения, связанные с каждым элементом управления ресурсами, заключаются в круглые скобки и выводятся в виде простого текста, разделенного запятыми. Значения в круглых скобках представляют собой "выражения действия". Каждое выражение действия состоит из уровня полномочий, порогового значения и действия, связанного с определенным пороговым значением. Каждому элементу управления ресурсами может соответствовать несколько выражений действия, также разделенных запятыми. Ниже показано определение ограничения по легковесным процессам для каждой задачи, а также ограничение максимального потребления процессорного времени для каждого процесса в проекте. process.max-cpu-time передает процессу сигнал SIGTERM после работы процесса в течение 1 часа и сигнал SIGKILL, если процесс продолжает выполняться в течение 1 часа и 1 минуты. См. Таблица 6–3.
development:101:Developers:::task.max-lwps=(privileged,10,deny); process.max-cpu-time=(basic,3600,signal=TERM),(priv,3660,signal=KILL) typed as one line |
В системах с включенными зонами элементы управления ресурсами для всей зоны задаются в несколько другом формате. Для получения дополнительной информации см.Конфигурационные данные зоны.
Команда rctladm позволяет опрашивать и модифицировать настройки элементов управления ресурсами во время выполнения в глобальной области действия. Команда prctl позволяет опрашивать и модифицировать настройки элементов управления ресурсами во время выполнения влокальной области действия.
Для получения дополнительной информации см.Глобальные и локальные действия со значениями элементов управления ресурсами, rctladm(1M) и prctl(1).
В системах с установленными зонами использовать rctladm в неглобальной зоне для изменения параметров настройки невозможно. Для просмотра глобального состояния журналирования каждого элемента управления ресурсами можно воспользоваться командой rctladm в неглобальной зоне.
В следующей таблице приводится список стандартных элементов управления ресурсами, доступных в этой версии.
В таблице указывается ресурс, ограничиваемый каждым элементом управления. В таблице также представлены единицы, используемые по умолчанию для данного ресурса в базе данных project. Единицы по умолчанию могут быть двух типов:
Количества соответствуют ограниченным объемам.
Индексы соответствуют максимально допустимым идентификаторам.
Так, project.cpu-sharesуказывает количество долей, которые разрешено использовать для проекта. process.max-file-descriptor указывает наивысший номер файла, который может быть назначен процессу системным вызовом open(2).
Таблица 6–1 Стандартные элементы управления ресурсами
Имя элемента управления |
Описание |
Единица по умолчанию |
---|---|---|
project.cpu-cap |
Solaris 10 8/07:абсолютное ограничение по количеству ресурсов ЦП, потребляемых проектом. Значение 100 означает, что в качестве project.cpu-cap задано 100% одного ЦП. Значение 125 соответствует 125%, т.к. 100% – это один полностью загруженный ЦП в системе при использовании ограничений по ЦП. |
Количество (число ЦП) |
project.cpu-shares |
Число долей ЦП, выделенных данному проекту планировщиком долевого распределения (FSS) (см. FSS(7)). |
Количество (доли) |
project.max-crypto-memory |
Общий объем памяти ядра, который может использоваться libpkcs11 для аппаратного ускорения криптографических операций. На основании этого элемента управления ресурсами определяются ограничения буферов ядра и связанных с сеансом структур. |
Размер (байты) |
project.max-locked-memory |
Общее количество разрешенной физической блокированной памяти. Если пользователю назначается priv_proc_lock_memory, следует рассмотреть возможность установки также и этого элемента управления ресурсами для предотвращения блокирования пользователем всей памяти. Solaris 10 8/07: Следует отметить, что в Solaris 10 8/07 этот элемент управления ресурсами заменяет изъятый элемент project.max-device-locked-memory. |
Размер (байты) |
project.max-port-ids |
Максимальное допустимое количество портов событий. |
Количество (число портов событий) |
project.max-sem-ids |
Максимальное количество идентификаторов семафоров, разрешенное для этого проекта. |
Количество (идентифика- торы семафоров) |
project.max-shm-ids |
Максимальное количество идентификаторов совместно используемой памяти, разрешенное для этого проекта. |
Количество (идентифика- торы совместно используемой памяти) |
project.max-msg-ids |
Максимальное количество идентификаторов очереди сообщений, разрешенное для этого проекта. |
Количество (идентифика- торы очередей сообщений) |
project.max-shm-memory |
Общий объем совместно используемой памяти System V, разрешенный для этого проекта. |
Размер (байты) |
project.max-lwps |
Максимальное количество LWP, одновременно доступных этому проекту. |
Количество (LWP) |
project.max-tasks |
Максимальное количество задач, разрешенных для этого проекта. |
Количество (число задач) |
project.max-contracts |
Максимальное количество контрактов, разрешенных для этого проекта. |
Количество (контрактов) |
task.max-cpu-time |
Максимальное процессорное время, доступное процессам этой задачи. |
Время (секунды) |
task.max-lwps |
Максимальное количество LWP, одновременно доступных процессам этой задачи. |
Количество (LWP) |
process.max-cpu-time |
Максимальное процессорное время, доступное этому процессу. |
Время (секунды) |
process.max-file-descriptor |
Максимальный индекс дескриптора файла, доступный этому процессу. |
Индекс (максимальный дескриптор файла) |
process.max-file-size |
Максимальное смещение в файле, доступное данному проекту для записи. |
Размер (байты) |
process.max-core-size |
Максимальный размер файла дампа оперативной памяти, создаваемого этим процессом. |
Размер (байты) |
process.max-data-size |
Максимальный размер кучи, доступной этому процессу. |
Размер (байты) |
process.max-stack-size |
Максимальный сегмент памяти стека, доступный этому процессу. |
Размер (байты) |
process.max-address-space |
Максимальный размер адресного пространства, полученный суммированием размеров сегментов, доступных данному процессу. |
Размер (байты) |
process.max-port-events |
Максимально допустимое количество событий для каждого порта события. |
Количество (число событий) |
process.max-sem-nsems |
Максимальное количество идентификаторов семафоров, разрешенных для набора семафоров. |
Количество (семафоров в наборе) |
process.max-sem-ops |
Максимальное количество операций семафора, разрешенных для одного вызова semop (значение, скопированное из элемента управления ресурсами в момент времени semget()). |
Количество (число операций) |
process.max-msg-qbytes |
Максимальное количество байт сообщений в очереди сообщений (значение, скопированное из элемента управления ресурсами в момент времени msgget()). |
Размер (байты) |
process.max-msg-messages |
Максимальное количество сообщений в очереди сообщений (значение, скопированное из элемента управления ресурсами в момент времени msgget()). |
Количество (число сообщений) |
Таким образом можно отобразить значения по умолчанию для элементов управления ресурсами в системе, в которой элементы управления ресурсами не задавались и не изменялись. В подобной системе в /etc/system или в базе данных project отсутствуют записи, отличные от значений по умолчанию. Для вывода значений используется команда prctl.
Элементы управления ресурсами всей зоны позволяют ограничить суммарное потребление ресурсов всеми экземплярами процессов внутри зоны. Параметры управления ресурсами для всей зоны можно установить с помощью глобальных имен свойств, описанных в Установка элементов управления ресурсами всей зоны и Настройка зоны.
Таблица 6–2 Элементы управления ресурсами всей зоны
Имя элемента управления |
Описание |
Единица по умолчанию |
---|---|---|
zone.cpu-cap |
Solaris 10 5/08: Абсолютное ограничение по количеству ресурсов ЦП, потребляемых неглобальной зоной. Значение 100 означает, что в качестве project.cpu-cap задано 100% одного ЦП. Значение 125 соответствует 125%, т.к. 100% – это один полностью загруженный ЦП в системе при использовании ограничений по ЦП. |
Количество (число ЦП) |
zone.cpu-shares |
Количество процессорных долей в соответствии с планировщиком долевого распределения (FSS) для этой зоны. |
Количество (доли) |
zone.max-locked-memory |
Общее количество доступной зоне физической блокированной памяти. Если зоне назначается priv_proc_lock_memory, следует рассмотреть возможность задания также и этого элемента управления ресурсами для предотвращения блокирования зоной всей памяти. |
Размер (байты) |
zone.max-lwps |
Максимальное количество LWP, одновременно доступных этой зоне. |
Количество (LWP) |
zone.max-msg-ids |
Максимальное количество идентификаторов очередей сообщений, разрешенное для этой зоны. |
Количество (идентифика- торы очередей сообщений) |
zone.max-sem-ids |
Максимальное количество идентификаторов семафоров, разрешенных для этой зоны. |
Количество (идентифика- торы семафоров) |
zone.max-shm-ids |
Максимальное количество идентификаторов совместно используемой памяти, разрешенных для этой зоны. |
Количество (идентифика- торы совместно используемой памяти) |
zone.max-shm-memory |
Общий объем совместно используемой памяти System V, разрешенный для этой зоны. |
Размер (байты) |
zone.max-swap |
Общий объем подкачки, доступный для потребления при отображении адресного пространства пользовательских процессов и файловых систем tmpfs в этой зоне. |
Размер (байты) |
Для получения информации о настройке элементов управления ресурсами для всей зоны см. Свойства типов ресурса и Настройка зоны. Информацию по использованию элементов управления ресурсами для всей зоны в типизированных зонах lx приведены в Настройка, проверка и сохранение параметров типизированной зоны lx.
Следует отметить, что общезоновый элемент управления ресурсами можно применить и к глобальной зоне. Для получения дополнительной информации см. Глава 17Настройка неглобальной зоны (обзор) и Использование планировщика долевого распределения в системе Solaris с установленными зонами.
Для всех элементов управления ресурсами определяются глобальные флаги, идентифицирующие типы элементов управления ресурсами. Флаги используются для передачи базовой информации приложениям, например команде prctl. Эта информация используется приложениями для определения следующих значений:
строки единиц измерения, подходящих для каждого элемента управления ресурсами;
правильного масштаба для интерпретации масштабируемых значений.
Доступны следующие глобальные флаги:
Глобальный флаг |
Строка типа элемента управления ресурсами |
Модификатор |
Шкала |
---|---|---|---|
RCTL_GLOBAL_BYTES |
bytes |
B |
1 |
|
KB |
210 |
|
|
MB |
220 |
|
|
GB |
230 |
|
|
TB |
240 |
|
|
PB |
250 |
|
|
EB |
260 |
|
RCTL_GLOBAL_SECONDS |
seconds |
s |
1 |
|
Ks |
103 |
|
|
Ms |
106 |
|
|
Gs |
109 |
|
|
Ts |
1012 |
|
|
Ps |
1015 |
|
|
Es |
1018 |
|
RCTL_GLOBAL_COUNT |
count |
none |
1 |
|
K |
103 |
|
|
M |
106 |
|
|
G |
109 |
|
|
T |
1012 |
|
|
P |
1015 |
|
|
E |
1018 |
С элементами управления ресурсами могут использоваться кратные единицы. В следующем примере демонстрируется пороговое значение в кратных единицах:
task.max-lwps=(priv,1K,deny)
Модификаторы единицы принимаются командами prctl, projadd и projmod. Использование модификаторов единиц в самой базе данных project не допускается.
Пороговое значение элемента управления ресурсами выступает в качестве точки срабатывания, способной инициировать локальные или глобальные действия, такие как журналирование.
Каждое пороговое значение элемента управления ресурсами должно быть связано с уровнем полномочий. Здесь допускается три уровня полномочий.
базовый (Basic), подлежащий изменению владельцем вызывающего процесса;
привилегированный (Privileged), для которого допускается изменение только привилегированными пользователями (суперпользователями);
системный (System), фиксированный в течение времени существования экземпляра операционной системы.
Элемент управления ресурсами гарантированно имеет одно системное значение, определяемое системой или поставщиком ресурса. Системное значение определяет количество ресурса, которое может предоставить текущая реализация операционной системы.
Можно определить любое количество привилегированных значений, но только одно базовое значение. Операции, вызываемые без указания значения полномочий, по умолчанию выполняются с базовыми полномочиями.
Уровень полномочий значения элемента управления ресурсами определяется в поле полномочий блока элементов управления ресурсами как RCTL_BASIC, RCTL_PRIVILEGED или RCTL_SYSTEM. Для получения дополнительной информации см. setrctl(2). Для изменения значений, связанных с базовыми и привилегированными уровнями, используется команда prctl.
Существуют две категории действий со значениями элементов управления ресурсами: глобальная и локальная.
Глобальные действия применяются в отношении значений элементов управления ресурсами для каждого элемента управления ресурсами в системе. Команда rctladm, описанная на справочной странице rctladm(1M), позволяет выполнять следующие действия:
отображение глобального состояния активных элементов управления ресурсами системы;
настройка глобальных действий по журналированию.
Глобальные действия по журналированию для элементов управления ресурсами можно включить или выключить. Для действия syslog можно задать определенную степень с помощью уровня категории, syslog=уровень. Ниже приведены возможные значения параметра уровень:
debug
info
notice
warning
err
crit
alert
emerg
По умолчанию глобальное журналирование превышения ограничений, устанавливаемых элементом управления ресурсами, не выполняется. В Solaris версии 10 5/08 добавлен уровень n/a, предназначенный для элементов управления ресурсами, для которых невозможно задать какие-либо глобальные действия.
Локальные действия, выполняемые над процессом, который пытается превысить заданное значение. С каждым пороговым значением, заданным для элемента управления ресурсами, можно связать одно или несколько действий. Существуют три типа локальных действий: none, deny и signal=. Эти три действия используются следующим образом:
Действия в отношении запросов ресурсов в объемах, превышающих пороговое значение, не производятся. Это действие удобно использовать для наблюдения использования ресурса без воздействия на ход выполнения приложений. Также можно задать глобальное сообщение, информирующее о превышении элемента управления ресурсами, но не затрагивающее процесс, превысивший порог.
Отклонение запросов ресурсов в объеме, превышающем пороговое значение. Например, элемент управления ресурсами task.max-lwps с действием deny приводит к отказу системного вызова fork, если новый процесс попробует превысить управляющее значение. См. справочную страницу fork(2).
Для случаев превышения элемента управления ресурсами можно задать глобальное действие, сводящееся к выдаче сигнального сообщения. Сигнал передается процессу при превышении порогового значения. Если процесс продолжает потреблять дополнительные ресурсы, новые сигналы не выдаются. Список доступных сигналов приведен в Таблица 6–3.
Не все действия можно применить к каждому элементу управления ресурсами. Например, процесс не может превысить количество долей ЦП, назначенных проекту, членом которого он является. Поэтому действие deny для элемента управления ресурсами project.cpu-shares не допускается.
Вследствие ограничений, связанных с реализацией, глобальные свойства каждого элемента управления могут ограничивать диапазон доступных действий, которые могут быть заданы для порогового значения. См. справочную страницу rctladm(1M). Список доступных сигнальных действий приведен в следующей таблице. Для получения дополнительной информации о сигналах см. справочную страницу signal(3HEAD).
Таблица 6–3 Сигналы, доступные для значений элементов управления ресурсами
Сигнал |
Описание |
Примечания |
---|---|---|
SIGABRT |
Завершение процесса. |
|
SIGHUP |
Передача сигнала опускания трубки. Возникает при пропадании несущей в открытой линии. Сигнал передается в группу процессов, управляющих терминалом. |
|
SIGTERM |
Завершение процесса. Сигнал завершения, отправляемый программным обеспечением. |
|
SIGKILL |
Завершение процесса и закрытие (kill) программы. |
|
SIGSTOP |
Остановка процесса. Сигнал управления заданиями. |
|
SIGXRES |
Превышение предела элемента управления ресурсами. Генерируется механизмом элементов управления ресурсами. |
|
SIGXFSZ |
Завершение процесса. Превышение предела размера файла. |
Доступен только для элементов управления ресурсами со свойством RCTL_GLOBAL_FILE_SIZE (process.max-file-size). Для получения дополнительной информации см.rctlblk_set_value(3C). |
SIGXCPU |
Завершение процесса. Превышение ограничения по процессорному времени. |
Доступен только для элементов управления ресурсами со свойством RCTL_GLOBAL_CPUTIME (process.max-cpu-time). Для получения дополнительной информации см.rctlblk_set_value(3C). |
С каждым элементом управления ресурсами в системе связан определенный набор свойств. Этот набор свойств определяется как набор флагов, связанных со всеми управляемыми экземплярами данного ресурса. Глобальные флаги не подлежат изменению, однако могут быть считаны с помощью системных вызовов rctladm или getrctl.
Локальные флаги определяют поведение по умолчанию и конфигурацию для определенного порогового значения данного элемента управления ресурсами по определенному процессу или совокупности процессов. Локальные флаги одного порогового значения не воздействуют на поведение других пороговых значений, определенных для того же элемента управления ресурсами. Однако глобальные флаги воздействуют на поведение всех значений, связанных с определенным элементом управления. Локальные флаги можно изменять в пределах ограничений, заданных соответствующими глобальными флагами, командой prctl или системным вызовом setrctl. См. setrctl(2).
Полный список локальных флагов, глобальных флагов и их определений приведены в rctlblk_set_value(3C).
Для определения поведения системы в случае достижения порогового значения по определенному элементу управления ресурсами используется команда rctladm, отображающая глобальные флаги для элемента управления ресурсами. Например, для отображения значений process.max-cpu-time необходимо ввести следующую команду:
$ rctladm process.max-cpu-time process.max-cpu-time syslog=off [ lowerable no-deny cpu-time inf seconds ] |
Глобальные флаги имеют следующие значения.
Для снижения привилегированных значений для данного элемента управления не требуются полномочия суперпользователя.
Даже в случае превышения пороговых значений доступ к ресурсу никогда не запрещается.
По достижении пороговых значений для этого ресурса возможна передача SIGXCPU.
Значение времени для элемента управления ресурсами.
Значения элемента управления ресурсами с типом полномочий basicзадать невозможно. Установка значений допускается только для привилегированных элементов управления ресурсами.
Задать локальные сигнальные действия для значений элементов управления ресурсами невозможно.
Для этого элемента управления ресурсами невозможно определить глобальное действие сообщения syslog.
Отклонение запросов на ресурс при превышении пороговых значений.
Значение счетчика (целое число) для элемента управления ресурсами.
Единица измерения для элемента управления ресурсами.
Для отображения локальных значений и действий для элемента управления ресурсами используется команда prctl.
$ prctl -n process.max-cpu-time $$ process 353939: -ksh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-cpu-time privileged 18.4Es inf signal=XCPU - system 18.4Es inf none |
Флаг max (RCTL_LOCAL_MAXIMAL) устанавливается для обоих пороговых значений, а для данного элемента управления ресурсами определяется флаг inf (RCTL_GLOBAL_INFINITE). Значение inf соответствует бесконечному количеству. Это значение никогда не реализуется. Следовательно, в соответствии с конфигурацией оба пороговых показателя представляют собой бесконечные значения, которые не могут быть превышены.
Для ресурса может быть задано несколько элементов управления ресурсами. Элемент управления ресурсами может существовать на каждом уровне контейнеров модели процессов. Если элементы управления ресурсами активны для одного ресурса в контейнерах разных уровней, первым реализуется элемент управления наименьшего контейнера. Таким образом, в случае одновременного срабатывания сначала выполняется действие по process.max-cpu-time, а затем по task.max-cpu-time.
Нередко потребление ресурсов процессами неизвестно. Для получения дополнительной информации можно воспользоваться глобальными действиями элементов управления ресурсами, доступными по команде rctladm. Команда rctladm позволяет установить действие syslog для элемента управления ресурсами. Затем, если какой-либо экземпляр, управляемый данным элементом, сталкивается с пороговым значением, в журнал заносится системное сообщение с заданным уровнем журналирования. Для получения дополнительной информации см. Глава 7Администрирование элементов управления ресурсами (задачи) и справочную страницу rctladm(1M).