Настройка производительности асинхронного дискового ввода-вывода
При выполнении операции синхронного ввода-вывода управление будет возвращено приложению только после завершения операции. Операции асинхронного ввода-вывода выполняются в фоновом режиме параллельно с приложением. За счет этого сокращается время выполнения приложения. Фоновое выполнение операций ввода-вывода увеличивает производительность таких приложений, как базы данных и файловые серверы.
Для выполнения асинхронного ввода-вывода предназначены функции 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 изменять не нужно, так как расширение ядра, отвечающее за асинхронный ввод-вывод,
автоматически создает дополнительные серверы по мере необходимости.
maxservers и
minservers не влияют на выполнение таких операций.Просмотрите информацию об использовании процессора серверами асинхронного ввода-вывода. Если серверы в равной мере используют процессор, то все серверы заняты. В этом случае рекомендуется увеличить число серверов. Для того чтобы получить информацию об использовании процессора отдельными серверами, запустите команду pstat -a. Кроме того, можно вызвать команду ps -k. В выводе этой команды все серверы асинхронного ввода-вывода указаны под именем kproc.
Если система должна быстро обрабатывать большое число операций асинхронного ввода-вывода,
однако число одновременно выполняемых операций невелико, то рекомендуется присвоить параметру
maxservers значение не ниже 10*(число дисков, к которым обращаются в
асинхронном режиме).
minservers илиmaxservers перезагрузка не требуется.
Значение переменной minservers должно быть задано для наилучшей производительности с учетом средней загрузки.Значение переменной minservers не может превышать maxservers.
Дополнительная информация о значениях переменных асинхронного ввода-вывода приведена в разделе Изменение значений переменных для асинхронного ввода-вывода.