¿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?
fuente
Respuestas:
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.
fuente
Bueno, tu problema particular es porque
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
.svn
directorio 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 ...
fuente
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.
fuente