Рекомендации по производительности для транзакционной 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 для операций с метаданными файловой системы (например, создание, перемещение и добавление) сравнима с производительностью операций ввода-вывода в больших транзакциях без транзакций.