Mal rendimiento de NTFS

21

¿Por qué el rendimiento de NTFS es tan malo en comparación con, por ejemplo, Linux / ext3? Muy a menudo veo esto cuando reviso árboles fuente (grandes) de Subversion. El proceso de pago lleva alrededor de 10-15 minutos en NTFS, mientras que el pago correspondiente en Linux (en hardware casi idéntico) toma un orden de magnitud más rápido (1 - 1.5 minutos).

Tal vez esto sea específico para manejar muchos archivos pequeños y NTFS es mejor cuando se trata de archivos grandes, pero ¿por qué debería ser eso? ¿No mejoraría enormemente el rendimiento de NTFS para archivos pequeños para el rendimiento de Windows en general?

EDITAR: Esto no se entiende como una pregunta inflamatoria "NTFS apesta en comparación con ext3"; Estoy realmente interesado en por qué NTFS funciona mal en ciertos casos. ¿Es solo un mal diseño (que dudo), o hay otros problemas que entran en juego?

JesperE
fuente
44
Quizás esto podría reformularse para que se pregunte cómo mejorar el rendimiento de NTFS cuando se trata con muchos archivos pequeños, en lugar de preguntar por qué NTFS apesta en comparación con ext3.
ChrisInEdmonton
De acuerdo con @Chris, esta pregunta no tiene sentido tal como está.
Sasha Chedygov
44
Bueno, estoy realmente interesado en saber por qué NTFS está funcionando mal. Si la respuesta es "haz X para hacerlo más rápido", entonces genial, pero me conformaría con entender el problema.
JesperE el
Ah, está bien, perdón por malinterpretarte.
Sasha Chedygov
2
Por cierto, cuando estaba usando SVN en una máquina con Windows, ¿esa máquina tenía un escáner de virus con protección en tiempo real habilitada? Eso puede ser malo.
dlamblin

Respuestas:

35

NTFS tiene esta cosa llamada tabla maestra de archivos . Suena genial cuando lo lees.

Puede ver que ext3 funciona bien hasta aproximadamente el 95% del uso del disco, mientras que la existencia de la MFT significa que NTFS realmente no quiere que use más del 90% de su disco. Pero supongo que ese no es su problema, y ​​que su problema es con las muchas operaciones en muchos archivos pequeños.

Una de las diferencias aquí es lo que sucede cuando crea un archivo pequeño. Si un archivo es más pequeño que un tamaño de bloque, no se escribe en su propio bloque, sino que se almacena en la MFT. Esto es bueno si el archivo permanece exactamente como estaba cuando se creó. Sin embargo, en la práctica, significa que cuando svn toca un archivo para crearlo, luego lo agrega, lo elimina o simplemente lo modifica no lo suficiente como para moverlo a su propio bloque, la operación es bastante lenta. Además, solo leer muchos archivos pequeños pone un poco de estrés en el MFT donde residen todos, con múltiples por bloque. ¿Por qué haría esto? Evita de manera preventiva la fragmentación y usa más bloques de manera más efectiva, y en general eso es algo bueno.

Por el contrario, en ext2 y 3, los bloques de archivos para cada archivo se almacenan al lado de donde están los metadatos del directorio para el directorio en el que están (cuando sea posible, si su disco no está fragmentado y tiene aproximadamente un 20% de espacio libre). Esto significa que a medida que svn está abriendo directorios, varios bloques se almacenan en caché básicamente de forma gratuita en ese caché de 16 MB en su unidad, y luego nuevamente en el caché del núcleo. Esos archivos pueden incluir el archivo .svn y los archivos de revisión para su última actualización. Esto es útil ya que es probable que algunos de los archivos que svn esté analizando a continuación. NTFS no puede hacer esto, aunque grandes partes de la MFT deben almacenarse en caché en el sistema, es posible que no sean las partes que desea a continuación.

dlamblin
fuente
2
Tiene razón en que aquí es donde viven los archivos pequeños, pero no estoy seguro de por qué esto debería estresar la MFT. ¿No sería mucho más fácil leer estos archivos, ya que está casi garantizado que extraiga muchos de estos archivos en la memoria caché cuando extraiga alguno de ellos?
ChrisInEdmonton
1
@ChrisInEdmonton Son las actualizaciones de la MFT lo que lo enfatiza, porque no estás tocando bloques donde hay espacio disponible, terminas moviendo cosas y también invalidando las partes en caché de la MFT. Te concederé que, en papel, la MFT debería ser una forma muy rápida de manejar archivos pequeños. Simplemente no se confirma en la práctica.
dlamblin
6

Bueno, tu problema particular es porque

  1. Subversion en sí proviene del mundo UNIX, por lo tanto, la versión de Windows asume características de rendimiento similares.
  2. El rendimiento de NTFS realmente no es excelente con miles de millones de archivos pequeños.

Lo que está viendo es simplemente un artefacto de algo diseñado para un sistema operativo particular con supuestos de rendimiento en esos sistemas operativos. Esto generalmente se descompone mal, cuando se lo lleva a otros sistemas. Otros ejemplos serían bifurcación vs. roscado. En UNIX-like, la forma tradicional de paralizar algo es simplemente generar otro proceso. En Windows, donde los procesos tardan al menos cinco veces más en iniciarse, esta es una muy mala idea.

En general, no puede simplemente tomar cualquier artefacto de un sistema operativo particular para otorgarlo a otro con una arquitectura muy diferente. Además, no olvide que NTFS tiene muchas características del sistema de archivos que estaban ausentes en los sistemas de archivos UNIX ampliamente utilizados en ese momento, como el registro en diario y las ACL. Esas cosas tienen un costo.


Algún día, cuando tengo mucho tiempo libre, estaba planeando escribir un módulo de sistema de archivos SVN que aproveche las funciones que tiene en NTFS, como el soporte de transacciones (debería eliminar el "problema de tocar millones de archivos pequeños") y datos alternativos flujos (debería eliminar la necesidad del .svndirectorio separado ). Sería bueno tenerlo, pero dudo que los desarrolladores de SVN puedan implementar tales cosas en el futuro previsible.

Nota al margen: una sola actualización en un gran repositorio SVN que estoy usando tomó alrededor de 250,000 operaciones de archivo. Una pequeña voz me dice que esto es realmente para 24 archivos que cambiaron ...

Joey
fuente
1
Pero, ¿por qué el rendimiento de NTFS es malo cuando se trata de miles de archivos pequeños? ¿Eso tuvo que ser sacrificado para obtener algo más?
JesperE el
3

Aquí está la información de Microsoft sobre cómo funciona NTFS. Puede ser excesivo para lo que está buscando, pero estudiarlo puede arrojar algo de luz sobre los escenarios con los que NTFS tiene problemas.

Kenneth Cochran
fuente