it-swarm-es.com

Bad NTFS Performance

¿Por qué es que el rendimiento de NTFS es tan pésimo en comparación con, por ejemplo, Linux/Ext3? La mayoría de las veces veo esto al revisar (grandes) árboles de origen de la subversión. El pago dura alrededor de 10-15 minutos en NTFS, mientras que el pago correspondiente en Linux (en un hardware casi idéntico) realiza 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 así? ¿No mejoraría el rendimiento de NTFS para que los archivos pequeños sean enormemente beneficiosos para el rendimiento de Windows en general?

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

22
JesperE

NTFS tiene esta cosa llamada A tabla de archivos maestros . Suena realmente genial cuando lees al respecto.

Puede ver que Ext3 realiza bien hasta aproximadamente el 95% de uso del disco, mientras que la existencia de MFT significa que NTFS realmente no quiere que use más del 90% de su disco. Pero asumiré que 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 creas un archivo pequeño. Si un archivo es más pequeño que un tamaño de bloque, no está escrito en su propio bloque, sino que se almacena en el MFT. Esto es bueno si el archivo permanece exactamente como fue creado. Sin embargo, en la práctica, significa que cuando SVN toca un archivo para crearlo, luego se agrega a ese archivo, elimina de él, o simplemente lo modifica por no es suficiente para moverlo a su propio bloque, la operación es bastante lenta. También solo leer muchos archivos pequeños pone un cierto estrés en el MFT, donde todos residen, con múltiplos por bloque. ¿Por qué lo haría esto? Está evitando de manera preventiva la fragmentación y el uso de más de los bloques de manera más efectiva, y en general, eso es algo bueno.

En EXT2 y 3 por contraste, los bloques de archivos para cada archivo se almacenan junto a donde se encuentra los metadatos de directorio para el directorio que están en (cuando sea posible, si su disco no está fragmentado y tiene aproximadamente un 20% de espacio libre). Esto significa que, ya que SVN está abriendo los directorios, varios bloques se almacenan en caché básicamente de forma gratuita en ese caché de 16 MB en su disco, y luego nuevamente en el caché del kernel. Esos archivos pueden incluir el archivo .svn y los archivos de revisión para su última actualización. Esto es útil, ya que esos es probable que algunos de los archivos SVN estén mirando a continuación. NTFS no puede hacer esto, aunque las partes grandes del MFT deben almacenarse en caché en el sistema, es posible que no sean las partes que querrá a continuación.

36
dlamblin

Bueno, tu problema particular es porque

  1. La propia subversión proviene del mundo de UNIX, la versión de Windows, por lo tanto, asume características de rendimiento similares.
  2. El rendimiento de NTFS realmente no es genial con las gazillones de archivos pequeños.

Lo que está viendo es simplemente un artefacto de algo diseñado para un sistema operativo en particular con supuestos de rendimiento en ese sistema operativo. Esto generalmente se rompe mal, cuando se lleva a otros sistemas. Otros ejemplos serían bifurcando frente a roscado. En Unix, le gusta la forma tradicional de paralizar algo es solo para generar otro proceso. En Windows, donde los procesos toman al menos cinco veces más tiempo para comenzar, esta es una mala idea.

En general, no puede simplemente tomar ningún artefacto de un sistema operativo en particular que se otorgue en ningún otro con una arquitectura de gran diferente. Además, no olvide que NTFS tiene muchas características del sistema de archivos que estaban ausentes en los sistemas de archivos de UNIX ampliamente en uso en ese punto, como diario y ACL. Esas cosas vienen a un costo.


Algún día, cuando tengo mucho tiempo libre, planeaba escribir un módulo de sistema de archivos SVN, que aprovecha las características que tiene en NTF, como el soporte de transacciones (debe eliminar el "Touching Millions of Small Archivos") y los datos alternativos Streams (debe eliminar la necesidad de los separados .svn directorio). Sería una cosa agradable para tener, pero dudo que los desarrolladores de SVN continúen implementando tales cosas en el futuro previsible.

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

6
Joey

Aquí está Microsoft's Info sobre cómo funciona NTFS. Puede ser demasiado sobre lo que está buscando, pero estudiarlo puede arrojar algo de luz sobre los escenarios que tiene problemas.

3
Kenneth Cochran