it-swarm-es.tech

Número de archivos por directorio

Tengo un directorio con aproximadamente 100000 archivos pequeños (cada archivo es de 1-3 líneas, cada archivo es un archivo de texto). El tamaño del directorio no es muy grande (<2GB). Estos datos residen en un servidor NFS administrado profesionalmente. El servidor ejecuta Linux. Creo que el sistema de archivos es ext3, pero no estoy seguro. Además, no tengo acceso de root al servidor.

Estos archivos son el resultado de un experimento científico a gran escala, sobre el cual no tengo control. Sin embargo, tengo que analizar los resultados.

Cualquier operación/procesamiento de E/S en este directorio es muy, muy lento. Abrir un archivo (fopen en python), leer de un archivo abierto, cerrar un archivo, son todos muy lentos. En bash ls, du, etc. no funcionan.

La pregunta es:

¿Cuál es la cantidad máxima de archivos en un directorio en Linux de tal manera que sea práctico hacer procesamiento, fopen, lectura, etc.? Entiendo que la respuesta depende de muchas cosas: tipo de fs, versión del kernel, versión del servidor, hardware, etc. Solo quiero una regla general, si es posible.

18
carlosdc

Como supondrá, depende de muchas cosas, principalmente el tipo y las opciones del sistema de archivos y, hasta cierto punto, la versión del kernel. En la serie ext2/ext3/ext4, hubo una mejora importante cuando el dir_index apareció la opción (algún tiempo después del lanzamiento inicial de ext3): hace que los directorios se almacenen como árboles de búsqueda (acceso de tiempo logarítmico) en lugar de listas lineales (acceso de tiempo lineal). Esto no es algo que pueda ver en NFS, pero si tiene algún contacto con los administradores, puede pedirles que ejecuten tune2fs -l /dev/something |grep features (¿quizás incluso convencerlos de actualizar?). Solo importa la cantidad de archivos, no su tamaño.

Incluso con dir_index, 100000 se siente grande. Idealmente, obtenga los autores del programa que crea los archivos para agregar un nivel de subdirectorios. Para no degradar el rendimiento, recomendaría un límite de aproximadamente 1000 archivos por directorio para ext2 o ext3 sin dir_index y 20000 con dir_index o reiserfs. Si no puede controlar cómo se crean los archivos, muévalos a directorios separados antes de hacer cualquier otra cosa.