Das ZRAM-Dateisystem meldet auf Geräteebene eine andere Nutzung als das Dateisystem.

Das ZRAM-Dateisystem meldet auf Geräteebene eine andere Nutzung als das Dateisystem.

Wir haben auf unserem Host ein 80 GB großes ZRAM-Gerät definiert und darin ein 170 GB großes Ext4-Dateisystem:

  echo 170G > /sys/block/zram0/disksize
  echo 80G  > /sys/block/zram0/mem_limit
  /usr/sbin/mkfs.ext4 -q -m 0 /dev/zram0
  /usr/bin/mount /dev/zram0 /var/zram

Dieses Dateisystem wird von unserer Anwendung für den schnellen Zugriff auf große Mengen kurzlebiger Daten verwendet.

Die angezeigte Dateisystemgröße dfentspricht der in angegebenen ZRAM-Größe/sys/block/zram0/disksize

Beim Kopieren der Testdaten in ein leeres Dateisystem haben wir überprüft, dass ein Komprimierungsverhältnis von 2,2:1 erreicht wird und das Dateisystem somit gefüllt ist, bevor wir das Speicherlimit von zramfs erreichen. Der /sys/block/zram0/orig_data_sizeWert entspricht der vom Dateisystem gemeldeten Nutzung:

# expr `cat orig_data_size` / 1024 ; df -k /dev/zram0
112779188
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/zram0     175329308 112956600  62356324  65% /var/zram

Wenn die Anwendung jedoch über einen längeren Zeitraum mit Livedaten läuft, stellen wir fest, dass dies nicht mehr übereinstimmt.

# expr `cat orig_data_size` / 1024 ; df -k /dev/zram0
173130200
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/zram0     175329308 112999496  62313428  65% /var/zram

Jetzt meldet das Dateisystem eine Nutzung von ca. 110 GB, das zramfs-Gerät meldet jedoch 165 GB. Gleichzeitig ist der zramfs-Speicher erschöpft und das Dateisystem wird schreibgeschützt.

Die ZRAM-Zahlen bestätigen, dass wir ein Komprimierungsverhältnis von 2,2 : 1 zwischen orig_data_size und compr_data_size erreichen.Warum zeigt das Dateisystem viel mehr freien Speicherplatz an als das ZRAM-Gerät? Auch wenn es sich dabei um Speicherplatz handelt, der vom Dateisystem bereits zur Wiederverwendung zugewiesen wurde, sollte dieser nicht wiederverwendet werden, anstatt neuen Speicherplatz zuzuweisen?

Die Daten bestehen aus einer Vielzahl kleiner Dateien, die in unregelmäßigen Abständen hinzugefügt und entfernt werden.

Antwort1

Der Grund dafür ist, dass beim Löschen von Dateien aus dem ext4-Dateisystem im Gerät zram0 der Speicher nicht wieder für das System freigegeben wird. Dies bedeutet, dass, obwohl der Speicherplatz für das Dateisystem verfügbar ist (die Ausgabe von df), dennoch Speicher zugewiesen ist (die Statistiken in /sys/block/zram0). Infolgedessen steigt die Speichernutzung auf 100 % der zugewiesenen Speichermenge, obwohl das Dateisystem aufgrund der Löschungen immer noch halb voll ist.

Dies bedeutet zwar, dass Sie das Dateisystem weiterhin füllen können und neue Dateien nicht so viel neuen Speicherplatz belegen. Die Komprimierungsrate wird dadurch jedoch negativ beeinflusst.

discardDie Lösung besteht darin, das Dateisystem mit den Optionen und zu mounten noatime. discardDadurch wird der freigegebene Speicherplatz wieder auf dem Speichergerät freigegeben und die Nutzung auf beiden Geräten stimmt wieder überein.

verwandte Informationen