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.