Wie wirkt sich die Anzahl der Dateien im selben Ordner auf die E/A-Leistung in einem ext4-Dateisystem aus?

Wie wirkt sich die Anzahl der Dateien im selben Ordner auf die E/A-Leistung in einem ext4-Dateisystem aus?

Ich benutzeKyoto-Kabinett(ein Schlüssel-Wert-Speicher) für mein Projekt. Der spezifische DB-Typ, den ich verwende, istDirDBDadurch werden viele Dateien in einem Verzeichnis erstellt, um die Schlüssel-Wert-Paare zu speichern. Der Server, auf dem ich dieses Projekt ausführe, hat ein ext4-Dateisystem. Das Problem, auf das ich stoße, ist, dass die E/A-Latenz mit der Anzahl der Dateien im Verzeichnis zunimmt. Wenn das Verzeichnis zu viele Dateien enthält (sagen wir über 1 Million Dateien), dauert es ewig, wenn ich versuche, den gesamten Ordner zu löschen (bereits mehr als 5 Stunden und läuft immer noch). Kann jemand erklären, warum die E/A-Latenz mit der Anzahl der Dateien zunimmt und warum rm ewig braucht, um den Ordner zu löschen?

Antwort1

Das einfachste Beispiel für Verzögerungen ist, dass die zum Auflisten des gesamten Verzeichnisses benötigte Zeit offensichtlich von der Größe des Verzeichnisses abhängt.

Zweitens verwendet ext4 je nach Dateisystemeinstellungen entweder verknüpfte Listen oder einen gehashten B-Baum für Verzeichnissuchen. Sie müssen nur nachschlagen, wie diese beiden Datenstrukturen funktionieren, um eine Vorstellung von den Unterschieden zu bekommen, die eine falsche Konfiguration bewirken kann. Kurz gesagt sind verknüpfte Listen ziemlich langsam und nur für kleine Verzeichnisse geeignet, während Hashes viel schneller und besser für große Verzeichnisse geeignet sind.

Beim Verarbeiten einer verknüpften Liste müssen Sie jedes einzelne Element in der Liste durchgehen, da in den meisten Fällen nur Element n-1 weiß, wo sich Element n befindet. Daher müssen Sie zuerst Element n lesen.

Bei der Verarbeitung eines Hash-Baums wird eine Zahl im Speicher berechnet und basierend auf dieser Zahl direkt zu Details gesprungen. Obwohl dieser Vorgang bei großen Verzeichnissen möglicherweise mehrmals durchgeführt werden muss, ist er viel schneller als die Verarbeitung jedes einzelnen Knotens.

Wenn Sie die Details wirklich verstehen möchten, ist die gesamte Dokumentation online verfügbar. Sie können beispielsweise hier beginnen:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

verwandte Informationen