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 df
entspricht 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_size
Wert 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.
discard
Die Lösung besteht darin, das Dateisystem mit den Optionen und zu mounten noatime
. discard
Dadurch wird der freigegebene Speicherplatz wieder auf dem Speichergerät freigegeben und die Nutzung auf beiden Geräten stimmt wieder überein.