Поделиться через


Рекомендации по производительности для транзакционных NTFS

Транзакционный NTFS (TxF) тщательно разработан для повышения производительности и обычно будет работать лучше, чем варианты транзакций общего назначения в аналогичных сценариях. Однако транзакции файловой системы имеют больше накладных расходов, чем операции без транзакций, и некоторые сокращения производительности операций ввода-вывода по сравнению с непередаченными операциями ввода-вывода должны быть ожидаемыми. Критически важные для производительности приложения должны выполнять цикл квалификации внедрения технологии, оценивая влияние на производительность транзакций файловой системы.

Обзор операций TxF

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

Общие сведения о том, как работает TxF, выглядит следующим образом:

  • По мере выполнения транзакций TxF записывает отмена записей в файл журнала для каждой изменения, вносимой в файловую систему. Если происходит прерывание, эти записи отмены анализируются, чтобы вернуть файловую систему в состояние, которое было до начала транзакции.
  • Изменение метаданных отмены записи описывает изменение только метаданных файловой системы. Ниже приведены некоторые примеры перемещения, переименования, добавления и изменения атрибутов. Для отмены изменений метаданных все сведения, необходимые для отмены изменения, хранятся в записи и хранятся в файле журнала.
  • Запись отмены перезаписи описывает перезапись части файла. Когда происходит перезапись файла, исходное содержимое файла хранится в специальном файле отмены в скрытом каталоге, а запись отмены перезаписи указывает на этот файл. Когда обновления файлов в конечном итоге удаляются из кэша на диск, содержимое файла отмены также должно быть удалено, поэтому перезапись транзакционного файла может создать до двух дополнительных случайных операций ввода-вывода: один для чтения старых данных и одного для записи в файл отмены. Эти дополнительные операции ввода-вывода являются затратами на производительность TxF.
  • При возникновении фиксации TxF сначала сбрасывает все сведения об отмене, а затем очищает фактические изменения файла, а затем записывает и очищает запись фиксации. Если нет файлов отмены для очистки, единственным дополнительным объемом расходов TxF относительно нераспределенного ввода-вывода является очистка журналов. Однако очистка журналов приводит к эффективной последовательной записи больших объемов, поэтому затраты на производительность минимальны.
  • TxF оптимизирован для фиксации. Ожидается, что большинство транзакций будут успешными и не нужно откатить, поэтому все записи отмены для транзакции, как ожидается, будут неиспользуются. С точки зрения производительности операции фиксации TxF являются быстрыми и откаты являются ресурсоемкими.
  • Откат является более ресурсоемким, чем фиксация. Во время отката все изменения, внесенные в транзакцию, должны быть не выполнены. Как правило, длительность отката может быть примерно той же, что и для первоначального внесения изменений. Например, если потребовалось 1 секунда, чтобы внести все изменения, это может занять около 1 секунды, чтобы отменить их. Для очень длительных транзакций откат может создать дополнительные последствия для производительности. Например, время загрузки системы может быть отложено, если система должна автоматически откатить транзакцию в том случае, если система перестает отвечать на запросы и должна выполнять незапланированную перезагрузку.

Сводные выводы о производительности, которые можно извлечь из предыдущего списка, приведены ниже.

  • Затраты на производительность TxF для транзакций, связанных с перезаписями файлов, могут быть значительными.
  • Затраты на производительность TxF для транзакций, связанных только с операциями метаданных, могут быть относительно низкими, при условии, что используются большие транзакции. Большая транзакция заключается в наличии большого количества записей отмены для каждой записи фиксации.

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

Амортизируйте затраты TxF над большими транзакциями. Например, если у вас есть наборы изменений N, чтобы внести изменения, в которых каждое изменение имеет шаги M, и вы можете выполнить это так, как N транзакций M каждый шаг или сделать это как отдельную транзакцию с M*N, последний вариант будет более эффективным.

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

Сохраняйте транзакции в основном для операций метаданных. Это то, что TxF оптимизировано для больших транзакций метаданных и, как правило, производительность примерно такая же, как и для больших транзакций метаданных. Примерами эффективных функций TxF метаданных являются MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted, а также добавлена запись (вызовы функции WriteFile, когда указатель файла, как в конце файла, или EOF). Примером операций с ресурсоемкими не метаданными являются вызовы функции WriteFile, если указатель файла не находится в EOF.

Сводка по ожиданиям производительности TxF

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