Непрерывная оптимизация памяти

При непрерывной оптимизации памяти программа объединяет страницы памяти и увеличивает размер страницы в динамическом режиме.

Поддержка динамических страниц переменного размера

Поддержка динамических страниц переменного размера (DVPSS) в AIX версии 6.1 состоит в использовании страниц размером 4 Кб, когда обращения к памяти происходят редко, и страниц размером 64 Кб в местах частого обращения к памяти. Переключение размера страниц происходит автоматически, без участия пользователя.

DVPSS позволяет POWER6 использовать страницы разного размера в одном сегменте. Архитектура размещает страницы разного размера различным образом. Однако POWER6 поддерживает только два размера страниц - 4 Кб и 64 Кб.

По умолчанию размер страницы составляет 4 Кб, размер трансляции - 4 Кб. Трансляции происходят до тех пор, пока не произойдет обращение ко всем 16 4-килобайтным страницам (64 Кб). После обращения ко всем 16 страницам происходит проверка того, что они все находятся в одинаковом состоянии - наличие защиты от чтения/записи, защиты от выполнения, ключа защиты памяти и состояние защиты ввода-вывода). Если состояния одинаковые, то трансляции, размером 4 КБ, заменяются на 64 КБ.

Агент непрерывной оптимизации программы (CPOagent)

Недостаток метода DVPPS в операционной системе состоит в том, что для перехода на размер страницы 64 Кб система должна обратиться ко всем 16 страницам, размером 4 Кб. CPOagent позволяет снять это ограничение и объединять страницы в процессе работы программы. Эта функция относится к AIX 6.1 Technology уровня 6 и выше.

CPOagent расположен в каталоге:

usr/lib/perf/CPOagent

Синтаксис

CPOagent [-f файл-конфигурации]

Флаг

Флаг Описание
-f Изменяет имя файла конфигурации по умолчанию. Если эта опция не задана, используется файл /usr/lib/perf/CPOagent.cf.
По умолчанию, CPOagent не запускается. Пользователь root должен запустить CPOagent явно. После запуска CPOagent выполняется в фоновом режиме и анализирует возможность оптимизации каждого процесса путем его переключения на страницы большего размера. Агент сравнивает объем памяти и процессорное время, используемые процессом, с пороговым значением.
Прим.: CPOagent может увеличить размер страницы до 64 Кб.

Файл конфигурации CPOagent

Сразу после запуска CPOagent считывает файл конфигурации и анализирует его. Файл конфигурации - это файл stanza с полями:
TCPU=<n1>
TMEM=<n2>
PATI=<n3>
PATM=<n4>
PPTS=<n5>
TOPM=<n6>
PFLR=<c>

Описание полей конфигурации:

Поля Описание
TCPU Задает ограничение процессорного времени, которое может использовать один процесс (в процентах)

По умолчанию: 25

Минимально: 10

Максимально: 100

TMEM Задает ограничение памяти, используемой процессом (в Мб)

По умолчанию: 1

Минимально: 1

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

По умолчанию: 15

Минимально: 5

Максимально: 60

PATM Задает периодичность анализа страниц (PATM), в секундах. Временной интервал, с которым собирается статистика по страницам и принимается решение: стоит ли объединить соседние страницы и перейти к большему размеру.

По умолчанию: 30

Минимально: 5

Максимально: 180

PPTS Количество страниц для анализа на предмет объединения. Указывает количество страниц, к которым должно было произойти обращение, чтобы их объединили.

По умолчанию: 4

Минимально: 4

TOPM Количество процессов, больше всех использующих процессорное время, в которых следует объединить страницы и увеличить размер страниц.

По умолчанию: 2

Минимально: 1

PFLR Задает маску имен процессов, которые должен анализировать CPOagent на предмет возможности оптимизации. Переменная содержит символы подстановки для фильтрации всех процессов.

Преимущества использования CPOagent

Преимущества механизма CPOagent включают:
  • Приложения можно настраивать в прозрачном режиме. При этом сами приложения изменять не требуется.
  • Увеличение размера страницы происходит при выполнении ряда условий, указываемых администратором в файле CPOagent.cf, в зависимости от рабочей нагрузки на процессор и доступных ресурсов. Использование сценариев позволяет оптимизировать управление размером страниц. При этом поддержка динамических страниц переменного размера настраивается для каждого приложения отдельно.
