Настройка производительности асинхронного дискового ввода-вывода

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

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

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

Приложение пользователя может задать следующие способы его оповещения при завершении операции ввода-вывода:

  • Приложение может периодически считывать информацию о состоянии операции ввода-вывода.
  • Система может отправить приложению уведомление о выполнении операции ввода-вывода.
  • Приложение может приостановить выполнение основных операций до завершения операции ввода-вывода.

Каждая операция ввода-вывода управляется отдельным процессом ядра (kproc). Как правило, этот процесс не может обрабатывать другие запросы из очереди до завершения обработки текущего запроса. значение переменной minservers по умолчанию - 3, а maxservers - 30. По умолчанию значение атрибута maxservers равно числу асинхронных процессов ввода-вывода на один процессор. Чтобы определить максимальное число асинхронных процессов ввода-вывода kprocs в системе AIX, нужно умножить значение maxservers на количество процессоров.

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

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

Прим.: Процессы асинхронного ввода-вывода, выполняемые для логического тома с прямым доступом или файлов, открытых в режиме CIO, не используют процессы сервера процессора. Параметры maxservers и minservers не влияют на выполнение таких операций.

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

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

Прим.: Для вступления в силу значений переменных minservers илиmaxservers перезагрузка не требуется. Значение переменной minservers должно быть задано для наилучшей производительности с учетом средней загрузки.

Значение переменной minservers не может превышать maxservers.

Дополнительная информация о значениях переменных асинхронного ввода-вывода приведена в разделе Изменение значений переменных для асинхронного ввода-вывода.