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

Синхронизацию файлов можно выполнить несколькими способами.

Файловые операции ввода-вывода JFS, которые не накапливаются последовательно в памяти при соблюдении определенных условий:

  • Список свободных страниц сокращается minfree, и осуществляется замена страницы.
  • Демон syncd вызвал команду выгрузки страниц на диск.
  • Вызвана команда sync.
  • Функция произвольной отложенной записи выгружает страницы на диск, так как достигнут порог выгрузки.

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

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

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

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

Переменные синхронизации JFS2

Операция синхронизации файловой системы не может быть эффективна при случайной операции ввода-вывода большого файла. При выполнении синхронизации блокируются все операции чтения и записи в файл из пользовательских программ. Для многих измененных страниц в файле требуется значительное количество времени для завершения записи на диск. В таких случаях могут использоваться следующие параметры настройки JFS2:
  • j2_syncPageCount: Ограничивает количество измененных страниц, которые планируется записать в файл в один проход при синхронизации. При установке этой переменной файловая система записывает указанное количество страниц без блокировки ввода-вывода остальной части файла. Вызов синхронизации повторяет операции записи до тех пор, пока все измененные страницы не будут записаны.
  • j2_syncPageLimit: Переопределяет параметр j2_syncPageCount при достижении порогового значения. Этот параметр обеспечивает выполнение операции синхронизации для файла. Переменные сохраняются стандартным способом.

Переменные обрабатываются с помощью команды ioo.

Переменные j2_syncPageCount и j2_syncPageLimit добавляются в список значений, которые управляются командой ioo.

Можно использовать флаг –o для отображения или изменения значения и флаг –h для просмотра справки.
# ioo –h j2_syncPageCount
Задает максимальное количество измененных страниц файла, которые записываются на диск, путем синхронизации системного вызова за одну операцию.

Значения: Значение по умолчанию: 0 Диапазон: 0-65536

Тип: Динамический

Единица измерения: Страницы 4 Кб

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

# ioo –h j2_syncPageLimit
Переменная j2_syncPageCount, задающая максимальное количество системных вызовов синхронизации, используется для ограничения количества записываемых страниц, что повышает производительность операции синхронизации.

Значения: Значение по умолчанию: 256 Диапазон: 16-65536

Тип: Динамический

Единица измерения: Число

Настройка: Имеет значение, если переменная j2_syncPageCount задана и может быть увеличено, если изменение j2_syncPageCount не дает должного эффекта. Допустимые значения должны быть в интервале от 250 до 8000. Переменная j2_syncPageLimit игнорируется, если значение переменной j2_syncPageCount равно 0.

Эта переменная может быть задана, если значение переменной j2_syncPageCount отлично от 0, и может быть увеличена таким образом, чтобы воздействие от изменения переменной j2_syncPageCount не привело к увеличению времени отклика приложения.

Значения должны быть в интервале от 1 до 8000. Оптимальные значения для этих переменных зависят от объема памяти и пропускной способности ввода/вывода. В качестве нейтрального можно использовать значение 256 для обеих переменных.

Период синхронизации и параллелизм JFS2

Синхронизацией файловой системы управляет демон sync (syncd). Настраиваемые параметры JFS2 позволяют файловой системе обрабатывать синхронизацию без применения команды syncd.

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

Следующие настраиваемые параметры применяются для синхронизации файловой системы JFS2:

j2_syncByVFS:
Разрешает применение обработчика синхронизации JFS2 и задает интервал между операциями синхронизации для каждой файловой системы.
j2_syncConcurrency:
Задает число нитей, обрабатывающих синхронизацию файловой системы. Это значение задает число файловых систем для параллельного выполнения операции синхронизации. В отдельной файловой системе операцию синхронизации выполняет только одна нить.

Команда ioo управляет параметрами ввода-вывода. Дополнительная информация приведена в описании команды ioo.

# ioo –h j2_syncByVFS

Назначение: задает число секунд ожидания между системными вызовами синхронизации в файловой системе JFS2. Это значение заменяет значение, указанное в команде syncd.

Значения: значение по умолчанию: 0, диапазон: 0-86400.

Тип: динамический

Единицы измерения: секунды.

Тонкая настройка: задает число секунд между итерациями процесса синхронизации. Обработчик синхронизации JFS2 ожидает в течение времени, указанного в параметре j2_syncByVFS, перед вызовом процедуры syncvfs для файловых систем JFS2. Значение 0 указывает, что следует использовать обычную обработку syncd. Отличное от нуля значение, переопределяет время, указанное в команде syncd, и разрешает применение обработчика синхронизации JFS2.

# ioo –h j2_syncConcurrency

Назначение: Задает число потоков для операций синхронизации JFS2.

Значения: значение по умолчанию: 1, диапазон: 1-128.

Тип: динамический

Единица измерения: число

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