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

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


Настройка асинхронного дискового ввода-вывода

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

Для выполнения асинхронного ввода-вывода предназначены функции aio_read(), aio_write() и lio_listio() (а также их 64-разрядные версии). Эти функции возвращают управление приложению, как только запрос помещается в очередь. В итоге приложение может продолжать работу одновременно с выполнением операции дискового ввода-вывода.

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

Отправив запрос на асинхронный ввод-вывод, приложение может проверить, был ли выполнен запрос. Эта информация может предоставляться одним из трех способов:

В AIX версии 4 операциями асинхронного ввода-вывода в файловых системах JFS управляют процессы kproc. Операциями асинхронного ввода-вывода данных на логические тома с прямым доступом управляет ядро. В операционной системе AIX 4.3.2 и выше (а также в версии 4.3.1, если установлен PTF) Виртуальные общие диски (VSD) не применяют процессы kproc.

Каждая операция ввода-вывода управляется отдельным процессом kproc. Как правило, этот процесс не может обрабатывать другие запросы из очереди до завершения обработки текущего запроса. Если в системе включена функция асинхронного ввода-вывода, то по умолчанию минимальное число серверов составляет 1. Это значение задается в атрибуте minservers. Максимальное число серверов асинхронного ввода-вывода, которые могут быть созданы в системе, задается в атрибуте maxservers. По умолчанию значение этого атрибута равно 10. Число серверов определяет максимальное число дисковых операций, выполняемых системой параллельно. Это число можно изменить с помощью команды SMIT (smitty -> Устройства -> Асинхронный ввод-вывод -> Изменить параметры асинхронного ввода-вывода -> {Минимальное | Максимальное} число серверов или команда smitty aio), либо с помощью команды chdev.

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

Если число запросов на асинхронный ввод-вывод велико, то рекомендуется увеличить значение maxservers таким образом, чтобы оно примерно совпадало с числом одновременно выполняемых запросов. Как правило, значение minservers изменять не нужно, так как расширение ядра, отвечающее за асинхронный ввод-вывод, автоматически создает дополнительные серверы по мере необходимости.

Примечание: Для выполнения операций асинхронного ввода-вывода данных на логический том с прямым доступом процессы сервера kproc не применяются. Параметры maxservers и minservers не влияют на выполнение таких операций.

Просмотрите информацию об использовании процессора серверами асинхронного ввода-вывода. Если серверы в равной мере используют процессор, то все серверы заняты. В этом случае рекомендуется увеличить число серверов. Для того чтобы получить информацию об использовании процессора отдельными серверами, запустите команду pstat -a. Кроме того, можно вызвать команду ps -k. В выводе этой команды все серверы асинхронного ввода-вывода указаны под именем kproc.

Если система должна быстро обрабатывать большое число операций асинхронного ввода-вывода, однако число одновременно выполняемых операций невелико, то рекомендуется присвоить параметру maxservers значение не ниже 10*(число дисков, к которым обращаются в асинхронном режиме).

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

# chdev -l aio0 -a maxservers='30'

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


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