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.
fuente
Respuestas:
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_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 a través de NFS, pero si tiene algún contacto con los administradores, puede pedirles que se ejecutentune2fs -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_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 sindir_index
y 20000 condir_index
o reiserfs. Si no puede controlar cómo se crean los archivos, muévalos a directorios separados antes de hacer cualquier otra cosa.fuente