Rendimiento lento en la unidad NTFS con gran cantidad de archivos

11

Estoy mirando esta configuración:

  • Windows Server 2012
  • Unidad NTFS de 1 TB, clústeres de 4 KB, ~ 90% lleno
  • ~ 10 millones de archivos almacenados en 10,000 carpetas = ~ 1,000 archivos / carpeta
  • Archivos en su mayoría bastante pequeños <50 KB
  • Unidad virtual alojada en una matriz de discos

Cuando una aplicación accede a archivos almacenados en carpetas aleatorias, tarda entre 60 y 100 ms en leer cada archivo. Con una herramienta de prueba, parece que el retraso se produce al abrir el archivo. Leer los datos solo toma una fracción del tiempo.

En resumen, esto significa que leer 50 archivos puede tomar fácilmente 3-4 segundos, lo que es mucho más de lo esperado. La escritura se realiza por lotes, por lo que el rendimiento no es un problema aquí.

Ya seguí consejos sobre SO y SF para llegar a estos números.

¿Qué hacer con los tiempos de lectura?

  • Considere 60-100 ms por archivo como correcto (no lo es, ¿verdad?)
  • ¿Alguna idea de cómo se puede mejorar la configuración?
  • ¿Existen herramientas de monitoreo de bajo nivel que puedan indicar en qué tiempo se dedica exactamente?

ACTUALIZAR

  1. Como se menciona en los comentarios, el sistema ejecuta Symantec Endpoint Protection. Sin embargo, deshabilitarlo no cambia los tiempos de lectura.

  2. PerfMon mide 10-20 ms por lectura. Esto significaría que cualquier lectura de archivo requiere ~ 6 operaciones de lectura de E / S, ¿verdad? ¿Sería esta búsqueda de MFT y verificaciones de ACL?

  3. El MFT tiene un tamaño de ~ 8.5 GB, que es más que la memoria principal.

Paul B.
fuente
Para descartar algo, ¿te importaría compartir una captura de pantalla de RAMMap ?
Tomas Dabasinskas
¿Te refieres a la tabla Resumen de archivos? Ahora que lo menciona, veo un archivo SYMEFA.DB con 900 MB de memoria que me recuerda que Symantec Endpoint Protection está instalado en el sistema. Tal vez ese es el culpable? Trataré de averiguar más.
Paul B.
En realidad, estaba más interesado en el uso de metarchivos
Tomas Dabasinskas, el
Ok lo tengo. El metarchivo muestra 250 MB en total, 40 activos, 210 en espera. Parece normal o no?
Paul B.
Sí, parece que sí
Tomas Dabasinskas

Respuestas:

5

El servidor no tenía suficiente memoria. En lugar de almacenar en caché los datos del metarchivo NTFS en la memoria, cada acceso a archivos requería múltiples lecturas de disco. Como de costumbre, el problema es obvio una vez que lo ves. Permítanme compartir lo que nubló mi perspectiva:

  • El servidor mostró 2 GB de memoria disponible tanto en el Administrador de tareas como en RamMap. Entonces, Windows decidió que la memoria disponible no era suficiente para contener una parte significativa de los datos del metarchivo. O alguna restricción interna no permite utilizar el último bit de memoria para datos de metarchivo.

  • Después de actualizar el Administrador de tareas RAM no mostraría más memoria en uso. Sin embargo, RamMap informó que varios GB de datos de metarchivos se mantienen como datos en espera. Aparentemente, los datos en espera pueden tener un impacto sustancial.

Herramientas utilizadas para el análisis:

  • fsutil fsinfo ntfsinfo driveletter:para mostrar el tamaño NTFS MFT (o NTFSInfo )
  • RamMap para mostrar la asignación de memoria
  • Monitor de proceso para mostrar que cada lectura de archivo está precedida por aproximadamente 4 operaciones de lectura para conducir: \ $ Mft y conducir: \ $ Directorio. Aunque no pude encontrar la definición exacta de $ Directory, parece estar relacionado también con el MFT .
Paul B.
fuente
Entonces, ¿aumentar la memoria física mejoró los tiempos de respuesta? ¿No configuró ninguna configuración de registro?
D-Klotz
1
Si. Anteriormente había jugado con la configuración del registro. Pero al final no fue necesario ningún cambio después de agregar memoria.
Paul B.
La memoria en espera son regiones de memoria que están listas para que las utilicen los programas. Pero como todavía no se usan, el sistema operativo los utilizará como caché. Una vez que cualquier programa necesita que la memoria que va a ser liberado de inmediato
phuclv