Пример сценария
Пусть в системе выполняется приложение StressEngine. Оно использует большие объемы памяти и большую долю процессорного времени. Без CPOagent приложение StressEngine не сможет перейти в режим поддержки динамических страниц переменного размера, пока не обратится ко всем 16 страницам в одном из своих сегментов, и все страницы не перейдут в одинаковое состояние. Размер страницы можно просмотреть в отчете о процессе с помощью команды svmon.
# svmon -P 8454254 -O pgsz=on,unit=MB,segment=on
Ед. изм: Мб
-------------------------------------------------------------------------------
     Pid Command          Inuse      Pin     Pgsp  Virtual
 8454254 StressEngine	  157.87     42.3        0   157.84

     Разм.Стр.     Занято      Закр.   Пр.пдкчк. Виртуальн.
     s    4 Кб                64.2       0.02          0       64.2
     m   64 KB                93.7       42.3          0       93.7

    Vsid      Esid Тип  Описание                 PSize  Inuse   Pin Pgsp Virtual
  86f49b         2 раб. проц. прив.                  s   64.1  0.02    0    64.1
    9000         d раб. данные общ. библ.            m   47.9     0    0    47.9
    8002         0 дерево раб. проц.                 m   45.8  42.3    0    45.8
                   children=939b1c, 0
  80fdc3         f раб. данные общ. библ.            s   0.09     0    0    0.09
  85fd37         1 clnt code,/dev/hd1:10             s   0.02     0    -       -
Пусть запущен CPOagent, а файл CPOagent.cf выглядит следующим образом:
--------------------------------------------
TCPU=25
TMEM=50
PATI=15
PATM=30
PPTS=4
TOPM=2
PFLR=Stress*
--------------------------------------------
Согласно файлу конфигурации, CPOagent работает с интервалом 15 минут (PATI =15). Через каждые 15 минут он проверяет, сколько памяти и процессорного времени использует процесс. Первые 2 процесса (TOPM =2), в название которых входит строка Stress (PFLR = Stress*), использование процессора превышает 25% (TCPU = 25), а использование памяти - 50 Мб (TMEM = 50), являются претендентами на объединение смежных страниц и увеличение размера для последующих страниц. В каждом из процессов проверяются произвольные 4 страницы (PPTS = 4), а затем запускается алгоритм объединения страниц и увеличения размера страницы. Кроме того, статистика по страницам обновляется каждые 30 секунд (PATM =30), и на ее основании выбираются страницы - кандидаты на объединение. Таким образом, после запуска CPOagent нет необходимости ждать, пока ко всем 16 в сегменте произойдет обращение. CPOagent определяет необходимость объединения страниц в приложении на основании конфигурации CPOagent.cf и том, сколько приложению требуется памяти и времени процессора. Объединенные страницы включаются в отчет о процессе, который можно просмотреть с помощью команды svmon.
# svmon -P 8454254 -O pgsz=on,unit=MB,segment=on
Ед. изм: Мб
-------------------------------------------------------------------------------
     Pid Command          Inuse      Pin     Pgsp  Virtual
 8454254 StressEngine	   157.87     42.3        0   157.84

     Разм.Стр.     Занято      Закр.   Пр.пдкчк. Виртуальн.
     s    4 Кб                64.2       0.02          0       64.2
     m   64 KB                93.7       42.3          0       93.7

    Vsid      Esid Тип  Описание                 PSize  Inuse   Pin Pgsp Virtual
  86f49b         2 раб. проц. прив.                  sm   64.1  0.02    0    64.1
    9000         d раб. данные общ. библ.            m   47.9     0    0    47.9
    8002         0 дерево раб. проц.                 m   45.8  42.3    0    45.8
                   children=939b1c, 0
  80fdc3         f раб. данные общ. библ.            sm   0.09     0    0    0.09
  85fd37         1 clnt code,/dev/hd1:10             s   0.02      0    -       -