Número de archivos por directorio

19

Tengo un directorio con aproximadamente 100000 archivos pequeños (cada archivo es de 1-3 líneas, cada archivo es un archivo de texto). En tamaño, el directorio no es muy grande (<2GB). Estos datos viven 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 desde un archivo abierto, cerrar un archivo, son muy lentos. En bash ls, du, etc. no funcionan.

La pregunta es:

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

carlosdc
fuente
66
Su pregunta directa fue bien respondida por Giles, pero en general, los sistemas de archivos de Linux son malos sustitutos de las bases de datos cuando usa nombres de archivos como claves para pequeños fragmentos de datos. Usted no controla la generación, pero puede procesar posteriormente los datos en una forma más susceptible de análisis; si no lo hace, pagará los gastos generales del sistema de archivos en cada paso. Puede reducir la sobrecarga, pero podría ser más feliz si la elimina.
msw
Además, vea este stackoverflow.com/questions/466521/…
Cristi el

Respuestas:

22

Como supones, depende de muchas cosas, principalmente el tipo de sistema de archivos y las opciones y, en cierta medida, la versión del kernel. En la serie ext2 / ext3 / ext4, hubo una mejora importante cuando dir_indexapareció 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 a través de NFS, pero si tiene algún contacto con los administradores, puede pedirles que se ejecuten tune2fs -l /dev/something |grep features(¿tal vez incluso convencerlos de que actualicen?). Solo importa la cantidad de archivos, no su tamaño.

Incluso con dir_index100000 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_indexy 20000 con dir_indexo reiserfs. Si no puede controlar cómo se crean los archivos, muévalos a directorios separados antes de hacer cualquier otra cosa.

Gilles 'SO- deja de ser malvado'
fuente