Les performances d'EXT4 sont devenues vraiment mauvaises sur le système avec beaucoup de petits fichiers

10

J'ai un petit appareil intégré qui n'a que 128 Mo de RAM

attaché à cet appareil est un disque dur USB2 de 2 To

Je suis très satisfait des performances de l'appareil jusqu'à récemment, lorsque le nombre de fichiers a franchi un seuil de la capacité du disque a franchi un seuil (je ne sais pas lequel)

sur le disque se trouvent de nombreux petits fichiers, en raison de la nature de l'écriture, les fichiers d'application sont organisés de manière très équilibrée - aucun répertoire de nœud feuille ne contient plus de 200 fichiers et il y a un peu plus de 800 000 fichiers.

J'espère avoir une piste sur quelque chose à enquêter. Les performances du disque ont chuté de manière significative, l'appareil fonctionnait assez bien et puis soudain, les performances ont chuté comme une roche.

Mon hypothèse est que la structure organisationnelle que j'ai choisie sur le disque pour mes fichiers a en quelque sorte nui à la capacité des caches d'inode à rester dynamique.

à titre d'expérience, j'ai démonté le disque (vidage des caches, vérifié avec gratuit). Puis, à partir d'une invite de commande, j'ai parcouru profondément la structure du répertoire. Tout compte fait, ce répertoire (et ses enfants) ne contenait qu'environ 3200 fichiers, et à ce stade, «libre» affichait> 117 Mo de mémoire libre

à ce stade, j'ai tapé la commande «trouver» suivie de «libre»

'find' a montré environ 3000 fichiers, mais l'utilisation de la mémoire est passée de ~ 117 Mo à ~ 2 Mo

Je comprends les équilibres du cache par rapport à la mémoire libre, et comment le noyau considère une page vide comme une mauvaise page - cependant 115 Mo de contenu mis en cache à partir d'un répertoire de 3000 fichiers indiquent une grave lacune dans ma compréhension. J'espère que quelqu'un m'aidera à comprendre ce qui se passe

puis-je supposer qu'un arbre équilibré est la voie à suivre pour avoir beaucoup de fichiers?

coincé
la source

Réponses:

9

Très bonne description du problème.

Sur la base de ce que vous avez dit, je pense que ce que vous voyez, c'est que l'utilisation des dalles augmente. Une bonne expérience serait de courir un cat /proc/meminfoet cat /proc/slabinfoplus d' un délai de 3 secondes pendant que vous allez profondément dans la hiérarchie fs et découvrir les 3000 fichiers. Ce qui se passe essentiellement, c'est que le noyau traverse la structure fs et analyse les fichiers individuels et leurs inodes et tous sont stockés en mémoire. Si vous cochez, /proc/slabinfovous verrez un objet appelé ext4_inode_cachequi vous indiquera la quantité de mémoire que chaque inode prendra. Multipliez cela par le nombre d'objets (obj_size * no_obj) et vous obtenez la quantité de mémoire utilisée par l'objet. Plus vous vous enfoncez dans la hiérarchie fs, plus la mémoire sera consommée jusqu'à ce que le système atteigne le haut filigrane de la zone de mémoire. À ce moment, le noyau commencera à récupérer.

Si vous piquez dans meminfo et slabinfo, vous obtiendrez les détails que vous recherchez. Si vous voulez que je regarde, collez-le;)

Soham Chakraborty
la source