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

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


Настройка прозрачного ввода-вывода

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

Операции прозрачного ввода-вывода могут применяться только по отношению к рабочим сегментам памяти программы (локальным файлам, расположенным в постоянной памяти). Основным преимуществом прозрачного ввода-вывода является то, что на выполнение операций чтения и записи файлов затрачивается меньше процессорного времени. Это связано с тем, что данные не копируются из кэша файлов VMM в пользовательский буфер. Если число попаданий в кэш невелико, то при выполнении большинства запросов на чтение происходит обращение к диску. Операции записи, как правило, выполняются быстрее с применением кэша. Однако если при открытии файла была указана опция O_SYNC или O_DSYNC (см. Применение вызовов sync/fsync), то при выполнении операций записи в обычном режиме происходит обращение к диску. В этом случае рекомендуется применять прозрачный ввод-вывод, при котором не выполняется копирование данных.

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

Для того чтобы операции прозрачного ввода-вывода выполнялись быстро, запрос на ввод-вывод должен соответствовать типу применяемой файловой системы. Функции finfo() и ffinfo() позволяют узнать смещение указателя, размер и способ выравнивания адресов, применяемые в файловой системе с фиксированным размером блока, фрагментированных файловых системах и файловых системах для больших файлов (прозрачный ввод-вывод не поддерживается для файловых систем со сжатием данных). Эта информация содержится в структуре diocapbuf, описанной в файле /usr/include/sys/finfo.h.

Если поступило сразу несколько запросов на открытие файла, но не во всех из них была задана опция O_DIRECT, то во избежание конфликтов для файла устанавливается обычный режим кэшированного ввода-вывода. Аналогично, если файл размещен в памяти с помощью системного вызова shmat() или mmap(), то для него будет установлен режим кэшированного ввода-вывода. После того как файл будет закрыт последним приложением, открывшим файл в обычном режиме ввода-вывода, JFS установит для файла режим прозрачного ввода-вывода (с помощью функции close(), munmap() или shmdt()). На переключение из обычного режима в режим прозрачного ввода-вывода затрачивается много ресурсов системы, так как все измененные страницы файла, находящиеся в оперативной памяти, должны быть выгружены на диск.

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

Скорость выполнения операций чтения в режиме прозрачного ввода-вывода

Хотя применение прозрачного ввода-вывода позволяет снизить нагрузку на процессор, операции ввода-вывода в таком режиме обычно выполняются дольше, особенно если считываются и записываются небольшие объемы данных. Это связано с тем, что результаты выполнения запросов не заносятся в кэш.

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

Скорость выполнения операций записи в режиме прозрачного ввода-вывода

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

Пример оценки производительности

В приведенном ниже примере приведены результаты измерений показателей производительности в системе RS/6000 E30, 233 Мгц, с операционной системой AIX 4.3.1 (производительность зависит от конфигурации системы). Кб/с означает число килобайт в секунду, а %CPU - показатель использования процессора в процентах.

Число дисков SSA емкостью 2.2 Гб
Число адаптеров SSA PCI
1
1
2
1
4
1
6
1
8
1
Скорость последовательного чтения в обычном режиме ввода-вывода
Кб/с 7108 14170 18725 18519 17892
%CPU 23.9 56.1 92.1 97.0 98.3
Скорость последовательного чтения в режиме прозрачного ввода-вывода
Кб/с 7098 14150 22035 27588 30062
%CPU 4.4 9.1 22.0 39.2 54.4
Скорость последовательного чтения в режиме прямого ввода-вывода
Кб/с 7258 14499 28504 30946 32165
%CPU 1.6 3.2 10.0 20.9 24.5

Обзор

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

В каких программах имеет смысл применять режим прозрачного ввода-вывода? Прежде всего это программы, выполняющие большое число операций дискового ввода-вывода, которые медленно выполняются из-за нехватки ресурсов процессов. Кроме того, это могут быть "вычислительные" программы, выполняющие большое число операций ввода-вывода с последовательным доступом к данным. Режим прозрачного ввода-вывода не рекомендуется применять для приложений, считывающих и записывающих небольшие объемы данных, так как в этом режиме не применяются алгоритмы упреждающего чтения и отложенной записи. Режим прозрачного ввода-вывода может применяться и в приложениях, работающих с логическими томами с чередованием данных.


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