[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по настройке производительности


Настройка алгоритма замены страниц VMM с помощью команды vmtune

Алгоритм управления памятью, описанный в разделе Управление физической памятью, сохраняет размер списка свободных страниц и долю физической памяти, занятую страницами постоянной памяти, в допустимых пределах. Предельные значения можно изменить с помощью команды vmtune. Эту команду разрешено выполнять только пользователю root. Изменения, внесенные с помощью этой команды, действуют до следующей загрузки системы. Для того чтобы узнать, установлена ли в системе команда vmtune, вызовите следующую команду:

# lslpp -lI bos.adt.samples

Примечание: Команда vmtune расположена в каталоге samples, так как она в значительной мере зависит от реализации VMM. Команда vmtune может применяться только с тем приложением VMM, которое относится к тому же выпуску операционной системы, что и команда. Запуск команды vmtune в системе другого выпуска может привести к сбою в работе операционной системы. Кроме того, в разных выпусках операционной системы команда vmtune может выполнять различные функции. Не переносите в новый выпуск операционной системы сценарии оболочки и записи /etc/inittab, содержащие команду vmtune, не убедившись в том, что такие сценарии будут правильно работать в новом выпуске системы.

Команда vmtune без параметров в операционной системе AIX 4.3.3 создает следующий отчет:

# /usr/samples/kernel/vmtune
vmtune:  текущие значения:
  -p       -P        -r          -R         -f       -F       -N        -W
minperm  maxperm  minpgahead maxpgahead  minfree  maxfree  pd_npages maxrandwrt
  52190   208760       2          8        120      128     524288        0
 
  -M      -w      -k      -c        -b         -B           -u        -l    -d
maxpin npswarn npskill numclust numfsbufs hd_pbuf_cnt lvm_bufcnt lrubucket defps
 
209581    4096    1024       1      93         96          9      131072     1
 
        -s              -n         -S           -h
sync_release_ilock  nokillroot  v_pinshm  strict_maxperm
        0               0           0             0
 
число доступных страниц памяти = 261976        maxperm=79.7% физической памяти
максимальная доля закрепленной памяти=80.0%    minperm=19.9% физической памяти
число страниц файлов = 19772                   numperm=7.5% физической памяти
 

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

Выбор значений minfree и maxfree

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

При настройке этих ограничений преследуются следующие цели:

Значения по умолчанию для параметров minfree и maxfree устанавливаются в зависимости от размера оперативной памяти компьютера. Значение по умолчанию для параметра maxfree вычисляется по следующей формуле:

maxfree = minimum (число страниц памяти/128, 128)

По умолчанию значение minfree равно maxfree - 8. При настройке этих ограничений учтите, что разность между значениями minfree и maxfree должна быть не меньше значения maxpgahead. Другими словами, значение maxfree всегда должно быть больше суммы значений minfree и maxpgahead. Если в системе есть несколько пулов памяти, то для каждого из них значения minfree и maxfree настраиваются отдельно. Пулы памяти применяются в многопроцессорных системах с большим объемом оперативной памяти, в которых установлен AIX 4.3.3 и выше. Для каждого пула памяти устанавливаются собственные значения minfree и maxfree, которые вычисляются по приведенным выше формулам. Значения minfree и maxfree, указанные в выводе команды vmtune, представляют собой сумму значений minfree и maxfree для всех пулов памяти.

Обратите внимание, что minfree задает число страниц памяти, которые в каком-то смысле тратятся впустую, поскольку они свободны, но не используются. Если в системе есть небольшое число программ, которые должны быстро выполняться, то рекомендуется определить объем памяти, необходимый для выполнения этих программ, с помощью команды svmon (за дополнительной информацией обратитесь к разделу Определение необходимого объема памяти), а затем присвоить параметру minfree максимальное из полученных значений. Такой способ резервирует память с запасом, так как процесс редко работает сразу со всеми страницами памяти. В то же время, он не учитывает динамических запросов на получение памяти, отправляемых другими программами. В итоге средний размер списка свободных страниц может быть несколько меньше ожидаемого.

Команда vmstat предоставляет менее точный, но более удобный способ для вычисления значения minfree. Ниже приведен фрагмент вывода команды vmstat, запущенной в системе, выполняющей компиляцию программы на C. Никакие другие задачи в системе не выполняются.

# vmstat 1
нити     память             страница          ошибки        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 0  0  3085   118   0   0   0   0    0   0 115    2  19  0  0 99  0
 0  0  3086   117   0   0   0   0    0   0 119  134  24  1  3 96  0
 2  0  3141    55   2   0   6  24   98   0 175  223  60  3  9 54 34
 0  1  3254    57   0   0   6 176  814   0 205  219 110 22 14  0 64
 0  1  3342    59   0   0  42 104  249   0 163  314  57 43 16  0 42
 1  0  3411    78   0   0  49 104  169   0 176  306  51 30 15  0 55
 1  0  3528   160   1   0  10 216  487   0 143  387  54 50 22  0 27
 1  0  3627    94   0   0   0  72  160   0 148  292  79 57  9  0 34
 1  0  3444   327   0   0   0  64  102   0 132  150  41 82  8  0 11
 1  0  3505   251   0   0   0   0    0   0 128  189  50 79 11  0 11
 1  0  3550   206   0   0   0   0    0   0 124  150  22 94  6  0  0
 1  0  3576   180   0   0   0   0    0   0 121  145  30 96  4  0  0
 0  1  3654   100   0   0   0   0    0   0 124  145  28 91  8  0  1
 1  0  3586   208   0   0   0  40   68   0 123  139  24 91  9  0  0

Поскольку компилятор ранее не запускался, то требуется считать в память его исходный код. За 6 секунд работы компилятор запросил около 2 Мб памяти. В системе с 32 Мб оперативной памяти значение maxfree равно 64, а значение minfree равно 56. После запуска компилятора размер списка свободных страниц практически сразу стал меньше minfree, поэтому в течение нескольких секунд список свободных страниц активно пополнялся. В частности, для добавления в список свободных страниц были выбраны некоторые измененные страницы из рабочих сегментов памяти, которые потребовалось выгрузить в пространство подкачки. Это отражено в столбце po. Операции выгрузки измененных страниц из постоянных сегментов памяти не указываются в выводе команды vmstat (если только в отчет команды vmstat не была включена информация об обмене данными с физическими томами, на которые были выгружены страницы постоянной памяти).

Данный пример описывает случай, когда процессы порождаются с помощью функций fork() и exec() (а не случай долго работающего процесса, например, базы данных). Из него не нужно делать вывод о том, что для компиляции больших программ параметру minfree нужно присваивать значение 500. Данный пример демонстрирует применение команды vmstat для выявления случаев, когда в работе программе возникают задержки из-за нехватки памяти, в результате чего система вынуждена пополнять список свободных страниц. В данном случае время работы компилятора увеличилось примерно на 2 секунды за счет того, что в системе не хватило свободных страниц, которые можно было бы получить без задержки. Если вы сможете оценить объем памяти, требуемый программе при инициализации и во время работы, вы сможете установить такой размер списка свободных страниц, чтобы программа не ожидала освобождения памяти.

Предположим, что в приведенном выше примере было принято решение установить ограничение minfree равным 128. Предположим также, что параметру maxpgahead ранее было присвоено значение 16 для увеличения скорости ввода-вывода с последовательным доступом к данным. Тогда для настройки необходимых ограничений нужно вызвать следующую команду vmtune:

# /usr/samples/kernel/vmtune -f 128 -F 144

Настройка пулов памяти

В операционной системе AIX старше 4.3.3 можно изменить число пулов памяти, устанавливаемое во время загрузки системы. Для этого нужно вызвать команду vmtune -m число-пулов-памяти. Команда с флагом -m не позволяет изменить число пулов памяти во время работы системы. В многопроцессорных системах значение этого параметра записывается в файл ядра (в однопроцессорных системах изменять значение этого параметра нельзя). Если значение параметра равно 0, то применяется число пулов памяти по умолчанию.

По умолчанию команда vmtune -m записывает новое значение параметра в файл /usr/lib/boot/unix_mp, однако вы можете указать другой файл с помощью команды vmtune -U файл-unix. Перед изменением файла ядра команда vmtune сохраняет старый файл под именем имя-старого-файла.sav.

Настройка параметра lrubucket для повышения эффективности выбора страниц оперативной памяти

Настройка параметра lrubucket позволяет повысить эффективность выбора страниц в системах с большим объемом оперативной памяти. Параметр lrubucket предусмотрен в AIX 4.3 и выше. Алгоритм замены страниц перебирает страницы физической памяти, выбирая свободные страницы. Во время такого перебора сбрасывается флаг обращения к странице. Если свободная страница не была найдена, то перебор страниц начинается заново. Если во время повторного перебора флаг обращения к странице будет по-прежнему сброшен, то эта страница физической памяти освобождается для размещения другой страницы виртуальной памяти (замена страниц).

В системах с большим объемом оперативной памяти приходится перебирать большое число страниц физической памяти. Для повышения эффективности перебора вся память была поделена на блоки страниц. Алгоритм замены страниц дважды просматривает один и тот же блок страниц, и лишь затем переходит к следующему блоку. По умолчанию блок содержит 131072 страниц физической памяти, суммарный объем которых составляет 512 Мб. Размер блока можно изменить с помощью команды vmtune -l, указав в ней число страниц размером 4 Кб.

Выбор значений minperm и maxperm

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

Отношение числа страниц файлов к числу страниц, применяемых для вычислений (рабочих страниц и страниц с текстом программы), косвенно зависит от значений minperm и maxperm:

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

# /usr/samples/kernel/vmtune
vmtune:  текущие значения:
  -p       -P        -r          -R         -f       -F       -N        -W
minperm  maxperm  minpgahead maxpgahead  minfree  maxfree  pd_npages maxrandwrt
  52190   208760       2          8        120      128     524288        0
 
  -M      -w      -k      -c        -b         -B           -u        -l    -d
maxpin npswarn npskill numclust numfsbufs hd_pbuf_cnt lvm_bufcnt lrubucket defps
209581    4096    1024       1      93         96          9      131072     1
 
        -s              -n         -S           -h
sync_release_ilock  nokillroot  v_pinshm  strict_maxperm
        0               0           0             0
 
число доступных страниц памяти = 261976        maxperm=79.7% физической памяти
максимальная доля закрепленной памяти=80.0%    minperm=19.9% физической памяти
число страниц файлов = 19772                   numperm=7.5%  физической памяти
 

Значения по умолчанию определяются следующим образом:

minperm (в страницах) = ((число страниц физической памяти) - 1024) * .2
maxperm (в страницах) = ((число страниц физической памяти) - 1024) * .8

Значение numperm указывает число страниц файлов в оперативной памяти (19772). Это составляет 7,5 процентов от объема физической памяти.

Если известно, что в работе редко применяются файлы, которые недавно использовались, можно сократить объем памяти, выделяемый под эти страницы. Команда:

# /usr/samples/kernel/vmtune -p 15 -P 50

устанавливает ограничение minperm равным 15 процентам, а ограничение maxperm равным 50 процентам от объема физической памяти. В этом случае VMM будет пополнять список свободных страниц только за счет страниц файлов, когда отношение страниц файлов к общему числу страниц памяти превышает 50 процентов. Это позволяет сократить число страниц, выгружаемых пространство подкачки, не оказывая отрицательного влияния на постоянную память. Значение maxperm не является жестким ограничением. Оно учитывается только алгоритмом замены страниц VMM. В связи с этим в большинстве систем имеет смысл уменьшить значение maxperm.

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

# /usr/samples/kernel/vmtune -p 30 -P 90

Увеличение значения maxperm позволяет повысить производительность серверов NFS с большим объемом оперативной памяти, если сервер применяется преимущественно для чтения данных. За счет того что в оперативной памяти будет храниться больше страниц файлов, клиенты NFS смогут повторно обращаться к этим страницам, не ожидая, пока сервер NFS загрузит их с диска.

Другим примером может служить программа, которая последовательно считывает файл размером 1,5 Гб в рабочую память системы с объемом оперативной памяти 2 Гб. В этом случае параметру maxperm рекомендуется присвоить значение не больше 50 процентов, так как хранить данные файла в оперативной памяти не нужно.

Настройка жесткого ограничения для кэша файлов в постоянной памяти с помощью опции strict_maxperm

В операционной системе AIX 4.3.3 и выше команда vmtune поддерживает дополнительную опцию (-h), которая называется strict_maxperm. Если эта опция равна 1, то для размера кэша файлов в постоянной памяти устанавливается жесткое ограничение, совпадающее со значением maxperm. При достижении этого ограничения из оперативной памяти выгружаются те страницы постоянных сегментов, которые за последнее время использовались реже всего (LRU).


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]