Die EXT4-Leistung ist auf Systemen mit vielen kleinen Dateien sehr schlecht geworden

10

Ich habe ein kleines eingebettetes Gerät mit nur 128 MB RAM

An dieses Gerät ist eine 2 TB USB2-Festplatte angeschlossen

Ich war bis vor kurzem sehr zufrieden mit der Leistung des Geräts, als entweder die Anzahl der Dateien einen Schwellenwert überschritten hat oder die Kapazität der Festplatte einen Schwellenwert überschritten hat (ich bin mir nicht sicher, welche)

Auf der Festplatte befinden sich viele kleine Dateien. Aufgrund der Art des Schreibens sind die Anwendungsdateien sehr ausgewogen organisiert. Kein Blattknotenverzeichnis enthält mehr als 200 Dateien und es gibt etwas mehr als 800.000 Dateien.

Ich hoffe, einen Hinweis auf etwas zu bekommen, das untersucht werden kann. Die Festplattenleistung ist erheblich gesunken, das Gerät hat sich recht gut entwickelt, und dann ist die Leistung plötzlich wie ein Stein gesunken.

Ich gehe davon aus, dass die Organisationsstruktur, die ich für meine Dateien auf der Festplatte ausgewählt habe, die Fähigkeit der Inode-Caches, schnell zu bleiben, irgendwie beeinträchtigt hat.

Als Experiment habe ich die Festplatte abgemeldet (Caches leeren, mit free verifiziert). Dann navigierte ich von einer Eingabeaufforderung tief in die Verzeichnisstruktur. Insgesamt befanden sich in diesem Verzeichnis (und seinen untergeordneten Elementen) nur etwa 3200 Dateien, und zu diesem Zeitpunkt zeigte "frei"> 117 MB freien Speicher

Zu diesem Zeitpunkt habe ich den Befehl 'find' gefolgt von 'free' eingegeben.

'find' zeigte ungefähr 3000 Dateien an, aber die Speichernutzung stieg von ~ 117 MB auf ~ 2 MB

Ich verstehe das Gleichgewicht zwischen Cache und freiem Speicher und wie der Kernel eine leere Seite als schlechte Seite betrachtet. 115 MB zwischengespeicherter Inhalt aus einem Verzeichnis mit 3000 Dateien deuten jedoch auf eine ernsthafte Lücke in meinem Verständnis hin. Ich hoffe, jemand hilft mir zu verstehen, was passiert

Kann ich davon ausgehen, dass ein ausgeglichener Baum der richtige Weg ist, um viele Dateien zu haben?

stecken
quelle

Antworten:

9

Sehr gute Problembeschreibung.

Basierend auf dem, was Sie gesagt haben, denke ich, dass Sie sehen, dass die Plattennutzung hoch ist. Ein gutes Experiment wäre ein laufen cat /proc/meminfound cat /proc/slabinfoüber eine Verzögerung von 3 Sekunden , während Sie tief in die fs - Hierarchie gehen und entdecken Sie die 3000 - Dateien. Was im Wesentlichen passiert, ist, dass der Kernel die fs-Struktur durchläuft und die einzelnen Dateien und ihre Inodes scannt und alle im Speicher gespeichert werden. Wenn Sie dies überprüfen /proc/slabinfo, wird ein Objekt mit dem Namen angezeigt, ext4_inode_cachedas angibt, wie viel Speicher jeder Inode benötigt. Multiplizieren Sie dies mit der Anzahl der Objekte (obj_size * no_obj) und Sie erhalten die vom Objekt verwendete Speichermenge. Je tiefer Sie in die fs-Hierarchie eintauchen, desto mehr Speicher wird verbraucht, bis das System das hohe Wasserzeichen der Speicherzone erreicht. Ab diesem Zeitpunkt beginnt der Kernel mit der Rückforderung.

Wenn Sie in meminfo und slabinfo stöbern, erhalten Sie die Details, die Sie suchen. Wenn du willst, dass ich nachschaue, füge es ein;)

Soham Chakraborty
quelle