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


Ich bin weggelaufen XFS-Dateisysteme als Daten / Wachstum-Partitionen für fast 10 Jahre auf verschiedenen Linux-Servern.

Ich habe ein seltsames Phänomen bei den letzten CentOS / RHEL-Servern bemerkt, auf denen Version 6.2+ läuft.

Die stabile Dateisystemnutzung wurde nach dem Wechsel von EL6.0 und EL6.1 zur neueren OS-Revision stark verändert. Systeme, die ursprünglich mit EL6.2 + installiert wurden, zeigen das gleiche Verhalten; Auf den XFS - Partitionen zeigen sich wilde Schwankungen der Festplattenauslastung (siehe Blau Linie in der Grafik unten).

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

Das Festplatten-Nutzungsdiagramm des letzten Quartals des gleichen Systems zeigt die Schwankungen in der letzten Woche. enter image description here

Ich habe angefangen, die Dateisysteme auf große Dateien und Runaway-Prozesse zu überprüfen (Log-Dateien, vielleicht?). Ich habe festgestellt, dass meine größten Dateien unterschiedliche Werte von gemeldet haben du und ls. Laufen du mit und ohne die --apparent-size Schalter veranschaulicht den Unterschied.

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

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

Ein schneller Check mit dem ncdu-Dienstprogramm über das gesamte Dateisystem ergab:

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

Das Dateisystem ist voll von Sparse-Dateien, mit fast 70 GB Speicherplatz im Vergleich zu der vorherigen Version des Betriebssystems / Kernel!

Ich habe durch die Red Hat Bugzilla und ändern Sie Protokolle, um zu sehen, ob es Berichte über das gleiche Verhalten oder neue Ankündigungen bezüglich XFS gab.

Nada.

Ich ging von der Kernel-Version 2.6.32-131.17.1.el6 zu 2.6.32-220.23.1.el6 während des Upgrades; keine Änderung der Nebenversionsnummer.

Ich habe die Dateifragmentierung mit der filefrag Werkzeug. Einige der größten Dateien auf der XFS-Partition hatten Tausende von Extents. Online-Defrag mit ausführen xfs_fsr -v Während einer langsamen Aktivitätsphase konnte die Festplattennutzung vorübergehend reduziert werden (siehe Mittwoch in der ersten Grafik oben). Die Nutzung nahm jedoch zu, sobald die Systemaktivität wieder aufgenommen wurde.

Was passiert hier?


58
2017-07-09 15:27


Ursprung


Mmm ... Piazza .... - Tom O'Connor


Antworten:


Ich habe dieses Thema auf eine Diskussion über ein Commit zum XFS-Quellbaum ab Dezember 2010. Der Patch wurde im Kernel 2.6.38 eingeführt (und später in einige populäre Linux-Distributionskerne rückportiert).

Die beobachteten Schwankungen bei der Festplattennutzung sind auf ein neues Feature zurückzuführen. XFS dynamische spekulative EOF-Vorbelegung.

Dies ist ein Schritt zur Verringerung der Dateifragmentierung während des Schreibens von Streams durch spekulative Zuweisung von Speicherplatz bei steigenden Dateigrößen. Die Menge an Speicherplatz, der pro Datei vorab zugewiesen wird, ist dynamisch und hängt hauptsächlich von dem freien Speicherplatz ab, der auf dem Dateisystem verfügbar ist (um zu verhindern, dass der Speicherplatz vollständig ausgelaufen ist).

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 Ergänzung für das Dateisystem, da es bei einigen der massiv fragmentierten Dateien helfen kann, mit denen ich mich beschäftige.

Der zusätzliche Speicherplatz kann vorübergehend durch Freigeben des Seitencaches, von Dentries und Inodes wiederhergestellt werden mit:

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

Die Funktion kann vollständig deaktiviert werden, indem Sie eine definieren allocsize Wert während der Dateisystem-Bereitstellung. Der Standard für XFS ist allocsize=64k.

Die Auswirkungen dieser Änderung werden wahrscheinlich von Überwachungs- / Schwellenwertsystemen (wie ich es erfasste) wahrgenommen, aber auch beeinflusst Datenbanksysteme Dies kann zu unvorhersehbaren oder unerwünschten Ergebnissen für Thin Provisioning-VMs und -Speicherarrays führen (sie benötigen mehr Speicherplatz als erwartet).

Alles in allem hat es mich überrascht, denn es gab keine klare Ankündigung des Dateisystemwechsels auf der Verteilungsebene oder gar bei der Überwachung des XFS-Mailingliste.


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

Statistiken aus demselben Datensatz, wobei Legacy-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%

72
2017-07-09 15:27



Eine Million Upvotes und mein Königreich für Sie - Joel E Salas
Vielen Dank! Wir haben gerade ein Upgrade von Debian Squeeze auf Ubuntu durchgeführt und uns gefragt, warum du und ls so unterschiedliche Werte für größere Dateien zeigen (z. B. 50 MB gegenüber 64 MB). - Giles Thomas
@ewwhite Haben Sie diese Funktion deaktiviert, um Speicherplatz freizugeben? Oder sagt dieser Artikel gerade, hey, diese Eigenschaft verursacht die Diskrepanz in den gemeldeten Größen? Es klingt wie "auf Datenbanksystemen oder Thin-Provisioning-VMs, ziehen Sie in Betracht, dies auszuschalten", aber ich bin mir nicht sicher, was Sie letztlich entschieden haben. - JDS
@jds Ich lasse es eingeschaltet. Es beseitigt Fragmentierung und hat eine Leistungssteigerung für meine Anwendungen gebracht. - ewwhite
Oh, wundervoller Fund. Dies verwendete 750 GB für 35 GB Dateien. Nach dem xfs_fsr Es ist wieder auf etwa 35 GB. Das muss ich im Auge behalten