Категорії
Solaris

Ограничение ресурсов на примере зоны

В Solaris предусмотрены очень хорошие инструменты для управления ресурсами не только самой ОС, но и зон. К примеру, мы хотим ограничить ресурсами какую-то зону, причём не просто ограничить место, а ограничить по количеству используемых процессоров, памяти, процессов, задач и прочего.

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

Тестовый стенд: Solaris 11

Ниже будут идти разного рода ограничения, отсортированные по категориям.

1) Ограничиваем свойствами самой zfs

Приведу здесь только некоторые из значимых опций. Все опции применяются следующей командой:

zfs set OPTION=VALUE /path/to/zfs

где OPTIONS – соответственно опция, а VALUE – значение.

Опции могут быть таких видов: default (значения по умолчанию), inherited (унаследованные из пула), local (опции, установленные через zfs set), temporary (временные опции, установленные через zfs mount -o), – (none) (значения read-only, установленные самой zfs)

– quota: определяет размер выделяемой квоты под ФС, а так же для её снапшотов и клонов (значения: 1G|2G…)
– reservation: определяет резервацию для данной ФС, а так же для её снапшотов и клонов, то есть это место будет всегда зарезервировано для данной ФС (значения: 1G|2G…)
– sharenfs: расшарить эту ФС через NFS (значения: on|off)
– checksum: включить/отключить коррекцию и определение ошибок(значения: on|off). Лучше её не отключать
– compression: включить/отключить сжатие (значения: on|off)
– exec: включить/выключить возможность запуска приложений(значения: on|off)
– setuid: включить/выключить возможность установки SUID бита(значения: on|off)
– copies: сколько копий данной ФС хранить (значения: 1|2|3)
– recordsize: указывает размер блока для ФС
– referenced: указывает на размер данных, занятых ФС. Для клонированных ФС значения одинаковые
– refquota: жёсткий лимит по квоте. Этот параметр не учитывает место занимаемое под снапшоп или клон
– refreservation: определяет резервацию для данной ФС, то есть это место будет всегда зарезервировано для данной ФС. Этот параметр не учитывает место занимаемое под снапшоп или клон (значения: 1G|2G…)
– utf8only: Эта опция приведёт к тому, что файлы в этом каталоге можно будет создавать с названиями только в кодировке UFT-8. Это приведёт к тому, что мы неправильно сконфигурированные клиенты, которые попытаются создать файлы с названиями в кодировке koi8-r или cp1251, не смогут этого сделать. Мы гарантированы от путаницы кодировок.
– casesensitivity: специально для SMB Server предусмотрена опция mixed, ее надо указать ТОЛЬКО при создании ФС
– sync: настройка синхронизации
– encryption: криптовать ФС или нет
– shadow: миграция на уровне файловой системы.

2) Ограничения по ресурсам (память, процессор, сеть,…)

Для ограничения зоны используем утилиты zonecfg. Ниже будут приведены некоторые параметры:

– capped-cpu: количество используемых CPU (может задаваться в процентном соотношении)
– capped-memory: количество используемой памяти – физическую, swap и locked (для каждого типа памяти значения задаются отдельно)
– dedicated-cpu: использовать только указанные CPU (на самом деле используется пул, созданный на основе указанных CPU), которые будут использоваться только в этой зоне, и не в какой другой (даже в глобальной)
– cpu-shares: число используемых FSS (эта опция несовместима с опцией dedicated-cpu)
– limitpriv: максимальное количество привилегий на процесс
– max-lwps: максимальное количество LWPs simultaneously
– max-msg-ids: максимальное количество ID сообщений в очереди
– max-processes: максимальное количество процессов
– max-sem-ids: максимальное количество семафоров
– max-shm-ids: максимальное количество ID shared памяти
– max-shm-memory: максимальное количество shared памяти
– scheduling-class: класс планировщика (рекомендуется ставить FSS, так как обычно требуется достаточно высокая отзывчивость неглобальных зон, даже при серьезной перегрузке сервера. Доступные классы можно узнать командой dispadmin -l)

