10
September
2020
16:39

RAM-Komprimierung mit ZSwap einrichten

10 September 2020 16:39

Wenn der Arbeitsspeicher erschöpft ist, wird der Computer beim Zugriff auf die Auslagerungsdatei auf der Festplatte sehr langsam. Um dieses Problem zu lösen, wurde das Zswap-Modul erfunden. Standardmäßig ist es im Linux-Betriebssystem deaktiviert, Sie können es jedoch aktivieren.

ПочMusste ich Zswap verwenden? Es sind 2 2-GB-Sticks verbaut, aber das Motherboard unterstützt physikalisch nur 3 GB – das ist eine Einschränkung eines Motherboards, das auf dem Intel 82945-Chipsatz basiert. Auf einem anderen Rechner, auf dem ebenfalls Linux läuft, sind RAM-Sticks mit 1 GB und 2 GB verbaut (insgesamt 3 GB), diese reichen in der Regel für die Arbeit im Internet aus. Aber manchmal kann es beim Öffnen großer PDF-Dateien oder Bilder vorkommen, dass der Arbeitsspeicher knapp wird ...

Wahl: Zram oder Zswap

zram wird für die permanente Seitenkomprimierung verwendet – im Speicher wird ein Swap-Abschnitt zugewiesen, in den komprimierte Speicherseiten wie in eine normale Auslagerungsdatei entladen werden, jedoch im schnellen RAM.

zswap weist keine Partition im Speicher zu, sondern nur ein dynamisches Volume (Pool) im RAM, das nur die Seiten enthält, die Kandidaten für die Aufnahme in die physische Auslagerungsdatei sind. Auch Seiten werden komprimiert, bevor sie in den Pool gestellt werden.

Da die Speichergröße groß genug ist, muss ich den RAM nicht ständig komprimieren, wie es bei zram der Fall ist. Es muss sichergestellt werden, dass kein Auslagern auf die Festplatte erfolgt, wenn der RAM fast voll ist.

Lösung:

  1. In der GRUB-Bootloader-Zeile, die für die Übergabe von Kernel-Parametern zuständig ist, gebe ich einen Aufruf des ZSwap-Moduls an:

    sudo nano /etc/default/grub

Die Zeile GRUB_CMDLINE_LINUX_DEFAULT wurde wie folgt korrigiert:

GRUB_CMDLINE_LINUX_DEFAULT="noresume zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 zswap.max_pool_percent=35"

GRUB_CMDLINE_LINUX=""

  1. Aktualisierte GRUB-Konfiguration:

    sudo update-grub

  2. Erlaubtes Laden von Modulen für erweiterte Komprimierung

    sudo nano /etc/initramfs-tools/modules

fügte die Zeilen hinzu:

lz4
lz4_compress
z3fold

und die Änderungen gespeichert.

  1. Ich habe mit der Aktualisierung der initrd-Datei begonnen (die iniramfs enthält – das anfängliche Dateisystem zum Laden in den RAM beim Booten des Betriebssystems; der zweite Teil des Kernels ist die statische Datei vmlinuz, die durch diesen Befehl nicht geändert wird und den Kernel selbst enthält):

    sudo update-initramfs -u

  2. Starten Sie das System neu

    sudo reboot

  3. Überprüfen.

  • Vor der Einrichtung des Komprimierungsmoduls war kein RAM vorhanden.

    dmesg | grep zswap

  • Nach dem ersten Start ohne die Module lz4, lz4compress wird der Befehl dmesg ausgegeben
    [2.690663] zswap: geladen mit Pool lzo/zbud

  • Nach der endgültigen Konfiguration unter Einbeziehung der Module lz4, lz4compress und z3fold lautet die Ausgabe des Befehls dmesg wie folgt:
    [ 2.734842] zswap: geladen mit Pool lz4/z3fold


Hinweise:

  1. Der Unterschied zwischen den Komprimierungsmethoden lzo und lz4 liegt in der Komprimierungs-/Dekomprimierungsgeschwindigkeit – lz4 hat die höchste Komprimierungs- und Dekomprimierungsgeschwindigkeit von allen.
  2. Auf Systemen mit wenig RAM ist es besser, statt zswap.zpool=z3fold zswap.zpool=zsmalloc (Komprimierungsstufe bis 7) auszuprobieren.
  3. Die maximale Poolgröße für komprimierte Cacheseiten beträgt 50 %, da laut free -h auf einem Computer mit 3 GB RAM die Cachegröße 600 MB beträgt und 1,1 GB frei sind (1,7 GB sind etwa 50 % der 3 GB RAM). Auf Systemen mit wenig RAM sollte das zswap.max_pool_percent-Limit auf 10-15 % reduziert werden, sodass es 200-300 MB beträgt. Die Größe des Seitenpools (komprimierter Cache) ist dynamisch.

    Update vom 10. Juni 2021: nach Erhöhung in der Konfigurationsdatei /etc/default/grub parameter zswap.max_pool_percent von 50 auf 70 und Ausführen des Befehls sudo update-grub die Größe des freien RAM (frei) stieg von 213 auf 500 MB, offenbar aufgrund der RAM-Komprimierung. Meiner Meinung nach die optimale Größe max_pool_percent für maximale RAM-Einsparungen liegt im Bereich von 70 bis 90 %. Mit dem Parameter max_pool_percent auf dem 90-Prozent-Niveau habe ich keine Verlangsamung des Programmbetriebs oder des Betriebssystems insgesamt festgestellt. Nach der Erhöhung von zswap.max_pool_percent auf 90 liegt die Größe des freien RAM bei Ausführung des Mozilla Firefox-Browsers im Bereich von 908 bis 937 MB. Auch die Geschwindigkeit des Firefox-Browsers hat zugenommen.

Ergänzung vom 21.10.2021: Bei max_pool_percent=90 habe ich starkes Tauschen auf der Website der Staatsdienste beobachtet, als ich ein ausgefülltes Formular für die Volkszählung der Russischen Föderation einreichte. Reduziert max_pool_percent=35 (ca. 1 GB RAM), ausgeführt sudo update-grub und den PC neu gestartet. Anscheinend ist eine übermäßige Erhöhung des Parameters max_pool_percent über 50 % unerwünscht.

Ergänzung 2023. Ausgabe der Zswap-Betriebsstatistik

Anzeige der aktuellen ZSwap-Einstellungen

grep -R . /sys/module/zswap

ZSwap-Leistungsstatistik (Debugging):

sudo grep -R . /sys/kernel/debug/zswap/

Wenn zswap aktiviert ist, aber in der Statistik (/sys/kernel/debug/zswap/stored_pages:0) keine komprimierten Seiten vorhanden sind, bedeutet dies, dass das Betriebssystem über genügend RAM verfügt. In diesem Fall erzeugt das Zswap-Debugging Nullen, weil Es gibt keine Speicherseiten, die darauf warten, in den Swap geladen zu werden.

Quellen:



Verwandte Veröffentlichungen