Consideraciones de rendimiento para NTFS transaccional

NTFS transaccional (TxF) se ha diseñado cuidadosamente para el rendimiento y normalmente funcionará mejor que las alternativas transaccionales de uso general en escenarios similares. Sin embargo, las transacciones del sistema de archivos tienen más sobrecarga que las operaciones no transaccionadas y se espera una reducción del rendimiento de E/S en comparación con la E/S no transaccionada. Las aplicaciones críticas para el rendimiento deben realizar un ciclo de calificación de adopción de tecnología, evaluando el impacto en el rendimiento de las operaciones del sistema de archivos de transacción.

Información general sobre las operaciones txF

TxF usa el registro de deshacer para registrar los cambios necesarios para volver a colocar el sistema de archivos en un estado coherente, también denominado reversión, en caso de que se produzca una anulación de transacción. Este registro de deshacer genera E/S adicional y es el origen de la sobrecarga de rendimiento de TxF en comparación con las operaciones del sistema de archivos no transaccionales.

Un resumen general de cómo funciona TxF es el siguiente:

  • A medida que avanza una transacción, TxF escribe registros de deshacer en su archivo de registro para cada modificación que realiza en el sistema de archivos. Si se produce una anulación, estos registros de deshacer se analizan para volver a poner el sistema de archivos en el estado que estaba antes de que se iniciara la transacción.
  • Un registro de deshacer de cambio de metadatos describe un cambio solo a los metadatos del sistema de archivos. Algunos ejemplos de esto son los movimientos, los cambios de nombre, los anexos y los cambios de atributo. Para los registros de deshacer de cambios de metadatos, toda la información necesaria para deshacer el cambio se encuentra en el registro y se almacena en el archivo de registro.
  • Un registro de deshacer de sobrescritura describe una sobrescritura de una parte de un archivo. Cuando se produce una sobrescritura de un archivo, el contenido original del archivo se almacena en un archivo de deshacer especial en un directorio oculto y el registro de deshacer sobrescribir apunta a este archivo. Cuando las actualizaciones de archivos se vacían finalmente de la memoria caché al disco, el contenido del archivo de deshacer también debe vaciarse, por lo que un archivo de transacción sobrescribirá podría generar hasta dos operaciones de E/S aleatorias adicionales: una para leer los datos antiguos y otra para escribirla en el archivo de deshacer. Estas operaciones de E/S adicionales son un costo de rendimiento de TxF.
  • Cuando se produce una confirmación, TxF vacía primero toda la información de deshacer, luego vacía los cambios de archivo reales y, a continuación, escribe y vacía un registro de confirmación. Si no hay ningún archivo de deshacer para vaciar, la única sobrecarga de TxF adicional relativa a la E/S no transaccionada es que el registro se vacía por sí mismos. Sin embargo, los vaciados del registro dan lugar a escrituras secuenciales de gran tamaño eficaces, por lo que el costo de rendimiento es mínimo.
  • TxF está optimizado para la confirmación. Se espera que la mayoría de las transacciones se realicen correctamente y no necesiten revertirse, por lo que se espera que todos los registros de deshacer de una transacción no se usen. Desde una perspectiva de rendimiento, las operaciones de confirmación de TxF son rápidas y las reversiones consumen muchos recursos.
  • La reversión consume más recursos que la confirmación. Durante la reversión, todos los cambios realizados en la transacción deben cancelarse. En general, la duración de la reversión puede ser aproximadamente la misma que tardó en realizar los cambios originalmente. Por ejemplo, si tardó 1 segundo en realizar todos los cambios, podría tardar aproximadamente 1 segundo en deshacerlos. Para transacciones muy largas, la reversión puede crear impactos adicionales en el rendimiento. Por ejemplo, el tiempo de arranque del sistema se puede retrasar si el sistema debe revertir automáticamente una transacción en caso de que el sistema deje de responder y deba realizar un reinicio no programado.

Las conclusiones resumidas sobre el rendimiento que se pueden extraer de la lista anterior son las siguientes:

  • El costo de rendimiento de TxF para las transacciones que implican sobrescrituras de archivos puede ser significativo.
  • El costo de rendimiento de TxF para las transacciones que implican solo las operaciones de metadatos puede ser relativamente baja, siempre que se usen transacciones grandes. Una transacción grande es cuando hay muchos registros de deshacer para cada registro de confirmación.

Recomendaciones para obtener el mejor rendimiento

Amortizar la sobrecarga de TxF en transacciones más grandes. Por ejemplo, si tiene N conjuntos de cambios para realizar donde cada cambio tiene pasos M y tiene la opción de hacerlo como N transacciones de pasos M cada uno o hacerlo todo como una sola transacción con pasos M*N , la última opción sería más eficaz.

Tenga en cuenta el posible impacto en el arranque de transacciones muy grandes. Como se indicó anteriormente, la reversión puede ser lenta y retrasará el tiempo de arranque si el sistema necesita realizar reversiones automáticas como tiempo de arranque. Cuanto mayor sea la transacción, más tiempo será el retraso.

Mantenga las transacciones en la mayoría de las operaciones de metadatos. Esto es lo que TxF está optimizado para y, en general, el rendimiento es aproximadamente igual que la E/S de archivos no transaccionados para transacciones de metadatos grandes. Algunos ejemplos de funciones TxF de metadatos eficaces son MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted y escrituras anexadas (llamadas a la función WriteFile cuando el puntero de archivo como al final del archivo o EOF). Un ejemplo de operaciones que consumen muchos recursos que no son metadatos son llamadas a la función WriteFile cuando el puntero de archivo no está en el EOF.

Resumen de las expectativas de rendimiento de TxF

En el caso de las actualizaciones en contexto, las sobrescrituras en una sección de un archivo serán mucho más lentas que las E/S de archivos no transaccionadas, mientras que el rendimiento de TxF para las operaciones de metadatos del sistema de archivos (por ejemplo, crear, mover y anexar) es comparable a la E/S de archivos no transaccionada para transacciones grandes.