Vraag Waarom verbruikt mijn XFS-bestandssysteem opeens meer ruimte en vol met schaarse bestanden?


Ik ben weggerend XFS-bestandssystemen als data / growth partities voor bijna 10 jaar op verschillende Linux-servers.

Ik heb een vreemd fenomeen opgemerkt met recente CentOS / RHEL-servers met versie 6.2+.

Het stabiele gebruik van het bestandssysteem werd zeer variabel na de overgang naar de nieuwere OS-revisie van EL6.0 en EL6.1. Systemen die aanvankelijk werden geïnstalleerd met EL6.2 + vertonen hetzelfde gedrag; tonen van wilde schommelingen in schijfgebruik op de XFS-partities (Zie de blauw regel in de onderstaande grafiek).

Voor en na. De upgrade van 6.1 naar 6.2 vond plaats op zaterdag. xfs graph

De schijfgebruikgrafiek van het afgelopen kwartaal van hetzelfde systeem, met de schommelingen van de afgelopen week. enter image description here

Ik begon de bestandssystemen te controleren op grote bestanden en weggelopen processen (logbestanden, misschien?). Ik ontdekte dat mijn grootste bestanden verschillende waarden rapporteerden du en ls. hardlopen du met en zonder de --apparent-size schakelaar illustreert het verschil.

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

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

Een snelle controle met behulp van de ncdu-hulpprogramma over het hele bestandssysteem leverde:

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

Het bestandssysteem zit vol met schaarse bestanden, met bijna 70GB aan verloren ruimte vergeleken met de vorige versie van de OS / kernel!

Ik porde door de Red Hat Bugzilla en wijzig logboeken om te zien of er meldingen waren van hetzelfde gedrag of nieuwe aankondigingen met betrekking tot XFS.

Nada.

Ik ging van de kernelversie 2.6.32-131.17.1.el6 naar 2.6.32-220.23.1.el6 tijdens de upgrade; geen verandering in het lagere versienummer.

Ik heb bestandsfragmentatie gecontroleerd met de filefrag tool. Sommige van de grootste bestanden op de XFS-partitie hadden duizenden extents. Running on online defrageren met xfs_fsr -v tijdens een langzame periode van activiteit hielp het schijfgebruik tijdelijk te verminderen (zie woensdag in de eerste grafiek hierboven). Het gebruik nam echter toe zodra de activiteit van het zware systeem werd hervat.

Wat gebeurt hier?


58
2017-07-09 15:27


oorsprong


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


antwoorden:


Ik heb dit probleem teruggeleid naar een discussie over een commit voor de XFS-bronstructuur vanaf december 2010. De patch is geïntroduceerd in Kernel 2.6.38 (en uiteraard later teruggezet in een aantal populaire Linux-distributiekernels).

De waargenomen fluctuaties in schijfgebruik zijn het resultaat van een nieuwe functie; XFS Dynamic Speculative EOF Preallocation.

Dit is een actie om bestandsfragmentatie tijdens het schrijven van streaming te verminderen door speculatief ruimte toe te wijzen naarmate bestanden groter worden. De hoeveelheid vooraf toegewezen ruimte per bestand is dynamisch en is voornamelijk een functie van de vrije ruimte die beschikbaar is op het bestandssysteem (om te voorkomen dat de schijfruimte bijna op is).

Het volgt dit schema:

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)

Dit is een interessante toevoeging aan het bestandssysteem omdat het kan helpen met enkele van de enorm gefragmenteerde bestanden waarmee ik te maken heb.

De extra ruimte kan tijdelijk worden teruggevorderd door de pagecache, dentries en inodes vrij te maken met:

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

De functie kan volledig worden uitgeschakeld door een te definiëren allocsize waarde tijdens het monteren van het bestandssysteem. De standaardwaarde voor XFS is allocsize=64k.

De impact van deze verandering zal waarschijnlijk voelbaar zijn door monitoring / drempelbepalingssystemen (zoals ik die heb gepakt), maar heeft ook database systemen en kan onvoorspelbare of ongewenste resultaten veroorzaken voor thin-provisioned virtuele machines en opslagarrays (zij zullen meer ruimte gebruiken dan u verwacht).

Al met al trok het me over het hoofd omdat er geen duidelijke aankondiging was van de verandering van bestandssysteem op distributieniveau of zelfs bij het monitoren van de XFS-mailinglijst.


Bewerk:
Prestaties op XFS-volumes met deze functie zijn drastisch verbeterd. Ik zie consistente <1% fragmentatie op volumes die eerder tot 50% fragmentatie vertoonden. Schrijfprestaties zijn wereldwijd gestegen!

Statistieken van dezelfde dataset, waarbij oudere XFS vergeleken wordt met de versie in EL6.3.

Oud:

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

Nieuwe:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%

72
2017-07-09 15:27



Een miljoen upvotes en mijn koninkrijk voor jou - Joel E Salas
Dank je! We hebben net een upgrade gedaan van Debian Squeeze naar Ubuntu en vroegen ons af waarom du en ls zoveel verschillende waarden vertoonden voor vrij grote bestanden (bijvoorbeeld 50 MB versus 64 MB) - Giles Thomas
@ewwhite Heb je deze functie uitgeschakeld om de ruimte terug te winnen? Of zegt dit artikel alleen maar, hé, dit kenmerk veroorzaakte het verschil in de gerapporteerde formaten? Het klinkt als "op databasesystemen of thin-provisioned VM's, overweeg om dit uit te zetten", maar ik weet niet zeker wat je uiteindelijk besliste te doen. - JDS
@jds Ik laat het aan. Het elimineert fragmentatie en heeft een prestatieverbetering gehad voor mijn applicaties. - ewwhite
Oh, prachtige vondst. Dit was met behulp van 750 GB op 35 GB aan bestanden. Na xfs_fsr het is terug naar ongeveer 35 GB. Ik zal dat in de gaten moeten houden