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

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


Настройка параметров VMM с помощью команды vmtune

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

Для того чтобы узнать, установлена ли в системе команда vmtune, вызовите следующую команду:

# lslpp -lI bos.adt.samples

Исполняемый файл команды vmtune расположен в каталоге /usr/samples/kernel. Команду vmtune разрешено вызывать только пользователю root. Изменения, внесенные с помощью этой команды, действуют до следующей загрузки системы. Для внесения изменений на постоянной основе добавьте соответствующую запись в файл /etc/inittab. Например:

vmtune:2:wait:/usr/samples/kernel/vmtune -P 50

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

Упреждающее чтение

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

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

Рис. 8-3. Пример упреждающего чтения с последовательным доступом к данным. На этом рисунке показана группа блоков, изображающих сегменты страниц файла. Сегменты содержат страницы 0, 1-3, 4-7, 8-15 и 16-23. Принцип работы алгоритма упреждающего чтения описан ниже.
Рисунок h08i10

В данном случае значение minpgahead равно 2, а значение maxpgahead равно 8 (значения по умолчанию). Программа последовательно обрабатывает файл. На рисунке показаны только те ссылки (от A до F), которые имеют отношение к операции упреждающего чтения. Она разбивается на следующие этапы:

A
При первом обращении к файлу считывается первая страница файла (страница номер 0). В этот момент VMM не делает никаких предположений относительно способа доступа к файлу.

B
Если после этого программа, не запрашивая других страниц файла, обращается к первому байту следующей страницы 1, то VMM считает, что способ доступа последовательный. Тогда VMM планирует чтение еще двух страниц, 2 и 3 (число страниц определяется значением minpgahead). Таким образом, на этапе B считывается 3 страницы.

C
Когда программа обращается к первому байту первой страницы, прочитанной заранее (страницы 2), VMM удваивает число страниц, считываемых с упреждением, и планирует чтение уже 4 страниц (с 4 по 7).

D
Когда программа обращается к первому байту первой страницы, прочитанной заранее (страницы 4), то VMM снова удваивает число страниц, считываемых с упреждением, и планирует чтение 8 страниц (с 8 по 15).

E
Когда программа обращается к первому байту первой страницы, прочитанной с упреждением (страницы 8), VMM определяет, что число страниц, читаемых с упреждением, достигло максимума (maxpgahead), и планирует чтение страниц с 16 по 23.

F
При каждом обращении программы к первому байту предыдущей группы страниц, прочитанных с упреждением, VMM считывает с упреждением maxpgahead страниц. Таким образом файл прочитывается до конца.

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

Значения minpgahead и maxpgahead можно изменить с помощью опций -r и -R команды vmtune. При этом следует помнить следующее:

Алгоритм отложенной записи VMM

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

Отложенная запись в случае последовательного доступа

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

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

Отложенная запись при произвольном доступе

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

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

Это пороговое значение можно изменить с помощью опции -W команды vmtune. При этом будет изменено значение параметра maxrandwrt. Значение по умолчанию равно 0, то есть при произвольном доступе к данным функция отложенной записи выключена. Если этому параметру будет присвоено значение 128, то все измененные страницы файла, начиная со 129, будут выгружаться на диск. Первая группа страниц будут выгружена после вызова sync().

Настройка синхронизации файлов

Если при записи данных в файл JFS применялся произвольный способ доступа, то эти данные будут выгружены из памяти при выполнении одного из следующих условий:

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

В AIX версии 4.3.2 была добавлена опция sync_release_ilock. Команда vmtune с опцией -s позволяет разрешить освобождение блокировки i-узла во время выгрузки измененных страниц файла (1 означает, что i-узел должен освобождаться при выгрузке измененных страниц, 0 означает, что i-узел будет заблокирован все время). Эта опция позволяет уменьшить время ответа при обращении к файлу во время работы функции sync().

Для того чтобы уменьшить негативный эффект, связанный с блокировкой i-узла, увеличьте частоту, с которой демон syncd вызывает функцию sync. Для этого измените параметр демона syncd в файле /sbin/rc.boot. Для того чтобы внесенное изменение вступило в силу, перезагрузите систему. Для того чтобы изменить это значение в работающей системе, убейте процесс демона syncd и перезапустите его, указав новый интервал запуска функции.

Кроме того, вы можете изменить параметры функции отложенной записи, применяемой при произвольном доступе, с помощью команды vmtune (за дополнительной информацией обратитесь к разделу Алгоритм отложенной записи VMM).

Прочие параметры ввода-вывода

С помощью команды vmtune можно настроить следующие параметры дискового ввода-вывода:

numfsbufs

Если к файловой системе одновременно поступает большое число обращений, либо из файловой системы последовательно считываются или записываются большие объемы данных, то операции ввода-вывода в этой файловой системе могут выполняться медленно из-за нехватки структур bufstruct. Число структур bufstruct, создаваемых для каждой файловой системы, (параметр numfsbufs) можно изменить с помощью команды vmtune -b. Новое значение вступает в силу только при монтировании файловой системы. Следовательно, для применения нового значения нужно размонтировать и снова смонтировать файловую систему. По умолчанию значение параметра numfsbufs равно 93.

lvm_bufcnt

Если приложение записывает большие объемы данных сразу на диск, минуя файловую систему, то операции ввода-вывода могут выполняться медленно из-за задержек, возникающих на уровне LVM. Это особенно характерно для случае чтения или записи большого объема данных при работе с диском с высокой производительностью. При возникновении задержек на уровне LVM рекомендуется увеличить значение параметра lvm_bufcnt с помощью команды vmtune -u. Это значение задает число буферов uphysio. Изменение вступает в силу немедленно. По умолчанию число буферов uphysio равно 9. Поскольку LVM считывает и записывает данные блоками по 128 Кб, и значение lvm_bufcnt по умолчанию равно 9, то за одну операцию может быть записано 9*128 Кб данных. При записи данных большего объема рекомендуется увеличить значение параметра lvm_bufcnt.

hd_pbuf_cnt

Параметр hd_pbuf_cnt (-B) задает число структур pbuf, доступных драйверу устройства LVM. Структуры pbuf - это буферы в закрепленной памяти, применяемые для хранения запросов на ввод-вывод, еще не обработанных приложением LVM.

В AIX версии 4 последовательные запросы на ввод-вывод объединяются. Это означает, что для каждого последовательного запроса на ввод-вывод применяется один буфер pbuf, независимо от числа страниц, указанных в этом запросе. Такую причину снижения производительности обнаружить достаточно сложно. В случае ввода-вывода с произвольным доступом к данным страницы выгружаются на диск случайным образом (при условии, что не запущен демон syncd).

Для того чтобы узнать, достаточно ли в системе структур pbuf, просмотрите значение переменной LVM hd_pendkblked. Для просмотра этого значения можно воспользоваться следующим сценарием:

#!/bin/ksh
# разрешено запускать только пользователю root
# указывает, сколько раз с момента загрузки системы в LVM возникали задержки из-за нехватки pbuf
addr=`echo "knlist hd_pendqblked" | /usr/sbin/crash 2>/dev/null |tail -1| cut -f2 -d:`
value=`echo "od $addr 1 D" | /usr/sbin/crash 2>/dev/null | tail -1| cut -f2 -d:`
echo "Число задержек LVM из-за нехватки pbuf: $value"
exit 0

В AIX 4.3.3 и выше значение параметра hd_pendqblked можно узнать с помощью команды vmtune -a (за дополнительной информацией обратитесь к разделу fsbufwaitcnt и psbufwaitcnt).

Примечание: Не присваивайте параметру hd_pbuf_cnt большое значение, так как его можно уменьшить только путем повторной загрузки системы.

pd_npages

Задает число страниц, которые будут удалены из памяти одним блоком при удалении файла. Изменять значение этого параметра имеет смысл только для приложений, выполняющихся в режиме реального времени. Уменьшение значения pd_npages позволяет сократить время ответа в таких приложениях за счет того, что до возобновления работы нити или процесса система успеет удалить меньшее число страниц. По умолчанию значение этого параметра равно максимальному размеру файла, поделенному на размер страницы (4096). Если максимальный размер файла составляет 2 Гб, то значение pd_npages по умолчанию равно 524288. Для изменения этого значения предназначена опция -N.

v_pinshm

Если параметр v_pinshm равен 1 (-S 1), и при вызове функции shmget() был задан флаг SHM_PIN, то страницы в общем сегменте памяти будут закреплены. Значение по умолчанию равно 0. Эта опция предусмотрена в операционной системе версии 4.3.3 и выше.

В приложении может быть предусмотрен параметр, указывающий, нужно ли задавать флаг SHM_PIN (например, в Oracle 8.1.5 и выше для этого предусмотрен параметр lock_sga). Не рекомендуется закреплять большое число страниц, поскольку это может привести к запуску алгоритма замены страниц. Однако закрепление страниц позволяет повысить эффективность выполнения асинхронных операций ввода-вывода при работе с общими сегментами памяти (для закрепления буфера в памяти расширение ядра для поддержки асинхронного ввода-вывода не требуется).

Параметры fsbufwaitcnt и psbufwaitcnt

В AIX 4.3.3 появилось два новых счетчика, которые увеличиваются при отсутствии свободной структуры bufstruct и при помещении нити в список ожидающих нитей VMM. Значения счетчиков fsbufwaitcnt и psbufwaitcnt можно просмотреть с помощью команды crash и с помощью команды vmtune с опцией -a. Ниже приведен пример вывода команды:

# vmtune -a
       hd_pendqblked = 305
        psbufwaitcnt = 0
        fsbufwaitcnt = 337


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