3) Ограничения по ресурсам (память, процессор, сеть,…) НА ЛЕТУ

Для изменения на лету (иначе пришлось бы менять через zonecfg и перегружать зону) используется утилита prctl. Но она принимает пригодна только для процессов и в качестве параметра номер процесса. А как же быть, если у нас зона? Очень просто. В каждой зоне есть процесс init, через который собственно и будем ограничивать. Найдём номер pid’a init’a для зоны zone11:

# pgrep -z zone11 init
2655

Что бы посмотреть список свойств, которые можно менять, выполним команду:

# prctl 2655 | grep zone
zone.max-lofi
zone.max-swap
zone.max-locked-memory
zone.max-shm-memory
zone.max-shm-ids
zone.max-sem-ids
zone.max-msg-ids
zone.max-processes
zone.max-lwps
zone.cpu-cap
zone.cpu-shares

Описание значений такие же, как и соответствующие значения в предыдущем пункте.

Если не применяются значения через prctl, тогда советую прочесть здесь

Дополнение.

После применения различного рода ограничений, неплохо было бы узнавать как-то о превышении и если надо – реагировать должным образом. Хорошим примером служит утилита rctladm, которая позволяет выставить логгирование на определённые события.

Примечание.

Эти же значения могут устанавливаться и через свойства rctl зоны:

zonecfg:my-zone> add rctl
zonecfg:my-zone:rctl> set name=zone.cpu-shares
zonecfg:my-zone:rctl> add value (priv=privileged,limit=10,action=none)
zonecfg:my-zone:rctl> end

Так же можно ограничивать память налету через демон rcapd (rcapadm, rcapstat). Но ограничения будут действовать только до следующего ребута зоны.

4) Ограничения через pool

Что такое пул ресурсов? Это определённый “набор” ресурсов разрешаемый для использования кем-либо. Фактически пул может ограничить только CPU (минимально, максимально, какие именно CPU использовать (номера)). Для привязки пула нужно создать сам пул и потом с помощью set pool (через zonecfg) привязать зону к нужному пулу.

5) Просмотр доступных ограничений на привилегия зоны

Короткий вывод

(inside zone)#ppriv -l zone
...
contract_event
contract_identity
contract_observer
file_chown
...

Длинный вывод

# ppriv -lv zone
...
contract_event
        Allows a process to request critical events without limitation.
        Allows a process to request reliable delivery of all events on
        any event queue.
contract_identity
        Allows a process to set the service FMRI value of a process
        contract template.
contract_observer
        Allows a process to observe contract events generated by
        contracts created and owned by users other than the process's
        effective user ID.
        Allows a process to open contract event endpoints belonging to
        contracts created and owned by users other than the process's
        effective user ID.
file_chown
        Allows a process to change a file's owner user ID.
        Allows a process to change a file's group ID to one other than
        the process' effective group ID or one of the process'
        supplemental group IDs.
...

6) Мониторинг потребляемых ресурсов

Для мониторинга потребляемых ресурсов (CPU, memory) по зонах очень удобно использовать утилиту zonestat (К сожалению она доступна только для 11 версии; раньше можно было смело скачать с opensolaris, но теперь файлы удалены).Что бы она работала, нужно, что бы была запущена служба svc:/system/zones-monitoring:default. Вот пример вывода zonestat 1:

Interval: 21, Duration: 0:00:21
SUMMARY                   Cpus/Online: 1/1   PhysMem: 1023M  VirtMem: 2047M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.12 12.5%  877M 85.7% 1134M 55.4%   820 0.00%
           [system]  0.01 1.35%  623M 60.9%  795M 38.8%     -     -
             global  0.10 10.6%  125M 12.2%  114M 5.61%   820 0.00%
          solaris10  0.00 0.29% 77.1M 7.54%  180M 8.80%     0 0.00%
              zone1  0.00 0.20% 51.8M 5.06% 43.5M 2.12%     0 0.00%

А можно ещё и собрать статистику за указанный период:

#zonestat -p -r memory -q -R average,high 30s 24h 1h

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff