22 votos

El mal rendimiento de NTFS

¿Por qué es que el rendimiento de NTFS es tan pésimo en comparación con, por ejemplo, Linux/ext3? Más a menudo veo esto cuando de la comprobación hacia fuera (grande) árboles de código fuente de Subversion. Checkout tarda unos 10-15 minutos en NTFS, mientras que los correspondientes checkout en Linux (en casi idéntico hardware) tiene un orden de magnitud más rápido (1 - 1,5 minutos).

Tal vez esto es específico para el manejo de gran cantidad de archivos pequeños y NTFS es mejor cuando se trata de archivos de gran tamaño, pero ¿por qué tendría que ser? No mejora el rendimiento de NTFS para archivos pequeños ser enormemente beneficiosa para el rendimiento de Windows en general?

EDIT: Esto no se entiende como un "NTFS chupa en comparación con ext3" inflamatoria pregunta; yo estoy genuinamente interesado en por qué NTFS realiza mal en ciertos casos. Es sólo un mal diseño (que lo dudo), o hay otras cuestiones que entran en juego?

36voto

JoelB Puntos 84

NTFS tiene esta cosa que se llama una Tabla Maestra de Archivos. Suena realmente genial cuando usted lea acerca de él.

Se puede ver que ext3 realiza bien hasta aproximadamente el 95% de uso de disco, mientras que la existencia de la MFT significa que NTFS realmente no quieren que usted utilice más de un 90% de su disco. Pero voy a suponer que no es su problema, y que su problema es con la cantidad de operaciones que en muchos archivos pequeños.

Una de las diferencias aquí es lo que ocurre cuando se crea un pequeño archivo. Si un archivo es más pequeño que el tamaño de bloque, no está escrito para su propio bloque, sino que se almacena en la MFT. Esto es bueno si el archivo permanece exactamente de la manera que fue cuando se creó. En la práctica, esto significa que cuando svn toca un archivo a crear, a continuación, añade a ese archivo, elimina, o simplemente modifica no lo suficiente como para moverse a su propio bloque, la operación es bastante lento. También acabo de leer un montón de pequeños archivos que pone algo de tensión en la MFT donde ellos residen, con múltiplos por bloque. ¿Por qué iba a hacerlo? Es de forma preventiva, evitando la fragmentación y el uso de más de los bloques de manera más efectiva, y en general eso es una buena cosa.

En ext2 y 3 por el contrario, los bloques del archivo para todos los archivos se almacenan junto a donde el directorio es de metadatos para el directorio en el que estás (cuando es posible, si tu disco es sin fragmentar y tiene alrededor de 20% de espacio libre). Esto significa que como svn es la apertura de directorios, un número de bloques se almacenan en caché básicamente gratis en caché de 16 mb en el disco y, a continuación, de nuevo en el núcleo del caché. Estos archivos pueden incluir la .svn archivo y la revisión de los archivos de su última actualización. Esto es útil ya que aquellos que es probable que algunos de los archivos svn está buscando en siguiente. NTFS no llegar a ello, a pesar de que gran parte de la MFT deben ser almacenados en memoria caché en el sistema, puede ser que no sean las piezas que desea siguiente.

8voto

rikket Puntos 208

Aquí Microsoft información sobre cómo NTFS funciona. Puede que sea excesivo para lo que usted está buscando, pero su estudio puede arrojar algo de luz sobre qué escenarios NTFS tiene problemas con.

6voto

psur Puntos 743

Así, su problema en particular es porque

  1. Subversion sí viene desde el mundo UNIX, la versión de Windows, por lo tanto asume características de rendimiento similares.
  2. El rendimiento de NTFS realmente no es muy grande con enormes cantidades de archivos pequeños.

Lo que estamos viendo es simplemente un artefacto de algo diseñado para un sistema operativo particular con el rendimiento de los supuestos en que los sistemas operativos. Esto generalmente se rompe mal, cuando se toma con otros sistemas. Otros ejemplos serían la bifurcación vs roscado. En UNIX-le gusta la forma tradicional de parallizing es algo que sólo a generar otro proceso. En Windows, donde los procesos de tomar al menos cinco veces más de tiempo de inicio, esta es una idea realmente mala.

En general, usted no puede simplemente tomar todos los artefactos de un determinado sistema operativo para ser concedida en cualquier otro con muy diferentes de la arquitectura. También no se olvide que NTFS tiene muchas características del sistema de archivos que estaban ausentes en los sistemas de archivos UNIX ampliamente en uso en ese momento, tales como el diario y la Acl. Esas cosas tienen un costo.


Algún día, cuando tengo un montón de tiempo libre, yo tenía la intención de escribir un SVN sistema de ficheros del módulo que aprovecha la ventaja de las características que tienen en NTFS, como soporte de transacciones (debe eliminar el "tocar a millones de pequeños archivos problema") y secuencias de datos alternativas (debería eliminar la necesidad de los independientes .svn directorio). Sería una buena cosa, pero dudo que el SVN devs recibirá alrededor de la implementación de tales cosas en el futuro previsible.

Nota: Una sola actualización en un gran repositorio SVN estoy usando tomó alrededor de 250.000 operaciones de archivo. Algunos vocecita me dice que esto es realmente mucho para 24 de los archivos que han cambiado ...

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: