Warum verbrauchen meine XFS-Dateisysteme plötzlich mehr Speicherplatz und sind voll mit Dateien mit geringer Dichte?

62

Ich habe fast 10 Jahre lang XFS-Dateisysteme als Daten- / Wachstumspartitionen auf verschiedenen Linux-Servern ausgeführt.

Ich habe ein merkwürdiges Phänomen bei den neuesten CentOS / RHEL-Servern mit Version 6.2+ festgestellt.

Die stabile Nutzung des Dateisystems wurde durch die Umstellung auf die neuere Betriebssystemversion von EL6.0 und EL6.1 sehr unterschiedlich. Systeme, die ursprünglich mit EL6.2 + installiert wurden, zeigen dasselbe Verhalten. Anzeige wilder Schwankungen bei der Festplattenauslastung auf den XFS-Partitionen (siehe die blaue Linie in der folgenden Grafik).

Vorher und nachher. Das Upgrade von 6.1 auf 6.2 erfolgte am Samstag. xfs graph

Das Diagramm zur Festplattenauslastung des letzten Quartals desselben Systems, in dem die Schwankungen der letzten Woche dargestellt sind. Bildbeschreibung hier eingeben

Ich habe begonnen, die Dateisysteme auf große Dateien und außer Kontrolle geratene Prozesse (Protokolldateien, vielleicht?) Zu überprüfen. Ich habe festgestellt, dass meine größten Dateien unterschiedliche Werte von duund melden ls. Das Laufen dumit und ohne --apparent-sizeSchalter macht den Unterschied deutlich.

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

Eine schnelle Überprüfung mit dem Dienstprogramm ncdu im gesamten Dateisystem ergab Folgendes :

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

Das Dateisystem ist voll von spärlichen Dateien , mit fast 70 GB verlorenem Speicherplatz im Vergleich zur vorherigen Version des Betriebssystems / Kernels!

Ich habe das Red Hat Bugzilla durchgesehen und die Protokolle geändert, um festzustellen, ob es Berichte über dasselbe Verhalten oder neue Ankündigungen in Bezug auf XFS gab.

Nada.

Ich bin während des Upgrades von Kernel-Version 2.6.32-131.17.1.el6 auf 2.6.32-220.23.1.el6 übergegangen . Keine Änderung der Nebenversionsnummer.

Ich habe die Dateifragmentierung mit dem filefragTool überprüft . Einige der größten Dateien auf der XFS-Partition hatten Tausende von Speicherbereichen. Durch das Ausführen einer Onlinedefragmentierung xfs_fsr -vwährend einer langsamen Aktivitätsperiode konnte die Datenträgernutzung vorübergehend reduziert werden (siehe Mittwoch im ersten Diagramm oben). Die Nutzung nahm jedoch zu, sobald die hohe Systemaktivität wieder aufgenommen wurde.

Was passiert hier?

ewwhite
quelle
2
Mmm ... Piazza ....
Tom O'Connor

Antworten:

76

Ich verfolgen dieses Problem zurück zu einer Diskussion über ein verpflichten, die XFS - Source - Tree von Dezember 2010. Der Patch in Kernel 2.6.38 eingeführt wurde (und natürlich später in einige populären Distribution Kernel Linux zurückportiert).

Die beobachteten Schwankungen bei der Datenträgernutzung sind auf eine neue Funktion zurückzuführen. XFS Dynamic Speculative EOF Preallocation .

Dies ist ein Schritt, um die Dateifragmentierung während Streaming-Schreibvorgängen zu reduzieren, indem mit zunehmender Dateigröße spekulativ Speicherplatz zugewiesen wird. Der pro Datei vorab zugewiesene Speicherplatz ist dynamisch und hängt in erster Linie vom verfügbaren Speicherplatz auf dem Dateisystem ab (um zu verhindern, dass der gesamte Speicherplatz ausgeht).

Es folgt dieser Zeitplan:

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

Dies ist eine interessante Erweiterung des Dateisystems, da sie bei einigen der stark fragmentierten Dateien, mit denen ich zu tun habe, hilfreich sein kann.

Der zusätzliche Speicherplatz kann vorübergehend freigegeben werden, indem der Pagecache, die Einträge und die Inodes wie folgt freigegeben werden:

sync; echo 3 > /proc/sys/vm/drop_caches

Die Funktion kann vollständig deaktiviert werden, indem ein allocsizeWert während der Dateisystembereitstellung definiert wird. Die Standardeinstellung für XFS ist allocsize=64k.

Die Auswirkungen dieser Änderung werden wahrscheinlich von Überwachungs- / Schwellenwertsystemen (wie ich sie abgefangen habe) zu spüren sein, sie haben jedoch auch Auswirkungen auf Datenbanksysteme und können zu unvorhersehbaren oder unerwünschten Ergebnissen für Thin-Provisioning-VMs und Speicher-Arrays führen (diese werden verwendet) mehr Platz als Sie erwarten).

Alles in allem hat es mich überrascht, weil es keine klare Ankündigung der Dateisystemänderung auf der Verteilungsebene oder sogar bei der Überwachung der XFS-Mailingliste gab .


Bearbeiten : Die
Leistung auf XFS-Volumes mit dieser Funktion wurde drastisch verbessert. Ich sehe eine konsistente Fragmentierung von <1% auf Volumes, die zuvor eine Fragmentierung von bis zu 50% aufwiesen. Die Schreibleistung ist weltweit gestiegen!

Statistikdaten aus demselben Datensatz, wobei das ältere XFS mit der Version in EL6.3 verglichen wird.

Alt:

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

Neu:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%
ewwhite
quelle
4
Eine Million Upvotes und mein Königreich für Sie
Joel E Salas
1
Danke! Wir haben gerade ein Upgrade von Debian Squeeze auf Ubuntu durchgeführt und uns gefragt, warum du und ls so unterschiedliche Werte für große Dateien anzeigen (z. B. 50 MB vs 64 MB)
Giles Thomas
1
@ewwhite Haben Sie diese Funktion deaktiviert, um den Speicherplatz freizugeben? Oder sagt dieser Artikel nur, hey, diese Funktion hat die Diskrepanz bei den angegebenen Größen verursacht? Es hört sich so an, als würden Sie auf Datenbanksystemen oder Thin-Provisioning-VMs in Betracht ziehen, dies zu deaktivieren, aber ich bin mir nicht sicher, was Sie letztendlich beschlossen haben.
JDS
2
@jds lass ich drauf. Es beseitigt die Fragmentierung und hat die Leistung meiner Anwendungen gesteigert.
ewwhite
3
Oh, wundervoller Fund. Hierbei wurden 750 GB für 35 GB Dateien verwendet. Danach geht xfs_fsres wieder runter auf ca. 35GB. Ich muss das im Auge behalten