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.
- Uso de carpetas para reducir la cantidad de archivos por carpeta ( Almacenamiento de un millón de imágenes en el sistema de archivos )
- Ejecutar
contig
para desfragmentar carpetas y archivos ( /programming//a/291292/1059776 ) - 8.3 nombres y último tiempo de acceso deshabilitado ( Configuración del sistema de archivos NTFS para el rendimiento )
¿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
Como se menciona en los comentarios, el sistema ejecuta Symantec Endpoint Protection. Sin embargo, deshabilitarlo no cambia los tiempos de lectura.
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?
El MFT tiene un tamaño de ~ 8.5 GB, que es más que la memoria principal.
fuente
Respuestas:
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 )fuente