it-swarm.com.de

Was ist das leistungsstärkste Linux-Dateisystem zum Speichern vieler kleiner Dateien (HDD, nicht SSD)?

Ich habe einen Verzeichnisbaum, der viele kleine Dateien und eine kleine Anzahl größerer Dateien enthält. Die durchschnittliche Größe einer Datei beträgt ca. 1 Kilobyte. Der Baum enthält 210158 Dateien und Verzeichnisse (diese Nummer wurde durch Ausführen von find | wc -l Erhalten).

Ein kleiner Prozentsatz der Dateien wird mehrmals pro Woche hinzugefügt/gelöscht/neu geschrieben. Dies gilt sowohl für die kleinen Dateien als auch für die (kleine Anzahl) größerer Dateien.

Die Dateisysteme, die ich ausprobiert habe (ext4, btrfs), haben einige Probleme mit der Positionierung von Dateien auf der Festplatte. Über einen längeren Zeitraum werden die physischen Positionen von Dateien auf der Festplatte (rotierende Medien, keine Solid-State-Festplatte) zufälliger verteilt. Die negative Folge dieser zufälligen Verteilung ist, dass das Dateisystem langsamer wird (z. B.: Viermal langsamer als ein neues Dateisystem).

Gibt es ein Linux-Dateisystem (oder eine Methode zur Wartung des Dateisystems), das nicht unter dieser Leistungsverschlechterung leidet und in der Lage ist, ein stabiles Leistungsprofil auf einem rotierenden Medium aufrechtzuerhalten? Das Dateisystem läuft möglicherweise auf Fuse, muss jedoch zuverlässig sein.

46
user14159

Performance

Ich habe einen kleinen Benchmark ( Quelle ) geschrieben, um herauszufinden, welches Dateisystem mit hunderttausenden kleinen Dateien am besten funktioniert:

  • erstellen Sie 300000 Dateien (512B bis 1536B) mit Daten aus/dev/urandom
  • schreiben Sie 30000 zufällige Dateien neu und ändern Sie die Größe
  • lesen Sie 30000 sequentielle Dateien
  • lesen Sie 30000 zufällige Dateien
  • löschen Sie alle Dateien

  • synchronisieren und löschen Sie den Cache nach jedem Schritt

Ergebnisse (durchschnittliche Zeit in Sekunden, niedriger = besser):

Using Linux Kernel version 3.1.7
Btrfs:
    create:    53 s
    rewrite:    6 s
    read sq:    4 s
    read rn:  312 s
    delete:   373 s

ext4:
    create:    46 s
    rewrite:   18 s
    read sq:   29 s
    read rn:  272 s
    delete:    12 s

ReiserFS:
    create:    62 s
    rewrite:  321 s
    read sq:    6 s
    read rn:  246 s
    delete:    41 s

XFS:
    create:    68 s
    rewrite:  430 s
    read sq:   37 s
    read rn:  367 s
    delete:    36 s

Ergebnis:
Während Ext4 eine gute Gesamtleistung aufwies, war ReiserFS beim Lesen von sequentiellen Dateien extrem schnell. Es stellte sich heraus, dass XFS mit vielen kleinen Dateien langsam ist - Sie sollten es für diesen Anwendungsfall nicht verwenden.

Fragmentierungsproblem

Die einzige Möglichkeit, zu verhindern, dass Dateisysteme Dateien über das Laufwerk verteilen, besteht darin, die Partition nur so groß zu halten, wie Sie sie wirklich benötigen. Achten Sie jedoch darauf, die Partition nicht zu klein zu machen, um eine Fragmentierung innerhalb der Dateien zu verhindern. Die Verwendung von LVM kann sehr hilfreich sein.

Weiterführende Literatur

Das Arch Wiki enthält einige großartige Artikel zur Leistung des Dateisystems:

https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types

https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices

49
taffer

Ich verwende ReiserFS für diese Aufgabe. Es wurde speziell für die Verarbeitung vieler kleiner Dateien entwickelt. Es gibt eine einfache Text darüber lesen im funtoo Wiki.

ReiserFS verfügt außerdem über eine Reihe von Funktionen, die speziell auf die Verbesserung der Leistung kleiner Dateien abzielen. Im Gegensatz zu ext2 weist ReiserFS keinen Speicherplatz in festen Blöcken von 1 k oder 4 k zu. Stattdessen kann es die genaue Größe zuweisen, die es benötigt.

7
Baarn

Die ext4-Leistung nimmt nach 1-2 Millionen Dateien in einem Verzeichnis ab. Siehe diese Seite http://genomewiki.ucsc.edu/index.php/File_system_performance erstellt von Hiram Clawson bei UCSC

7
Max

XFS zeichnet sich durch eine sehr gute Leistung in solchen Situationen aus. Dies ist ein Teil dessen, warum wir es bei meiner Arbeit für unsere Mail-Stores verwenden (die Hunderttausende von Dateien in einem Verzeichnis enthalten können). Es hat eine bessere Fehlertoleranz als ReiserFS, wird viel häufiger verwendet und ist im Allgemeinen ein sehr ausgereiftes Dateisystem.

Darüber hinaus unterstützt XFS die Online-Defragmentierung. Es wird jedoch eine verzögerte Zuordnungstechnik verwendet, die zunächst zu einer geringeren Fragmentierung (im Vergleich zu anderen Dateisystemen) führt.

0
Patrick