El rendimiento EXT4 se ha vuelto realmente malo en el sistema con muchos archivos pequeños

10

Tengo un pequeño dispositivo integrado que solo tiene 128 MB de RAM

conectado a este dispositivo hay un disco duro USB2 de 2TB

He estado muy contento con el rendimiento del dispositivo hasta hace poco cuando el número de archivos ha cruzado un umbral de la capacidad del disco ha cruzado un umbral (no estoy seguro de cuál)

En el disco hay muchos archivos pequeños, debido a la naturaleza de la escritura, los archivos de la aplicación están organizados de manera muy equilibrada : ningún directorio de nodo de hoja tiene más de 200 archivos y hay poco más de 800,000 archivos.

Espero obtener una pista sobre algo para investigar. El rendimiento del disco ha disminuido significativamente, el dispositivo estaba funcionando bastante bien y, de repente, el rendimiento cayó como una roca.

Mi suposición es que la estructura organizativa que he elegido en el disco para mis archivos ha dañado de alguna manera la capacidad de los cachés de inodo para mantenerse enérgico.

Como experimento, desmonté el disco (enjuagando cachés, verificado con gratis). Luego, desde un símbolo del sistema, navegué profundamente en la estructura del directorio. En total, este directorio (y sus elementos secundarios) solo tenía unos 3200 archivos contenidos debajo, y en este punto 'libre' mostraba> 117 MB de memoria libre

en este punto, escribí el comando 'buscar' seguido de 'gratis'

'find' mostró alrededor de 3000 archivos, pero el uso de memoria pasó de ~ 117MB a ~ 2MB

Entiendo el equilibrio de la memoria caché frente a la memoria libre, y cómo el kernel considera que una página vacía es una página incorrecta; sin embargo, 115 MB de contenido en caché de un directorio de 3000 archivos apunta a una seria brecha en mi comprensión. Espero que alguien me ayude a entender lo que está sucediendo.

¿Puedo suponer que un árbol equilibrado es el camino a seguir para tener muchos archivos?

atascado
fuente

Respuestas:

9

Muy buena descripción del problema.

Según lo que dijiste, creo que lo que estás viendo es que el uso de losas se está elevando. Un experimento sería buena para ejecutar una cat /proc/meminfoy cat /proc/slabinfomás de un segundo de retardo 3, mientras que uno se adentra en la jerarquía fs y descubrir los archivos de 3000. Lo que esencialmente está sucediendo es que el kernel atravesará la estructura fs y escaneará los archivos individuales y sus inodos y todos ellos se almacenarán en la memoria. Si marca /proc/slabinfo, verá un objeto llamado ext4_inode_cacheque le indica cuánta memoria tomará cada inodo. Multiplique esto con el no de objetos (obj_size * no_obj) y obtendrá la cantidad de memoria utilizada por el objeto. Cuanto más profundice en la jerarquía fs, más memoria se consumirá hasta que el sistema alcance la marca de agua más alta de la zona de memoria. En ese punto, el núcleo comenzará a reclamar.

Si ingresas a meminfo y slabinfo, obtendrás los detalles que estás buscando. Si quieres que mire, pégalo;)

Soham Chakraborty
fuente