zSwap vs. zRAM vs. zRAM-Disk

Caramon2

Lieutenant
Registriert
Jan. 2004
Beiträge
879
WICHTIG!

Inzwischen (27.10.2022) rate ich von zSwap ab!

Alles was ich bisher dazu geschrieben habe ist damit gegenstandslos.

Nach meinen Erfahrungen (s. u.) ist das eine nutzlos Verschwendung von Arbeitsspeicher, weil dadurch früher ausgelagert werden muss und die Schreiblast sogar steigt: zSwap funktioniert offenbar nur als Lese-Cache, während ausgelagerte Seiten gleich in die Swap geschrieben werden. - Dass die Swap nicht genutzt wird, wenn zSwap ausreichend groß ist, wie man oft dazu liest, ist falsch.

Ich habe das unter Artix (Arch-Derivat) mit Kernel 5.16 und 6.0 getestet.

Da es lt. Arch-Wiki (hier und hier) standardmäßig aktiviert ist, muss es (als Root) in "/etc/default/grub" deaktiviert werden (+ "update-grub"):
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet zswap.enabled=0"

Das sollte man immer machen, auch wenn die genutzte Distribution es (noch?) nicht standardmäßig aktiviert: Das kann ja noch kommen.

Nochmal: Egal ob normale Swap-Datei/-Partition, oder zRAM: zSwap muss deaktiviert sein.

Dass es die Speicherseiten zwar im RAM komprimiert speichert, es dann aber wieder unkomprimiert auf Platte schreibt, war mir schon immer suspekt, weshalb ich mich nicht früher damit beschäftigt habe.

zRAM nutze ich dagegen schon seit dem ich 2014 bei meinem gerooteten Huawei Y300 (512 MiB RAM, Android 4.4: CyanogenMod) erstmals darauf gestoßen bin.

Auf dem PC nutze ich Linux seit 2015, da mir Windows XP (x64) nicht mehr tragbar erschien: zuerst LinuxMint bis 2020 (18.3), dann Artix.



Grundlagen:

Es können diese Kompressionen genutzt werden: lzo lzo-rle lz4 lz4hc 842 zstd

Sinnvoll sind aber nur lz4 und zstd:

lzo komprimiert so schnell und schlecht wie lz4, dekomprimiert aber so weniger schnell wie zstd (lahm entpackt zstd ja auch nicht, komprimiert aber viel besser) und das "-rle" ändert daran auch nichts relevantes. Dto. lz4hc (=high compression): Bringt fast nichts, ist nur deutlich langsamer. 842 ist vollkommener Blödsinn.

Bei einer Swap (egal ob zSwap oder zRAM) nutze ich zstd, da das auslagern ja im Hintergrund passiert: Die Geschwindigkeit ist also unwichtiger, als eine gute Kompression. - Wichtig ist dabei auch, dass die Daten im Arbeitsspeicher unkomprimiert vorliegen, also besonders gut gepackt werden können. (z. B. ein JPG muss ja dekodiert werden, um es anzuzeigen: Im RAM ist es quasi ein unkomprimiertes BMP)

Anders bei einer zRAM-Disk: Dorthin kopiert man die gleichen Daten wie auf der Platte, also JPG als JPG, usw. - Da würde eine hohe Kompression oft nicht greifen und zstd würde nutzlos bremsen. Deshalb nutze ich dort vorzugsweise lz4.

zstd komprimiert normalerweise etwas besser als 1:3, während lz4 kaum 1:2 schafft.

Deshalb nutze ich für zSwap 25% des RAMs, was sich mit 4 GiB RAM am einfachsten veranschaulichen lässt:

Von den 4 GiB RAM wird 1 GiB für zSwap reserviert, worin sich mit zstd das dreifache speichern lässt: Also praktisch 3 GiB RAM + 3 GiB zSwap: Aus 4 GiB werden sozusagen 6 GiB.

Dto. bei zRAM, nur dass es andersherum rechnet: Das lege ich mit 75% der RAM-Größe an, was dann aber durch zstd nur 1/3 davon belegt: Bei 4 GiB RAM wird zRAM also 3 GiB groß, belegt (wenn voll) durch die Komprimierung aber nur 1 GiB, so dass man wieder auf 3 GiB + 3 GiB. kommt.

WICHTIG:

zRAM sollte ausschließlich ohne Swap-Partition/-Datei genutzt werden:

Das Problem daran ist: Wenn der Speicher voll wird, zuerst das unwichtigste ausgelagert wird und das zRAM füllt. Wenn dann auch noch Teile der aktuell genutzten Daten ausgelagert werden müssen, ist das zRAM schon voll und sie kommen in die Swap: Also gerade die Daten, auf die ggfs. schnell wieder zugegriffen werden müssen, sind auf der lahmen Platte, weil die alten/unwichtigen Daten das zRAM blockieren.

Wenn man eine physikalische Swap braucht (z. B. für den Ruhezustand), bleibt nur zSwap (das funktioniert ausschließlich mit Swap): Da es als Cache für die Swap arbeitet, sind die aktuellen Daten immer dort, während die älteren Daten, wenn es knapp wird, in die Swap durchgereicht werden (bekloppterweise aber wieder unkomprimiert), so dass obiges Problem nicht entsteht.

Hier noch ein paar Links:

https://www.kernel.org/doc/Documentation/admin-guide/blockdev/zram.rst
https://www.kernel.org/doc/Documentation/admin-guide/mm/zswap.rst
https://www.kernel.org/doc/Documentation/vm/z3fold.rst


Anwendung (als Root):

zRAM-Swap
nutze ich per "/etc/rc.local" (darauf achten, dass es als ausführbar markiert ist):
Code:

zSwap muss in "/etc/default/grub" deaktiviert werden (+ "update-grub"), weil das (bekloppterweise) auch das komprimierte zRAM komprimiert im RAM cacht(!):
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet sysctl.vm.swappiness=100 zswap.enabled=0"
Außerdem setze ich dort die Swappiness auf 100, weil das für eine zRAM-Swap vorteilhaft ist.

Nach dem Reboot kann man das mit "zramctl" kontrollieren:
Code:
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd         23,5G   4K   63B    4K       8 [SWAP]



zRAM-Disk (als normaler Nutzer):

Um zRAM auch als komprimierende RAM-Disk nutzen zu können, habe ich mir zwei Skripte geschrieben (als ausführbar markieren und im Pfad speichern):

"mkzram":
Code:
#!/bin/bash
if [ $# == 0 ];then echo "mkzram [Größe in G] [zstd] (sonst lz4)";exit;fi
al=lz4
if [ $2 == "zstd" ] 2>/dev/null;then al=zstd;fi
if [ ! -e /dev/zram* ] 2>/dev/null
then sudo modprobe zram;id=0
else id=$(sudo cat /sys/class/zram-control/hot_add)
fi
echo $al|sudo tee /sys/block/zram$id/comp_algorithm >/dev/null
echo $1"G"|sudo tee /sys/block/zram$id/disksize >/dev/null
sudo mkfs.xfs -q /dev/zram$id && mkdir /tmp/zram$id
sudo mount -o discard /dev/zram$id /tmp/zram$id/ && sudo chmod 777 /tmp/zram$id/
zramctl

"rmzram":
Code:
#!/bin/bash
if [ $# == 0 ];then echo "rmzram [ID]:";zramctl;exit;fi
sudo umount -l /tmp/zram$1/ && rm -rf /tmp/zram$1
echo $1|sudo tee /sys/class/zram-control/hot_remove > /dev/null
if [ ! -e /dev/zram* ] 2>/dev/null;then sudo modprobe -r zram;fi
zramctl

Mit z. B. "mkzram 12" erstellt man eine 12 GiB große und lz4-komprimierende RAM-Disk und mit "mkzram 12 zstd" das gleiche, nur eben zstd-komprimiert. - Übrigens "darf" die zRAM-Disk auch größer als das RAM sein (also auch 1 TB ist möglich): Es zählt ausschließlich, wie viel tatsächlich belegt und wie groß es komprimiert ist.

Mit "zramctl" kann man sich das Device anzeigen lassen, wie viel Speicher belegt ist und wie gut er komprimiert ist.

Mit z. B. "rmzram 1" löscht man "/dev/zram1".

Tipp:

Mit "sync;sudo fstrim -va" gibt man in der zRAM-Disk gelöschten Speicher wieder frei. - Durch online-discard sollte das eigentlich automatisch geschehen, aber das funktioniert nicht immer/sofort.

Wichtig:

Nach einem Reboot ist eine (z)RAM-Disk (einschließlich Inhalt) natürlich weg.

Ob die beim Ruhezustand erhalten bleibt, kann ich nicht testen, da mein Board eine Macke hat, die S2R/S2D verhindert: ein altes MSI mit AM3: Ich habe noch einen FX8350, da mir der für alles locker reicht.



Das nicht mehr nutzen (s. o.):

zSwap aktiviert man per Grub (in "/etc/default/grub" ändern, dann "update-grub" + Reboot):
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=25"

Testen ob es übernommen wurde, kann man es mit "head /sys/module/zswap/parameters/*":
Code:
==> /sys/module/zswap/parameters/accept_threshold_percent <==
90

==> /sys/module/zswap/parameters/compressor <==
zstd

==> /sys/module/zswap/parameters/enabled <==
Y

==> /sys/module/zswap/parameters/max_pool_percent <==
25

==> /sys/module/zswap/parameters/non_same_filled_pages_enabled <==
Y

==> /sys/module/zswap/parameters/same_filled_pages_enabled <==
Y

==> /sys/module/zswap/parameters/zpool <==
z3fold
Einige Distributionen nehmen "zstd" dort noch nicht an.

Dann in "/etc/default/grub" ändern (+ "update-grub"):
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet zswap.enabled=0"

Und es stattdessen per "/etc/rc.local" setzen (darauf achten, dass es als ausführbar markiert ist):
Code:
#!/bin/sh
#echo 100 > /proc/sys/vm/swappiness
echo zstd > /sys/module/zswap/parameters/compressor
echo 25 > /sys/module/zswap/parameters/max_pool_percent
echo Y > /sys/module/zswap/parameters/enabled
Nach dem Reboot wieder mit "head /sys/module/zswap/parameters/*" kontrollieren. - Falls rc.local bei euch nicht genutzt wird, kenne ich keine weitere Alternative.
 
Zuletzt bearbeitet: (rc.local aktualisiert (2/3 bzw. 3/4 Rechnung entfernt) und zSwap ans Ende gesetzt.))
  • Gefällt mir
Reaktionen: Deinorius, bart0rn, ufopizza und 2 andere
Bei 8GB RAM verwende ich:
zswap.enabled=1 zswap.compressor=lz4hc zswap.max_pool_percent=20 zswap.zpool=z3fold

und vm.swappiness = 5

Man kann das Kompressionsverhältnis bestimmen:
cd /sys/kernel/debug/zswap && perl -E "say $(cat stored_pages) * 4096 / $(cat pool_total_size)"
 
@0x7c9aa894: Danke für den Tipp mit dem Kompressionsverhältnis, aber deine zSwap-Einstellungen sind absurd:

Mit der Swappiness (0-100) legt man fest, wie früh/spät ausgelagert wird: Standard ist 60, so dass das eher etwas früher geschieht.

Damit die Kompression (ich nutze zRAM) früh genug anfangen kann und im RAM Datenträgerzugriffe ja sowieso egal sind, hatte ich die Swappiness sogar eine Zeit lang auf 80 erhöht. Da ich aber keine Unterschiede gegenüber 60 bemerken konnte, lasse ich es inzwischen wieder auf Standard.

Mit 5 wird dagegen erst sehr spät ausgelagert (quasi kurz bevor der Kernel anfängt Tasks zu killen, um Speicher frei zu bekommen), wo die Geschwindigkeit dann doch relevant wird: Dafür ist lz4hc schlechtest mögliche Wahl!

Um das nachvollziehbar zu vergleichen, habe ich hier das aktuelle LibreOffice-still geladen, entpackt (ergibt ein unkomprimiertes .tar), mit lz4/zstd komprimiert und dabei die Zeit gemessen. - Alles in der RAM-Disk (tmpfs), um bremsende Datenträgerzugriff auszuschließen:
Code:
unzstd libreoffice-still-7.3.6-3-x86_64.pkg.tar.zst
time lz4 libreoffice-still-7.3.6-3-x86_64.pkg.tar
time lz4 -9 libreoffice-still-7.3.6-3-x86_64.pkg.tar
time lz4 --best libreoffice-still-7.3.6-3-x86_64.pkg.tar
time zstd libreoffice-still-7.3.6-3-x86_64.pkg.tar
lz4hc ist einfach nur lz4 mit der höchsten Kompressionsstufe, wobei mir (nach "man lz4") aber nicht klar wird, ob damit "-9", oder gar "--best" (was "-12" entspricht) gemeint ist: Letzeres ist noch viel langsamer, komprimiert aber fast genauso schlecht wie "-9".

Ich habe das jeweilige Ergebnis dann mit der Dauer benannt und nach Größe sortiert ("ls -gGS --block-size=K") auflisten lassen (die Zugriffsrechte habe ich manuell entfernt):
Code:
422120K 16. Okt 13:52 libreoffice-still-7.3.6-3-x86_64.pkg.tar
221332K 16. Okt 13:52 1,471s.lz4
191299K 16. Okt 13:52 '17,522s -9.lz4'
190779K 16. Okt 13:52 '69,413s --best.lz4'
169615K 16. Okt 13:52 2,557s.zst

Also im schlimmsten Fall (lz4hc = "--best") ist lz4hc 27x langsamer als zstd, komprimiert aber trotzdem 12,5% schlechter!

Das solltest du vielleicht nochmal überdenken… ;)

Nachtrag: Ich sehe gerade, dass die Dateidaten identisch sind: Offenbar übernehmen lz4/zstd das Datum vom Original. - Gemacht habe ich das eben erst: Also heute vor ner halben Std., oder so.
 
Zuletzt bearbeitet:
Gerade gefunden:

Hier gibt es ein "zswap-stats"-Skript: https://gist.github.com/phizev/31185a30e7d4984724f1fbbf9c2afe19

Edit: Falls die Seite mal nicht erreichbar ist:
Code:
#! /bin/sh -

ENABLED=$(cat /sys/module/zswap/parameters/enabled)
COMPRESSOR=$(cat /sys/module/zswap/parameters/compressor)
ZPOOL=$(cat /sys/module/zswap/parameters/zpool)
PAGE_SIZE=$(getconf PAGE_SIZE)
STORED_PAGES=$(cat /sys/kernel/debug/zswap/stored_pages)
POOL_TOTAL_SIZE=$(cat /sys/kernel/debug/zswap/pool_total_size)

POOL_SIZE=$(numfmt --to=iec-i $POOL_TOTAL_SIZE)

if [ "$POOL_TOTAL_SIZE" = "0" ]
then
        DECOMPRESSED_SIZE="N/A"
        RATIO="N/A"
else
        DECOMPRESSED_SIZE=$(echo "$STORED_PAGES * $PAGE_SIZE" | bc | numfmt --to=iec-i)
        RATIO=$(echo "scale=3; $STORED_PAGES * $PAGE_SIZE / $POOL_TOTAL_SIZE" | bc -l)
fi

echo "Zswap enabled:            $ENABLED"
echo "Compressor:               $COMPRESSOR"
echo "Zpool:                    $ZPOOL"
echo
echo "Page size:                $PAGE_SIZE"
echo "Stored pages:             $STORED_PAGES"
echo "Pool size:                $POOL_SIZE"
echo "Decompressed size:        $DECOMPRESSED_SIZE"
echo "Page compression ratio:   $RATIO"

if [ "$1" = "-v" ]
then
        echo
        grep -R . /sys/kernel/debug/zswap/
        grep -R . /sys/module/zswap/parameters/
fi

Leider kann ich das nicht ausprobieren, da ich gerade festgestellt habe, dass bei Artix wenigstens seit Kernel 5.18 der Ordner "/sys/kernel/debug/" komplett leer ist, also auch kein "zswap" enthält.

Ich habe noch ein altes ISO von Januar gefunden, dass noch den Kernel 5.16 nutzt: Da gibt es das noch. - Nicht aber beim aktuellen 5.15-LTS und auch nirgendswo anders im sysfs konnte ich "zswap" finden.

@0x7c9aa894:

Eigentlich wollte ich einen Praxis-Test zRAM/zSwap/nichts von beiden machen, aber ohne dass ich das überwachen kann, weiß ich ja nicht was passiert.
 
Zuletzt bearbeitet:
zswap-stats:

Code:
Zswap enabled:            Y
Compressor:               lz4hc
Zpool:                    z3fold

Page size:                4096
Stored pages:             15785
Pool size:                20Mi
Decompressed size:        62Mi
Page compression ratio:   3.092
Ergänzung ()

Also die Story ist etwas länger. Zuerst hatte ich auch swappiness auf 60, aber nach ca. 6 Wochen hat meine SSD 2 Blöcke verloren. Also habe ich erst mal swap abgeschaltet. Aber wenn zuviele TABs auf sind, dann geht der Speicher aus. Und Linux bleibt einfach stehen. Also da werden keine Tasks beendet oder so, das Teil steht sill. Jetzt habe ich trim enabled und die swappiness auf 10 hoch gesetzt. Davon ist sind die stats.

lz4 und zstd haben einen einbegauten benchmark:

Code:
lz4 -b#:
1#Synthetic 50%     :  10000000 ->   5859357 (1.707), 387.4 MB/s ,3143.1 MB/s
12#Synthetic 50%     :  10000000 ->   4523250 (2.211),  14.5 MB/s ,1599.5 MB/s

zstd -b#:
1#Synthetic 50%     :  10000000 ->   3154223 (x3.170),  117.5 MB/s,  715.1 MB/s
12#Synthetic 50%     :  10000000 ->   3362876 (x2.974),   7.60 MB/s,  282.2 MB/s

Das sind also compression und decompression. Und richtig lz4hc comprimiert sehr langsam. Also habe ich wieder auf lz4 umgestellt. (und dann vergessen ein "update-grub" zu machen)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Caramon2
0x7c9aa894 schrieb:
Also die Story ist etwas länger. Zuerst hatte ich auch swappiness auf 60, aber nach ca. 6 Wochen hat meine SSD 2 Blöcke verloren. Also habe ich erst mal swap abgeschaltet. Aber wenn zuviele TABs auf sind, dann geht der Speicher aus.
Firefox?

Dazu habe ich schon viel schlechtes gelesen, bzgl. sehr viele (unnötige) Schreibzugriffe und RAM-Verbrauch: Scheint ja praktisch schon ein Synonym für Speicherlecks zu sein.

Ich nutze Opera seit der Version 5, habe aber auch nie so viele Tabs auf, dass RAM selbst bei 4 GiB zu einem Problem wird: Ohne Swap, nur mit zRAM. Eine Swap mit zSwap habe ich nur beim alten PC meines Vaters eingerichtet, da der nur 2 GiB RAM hat.

Ich lege übrigens den Browser-Cache ins RAM (auch beim PC meines Vaters), um der SSD die Schreibzugriffe zu ersparen und damit der Browser in jeder Session mit einem leeren Cache starten kann, statt mit einem immer mehr zugemüllten, von dem das meiste sowieso nicht mehr gebraucht wird.

0x7c9aa894 schrieb:
Und Linux bleibt einfach stehen. Also da werden keine Tasks beendet oder so, das Teil steht sill.
Ich habe auch nur davon gelesen. Zu wenig RAM hatte ich im normalen Betrieb noch nie. Auch nicht beim PC meines Vaters, aber da achte ich natürlich darauf, nicht zu viel offen zu haben.

0x7c9aa894 schrieb:
z4 und zstd haben einen einbegauten benchmark:
Ich teste lieber mit praxisnahen Daten.

0x7c9aa894 schrieb:
Und richtig lz4hc comprimiert sehr langsam. Also habe ich wieder auf lz4 umgestellt. (und dann vergessen ein "update-grub" zu machen)
Das kenne ich auch. :)



Nachtrag:

Für die RAM-Disk lege ich in der fstab /tmp/ ins RAM (bei Solus nicht nötig, da es das standardmäßig macht):
Code:
tmpfs /tmp tmpfs nosuid,huge=always,size=90% 0 0
(ich habe 32 GiB RAM, deshalb 90% - standardmäßig werden nur 50% genutzt)

Eigentlich könnte ich das auch auf 90% erhöhen, aber eine so große RAM-Disk brauchte ich bisher noch nicht, also lasse ich es einheitlich mit zRAM bei 75%

Um es einzurichten, habe ich mir eine "autostart.sh" erstellt, die ich beim Start ausführen lasse:
Code:
#!/bin/bash
mkdir -p /tmp/ramdisk
for v in mesa_shader_cache falkon opera thumbnails transmission
do if [ -d ~/.cache/$v ];then rm -rf ~/.cache/$v;fi
ln -s /tmp/.cache/$v ~/.cache/$v
mkdir -p /tmp/.cache/$v
done
pactl set-sink-volume 0 40%

Also z. B. auch mit den Daumennägel möchte ich mir die SSD nicht zumüllen: Es wird je Eintrag geprüft, ob es ein richtiges Verzeichnis ist und falls ja, es gelöscht, im RAM erstellt und per Symlink umgeleitet.

Ich hatte auch schon mal das komplette "~/.cache/" ins RAM gelegt. Damit gab aber Probleme (welche, weiß ich nicht mehr).
 
Zuletzt bearbeitet: (tmpfs auf "huge=always" geändert)
0x7c9aa894 schrieb:
lz4 und zstd haben einen einbegauten benchmark:
Bei den Benches kann man auch Dateien übergeben. - Neuerdings auch bei lz4 - zumindest meine ich, dass das früher dort nicht möglich war.

Ich habe die Stufen 1 (Standard von lz4), 3 (Standard von zstd), 9 (wird bei "man lz4" als "high compression" bezeichnet) und 12 (lz4 --best) damit durchlaufen lassen.

Zwischen Synthetic und "richtiger" Datei gibt es teilweise deutliche Unterschiede (instbes. bei den lz4-Stufen 9 und 12 - reproduzierbar!):
Code:
$ zstd -b1;zstd -b3;zstd -b9;zstd -b12;echo "----------------";zstd -b1 libreoffice-still-7.3.6-3-x86_64.pkg.tar;zstd -b3 libreoffice-still-7.3.6-3-x86_64.pkg.tar;zstd -b9 libreoffice-still-7.3.6-3-x86_64.pkg.tar;zstd -b12 libreoffice-still-7.3.6-3-x86_64.pkg.tar;echo "----------------";lz4 -b1;lz4 -b3;lz4 -b9;lz4 -b12;echo "----------------";lz4 -b1 libreoffice-still-7.3.6-3-x86_64.pkg.tar;lz4 -b3 libreoffice-still-7.3.6-3-x86_64.pkg.tar;lz4 -b9 libreoffice-still-7.3.6-3-x86_64.pkg.tar;lz4 -b12 libreoffice-still-7.3.6-3-x86_64.pkg.tar
1#Synthetic 50% : 10000000 -> 3154223 (x3.170), 281.3 MB/s, 1160.3 MB/s
3#Synthetic 50% : 10000000 -> 3230847 (x3.095), 146.1 MB/s, 899.2 MB/s
9#Synthetic 50% : 10000000 -> 3357642 (x2.978), 45.4 MB/s, 598.0 MB/s
12#Synthetic 50% : 10000000 -> 3362876 (x2.974), 19.4 MB/s 555.4 MB/s
----------------
1#-3-x86_64.pkg.tar : 432250880 -> 185987892 (x2.324), 279.4 MB/s, 853.0 MB/s
3#-3-x86_64.pkg.tar : 432250880 -> 173609683 (x2.490), 192.0 MB/s, 790.0 MB/s
9#-3-x86_64.pkg.tar : 432250880 -> 160615851 (x2.691), 44.9 MB/s, 819.3 MB/s
12#-3-x86_64.pkg.tar : 432250880 -> 159495117 (x2.710), 20.4 MB/s, 824.8 MB/s
----------------
1#Synthetic 50% : 10000000 -> 5859357 (1.707), 498.8 MB/s ,3851.0 MB/s
3#Synthetic 50% : 10000000 -> 4560720 (2.193), 56.9 MB/s ,2096.3 MB/s
9#Synthetic 50% : 10000000 -> 4529565 (2.208), 47.4 MB/s ,2079.4 MB/s
12#Synthetic 50% : 10000000 -> 4523250 (2.211), 21.1 MB/s ,2081.7 MB/s
----------------
1#-3-x86_64.pkg.tar : 432250880 -> 226597028 (1.908), 457.8 MB/s ,2441.3 MB/s
3#-3-x86_64.pkg.tar : 432250880 -> 199945099 (2.162), 58.0 MB/s ,2355.4 MB/s
9#-3-x86_64.pkg.tar : 432250880 -> 195745791 (2.208), 25.8 MB/s ,2420.2 MB/s
12#-3-x86_64.pkg.tar : 432250880 -> 195212105 (2.214), 6.3 MB/s ,2410.5 MB/s
Außerdem weiß man ja nicht, in wie weit die Benches von lz4/zstd überhaupt miteinander vergleichbar sind. - Das sind sich ja nicht mal mit sich selbst, je nachdem ob eine Datei übergibt, oder nicht.

Wie gesagt: Ich teste lieber praxisnah.

Interessant ist übrigens, dass xz mit Stufe 1 schneller und besser komprimiert, als zstd in den höheren Stufen ("-T0" = Multithreading mit Autodetect der Threadanzahl):
Code:
$ time zstd -12T0 libreoffice-still-7.3.6-3-x86_64.pkg.tar
libreoffice-still-7.3.6-3-x86_64.pkg.tar : 36.95% ( 412 MiB => 152 MiB, libreoffice-still-7.3.6-3-x86_64.pkg.tar.zst)
real 0m8,765s

$ time xz -1kvT0 libreoffice-still-7.3.6-3-x86_64.pkg.tar
libreoffice-still-7.3.6-3-x86_64.pkg.tar (1/1)
100 % 148,9 MiB / 412,2 MiB = 0,361 51 MiB/s 0:08
real 0m8,128s

$ ls -GghS
413M 16. Okt 13:52 libreoffice-still-7.3.6-3-x86_64.pkg.tar
153M 16. Okt 13:52 libreoffice-still-7.3.6-3-x86_64.pkg.tar.zst
149M 16. Okt 13:52 libreoffice-still-7.3.6-3-x86_64.pkg.tar.xz
Ich nutze zstd deshalb nur bis Stufe 9, da das für mich das beste Verhältnis zwischen guter Kompression und Dauer bietet. Soll es besser komprimiert werden, nehme ich xz.

Soll es bestmöglich komprimiert werden und es ist egal wie lange es dauert, nutze ich xz mit der höchsten Kompressionsstufe und maximaler Wörterbuchgröße.

Bei 7zip erreicht man das so: "7z a -mx -mqs -m1=lzma:d=4G"

Aber Vorsicht: Das benötigt ca. 10,5x so viel RAM wie die Wörterbuchgröße!

Bei dem 4 GiB Wörterbuch also ca. 42 GiB RAM, so dass ich es mit meinen 32 GiB nur mit zRAM nutzen kann (womit wir wieder beim Thema sind ;) ):

Bei einem Test mit dem "TwisterOSLiteV2-1-2.img" (4,8 GiB - Das tatsächlich genutzte Wörterbuch wird nur so groß, wie die zu komprimierenden Daten) wurden ins zRAM bis zu 14,8 GiB ausgelagert, die dann auf 6,6 GiB komprimiert waren (zstd - mit lz4 hätte das vermutlich nicht funktioniert).

Da das zRAM dabei stark genutzt wurde, also ständig größere Datenmengen komprimiert und wieder dekomprimiert werden mussten, hat es 43 Min. - gegenüber 19 Min. mit einer Wörterbuch bei der zRAM nicht genutzt werden muss. - Das Archiv wurde dann aber auch ca. 5% schlechter komprimiert.

Nachtrag:

Ich habe das Image gerade in eine {lz4,zstd}-zRAM-Disk kopiert. Das geschah mit lz4 zwar 3,2x schneller, es wurde dafür aber 26,5% schlechter komprimiert:
Code:
$ zramctl -bo algorithm,disksize,data,compr
ALGORITHM    DISKSIZE       DATA      COMPR
zstd       5368709120 5139636224 2297614555
lz4        5368709120 5139636224 2906869163

Wie gesagt: Bei einer zRAM-Disk ist mir die Geschwindigkeit wichtiger, deshalb nutzt mein mkzram-Skript (s. o.) standardmäßig lz4, für die zRAM-Swap und zSwap ist m. E. zstd aber immer die beste Wahl: Auch bei dem lahmen PC meines Vaters: ein 2 GHz AMD K9.
 
Zuletzt bearbeitet:
Caramon2 schrieb:
Bei einem Test mit dem "TwisterOSLiteV2-1-2.img" (4,8 GiB - Das tatsächlich genutzte Wörterbuch wird nur so groß, wie die zu komprimierenden Daten) wurden ins zRAM bis zu 14,8 GiB ausgelagert, die dann auf 6,6 GiB komprimiert waren (zstd - mit lz4 hätte das vermutlich nicht funktioniert).
Vertrauen ist gut, Kontrolle ist besser. :)

Da ich eine neue Installation vorbereite, habe ich ein frisches, noch rel. rudimentäres System, das ich noch weiter abgespeckt habe, indem ich Hintergrundbild und Trasparenzen deaktiviert habe.

Dort habe ich das mit lz4 getestet und es lief doch doch: s. Anang A - Maximal waren 17,7 GiB ausgelagert, die auf 9,5 GiB komprimiert wurden.

Anang B das gleiche mit zstd: Max. 14,3 GiB ausgelagert = 6,2 GiB komprimiert.

Die CPU-Zeit von 7zip war bei beiden durchläufen gleich ("user"), aber zstd hat 10 Min. mehr als lz4 gebraucht ("sys"), wodurch das komprimieren 9 Min. länger dauerte ("real"):

Obwohl bei l4z also mehrere GiB mehr im zRAM gearbeitet wurden (=ständiges komprimieren/dekomprimieren), ist es so viel schneller, dass das Image unterm Strich trotzdem noch deutlich schneller komprimiert wurde.

Bei zstd hat man dagegen mehr Reserven: Da solche Gewaltaktionen eher selten sind, denke ich "besser haben und nicht brauchen, als umgekehrt" und bleibe bei meiner zstd-Empfehlung.

Auffälig ist, dass obwohl fast nichts mehr im zRAM ist, bei "MEM-USER" trotzdem noch 10,1 GiB (lz4) bzw. 6,5 GiB (zstd) angegeben sind, wobei ich aber nicht weiß, was das bedeutet: Räumen die beide nicht vernünftig hinter sich auf?

Da meine obige 50:50 Rechnung (3/4 RAM und 1/4 zRAM, dass durch zstd auf 3/4 komprimiert wird) mit lz4 und 75% nicht passt, da es kaum 2:1 schafft, habe ich es nochmal mit 2/3 RAM und 1/3 zRAM, das durch lz4 auf 2/3 komprimiert wird (Sorry: Ich jongliere gerne mit Zahlen. :) ), nochmal getestet: Anhang C *)

Trotz kleinerem zRAM wurden dabei aber sogar max. 18,0 GiB (9,8 GiB komprimiert) ausgelagert. - Da ich jedesmal frisch gebootet, erst nach 3 Min. das komprimieren gestarte und dann nichts mehr am PC gemacht habe, kann das keine anderen Ursachen haben.


*) Durch das konzentriere betrachten wenn die zRAM-Belegung strieg, kam es bei Augenbewegungen zu störenden Schatteneffekte durch nachleuchten auf der Netzhaut. Deshalb habe ich beim letzten Durchlauf aufs dunkle Design gestellt, da ohne helle Flächen ja nichts nachleuchten kann.

Aber das war nichts:

Ich bin Brillenträger und nicht nur kurzsichtig, sondern habe auch einen "Zylinder" (so nannte der Augenarzt das damals) in meiner Optik.

Also: dunkel = weniger Licht = größere Pupillen = Sehfehler wird gravierender

Dadurch konnte ich den Text schlechter fokussieren, wodurch es schnell zu anstrengend wurde und ich immer länger den Blick auf was anderes richten musste, um die Augen zu entlasten.

Ein dunkles Design geht für mich fast in Richtung Selbstverstümmelung:

Am liebsten hätte ich wieder aufs helle Design umgestellt, aber das wäre zusätzliche Speichernutzen gewesen und ich wollte die Ergebnisse nicht verfälschen.

Ein dunkles Design sieht im ersten Moment vielleicht hübscher aus, aber ich kann mir nicht vorstellen, wie man damit (selbst mir gesunden Augen: auch da wird die Pupille größer und das Bild schlechter zu fokussieren) auf Dauer konzentriert arbeiten soll.

Es heißt ja nicht grundlos schon seit Generationen, dass man nicht bei unzureichendem Licht lesen soll, weil man sich damit die Augen verdirbt.
 

Anhänge

  • A-lz4-17,7G-9,5G.png
    A-lz4-17,7G-9,5G.png
    63,9 KB · Aufrufe: 185
  • B-zstd-14,3G-6,2G.png
    B-zstd-14,3G-6,2G.png
    63,6 KB · Aufrufe: 191
  • C-lz4-18,0G-9,8G.png
    C-lz4-18,0G-9,8G.png
    65,5 KB · Aufrufe: 178
@0x7c9aa894: Etwas hatte ich noch gar nicht bedacht (aus dem z3fold-Link oben):
To keep the determinism and simplicity, z3fold, just like zbud, always stores an integral number of compressed pages per page, but it can store up to 3 pages unlike zbud which can store at most 2. Therefore the compression ratio goes to around 2.7x while zbud's one is around 1.7x.
Ich verstehe das so, dass es (im Gegensatz zu zRAM) nicht dynamisch komprimieren kann, sondern dass es entwerder 2 oder 3 Speicherseiten in eine packen kann: Also kann es niemals besser als 1:3 komprimieren und wenn etwas z. B. nur 1:2,9 komprimiert werden kann, bekommt nur 2 Speicherseiten in einer, errecht dabei also effektiv nur 1:2

Da lz4 durchschnittlich nicht mal ganz 1:2 schafft, kann es z3fold oft also gar nicht auslasten: zbud dürfte damit nicht gravieren schlechter sein. (nur zur Veranschaulichung: das ist keine Empfehlung)

Damit z3fold seine max. 1:3 effektiv nutzen kann, muss der Kompressor also durchschnittlich mindestens auf 1:3 komprimieren können.

Dass bei deinen zswap-stats oben 1:3 geschafft wurden, lag nicht zuletzt an lz4hc, aber vor allem daran, dass die ersten paar hunter MB, die ausgelagert werden, sehr gut komprimierbar sind: zRAM+zstd schafften bei meinen Test dabei zuerst über 1:10.

Oder sieh dir einfach meine letzten Screenshots an: Die ~285M, die anschließend noch in der Swap waren, wurden mit zstd auf ca. 35M komprimiert und selbst mit lz4 noch auf 57-58M: Das ist immer noch deutlich besser, als nur 1:3, die bei zSwap maximal möglich sind.

Meine Empfehlung bleibt:

zSwap sollte man ausschließlich dann nutzen, wenn man eine physische Swap zwingend braucht: Also bei nur 2 GiB RAM, oder wenn man auf den Ruhezustand (suspend to disc) nicht verzichten kann. Für suspend to RAM wird die nicht benötigt.

Ansonsten hat zRAM gravierende Vorteile.

Außer man hat noch weniger als 2 GiB RAM: Dann würde ich gar keine Kompression im RAM nutzen, da man dafür keines übrig hat.

Btw:

Im Arch-Wiki habe ich entdeckt, dass die Swappiness seit Kernel 5.8 auf 0-200 gesetzt werden kann: 60 ist weiterhin Standard, so das 0-100 offenbar unverändert sind, also kann man die Swap jetzt noch stärker als vorher priorisieren.

Unter welchen Umständen das Sinn macht, weiß ich nicht, aber da ich bei 60->80 keinen Unterschied feststellen konnte, braucht man das vielleicht, damit sich überhaupt was relevantes tut.

Falls das jemand testen will: Ich habe oben zu meiner rc.local ein auskommentiertes Swappiness 100 hinzugefügt. Das könnt ihr beliebig anpassen.

Nachtrag:

Ich habe die "C"-Einstellungen (lz4, 2/3) jetzt noch mit Swappiness 100 und 200 getestet:

Auch bei 100 gab es keine erkennbare Änderung zu 60 und bei 200 nur marginal:

Als 7zip bei 53% war, wurden bisher nur 1,4 MiB ausgelagert und dann erst mal der Datenträger-Cache reduziert: Bis auch ca. 450 MiB (bei ca. 60%) und erst dann wurde großmaßstäblich ausgelagert.

Bei 200 passierte das an den gleichen Stellen, nur dass im ersten Schwung knapp 200 MiB ausgelagert wurden und das "richtige" Swapping schon bei ca. 550 MiB begann. - Im weiteren Verlauf wurde der Datenträger-Cache dann sogar noch auf ca. 670 MiB erhöht.

Also das große Swapping lagert nicht früher aus, sondern nur tendenziell mehr und hält dafür den Datenträger-Cache etwas größer. - Das kann man auch bei den Screenshots erkennen: bei A-C waren es anschließend noch ca. 220 MiB, bei D dagegen 560 MiB.

Dass es bei D länger gedauert hat, liegt daran dass ich den "scaling_governor" auf "schedutil" gelassen habe, während ich vorher auf "performance" gestellt hatte, damit die CPU nicht städig rauf und runter getaktet wird, weil 7zip nur 2 Threads nutzt, die ständig zwischen den Kernen verschoben wurden: Ich wollte wissen, wie viel das ausmacht: Bei der Dauer nicht sehr viel, aber die CPU-Zeiten von 7zip ("user") unterscheiden sich deutlich.

Ach ja: Mein obiges 1:10 bei den ersten paar ausgelagerten MiB war noch stark untertrieben: Selbst als schon 2 GiB ausgelagert waren, waren das komprimiert nur 48 MiB: ca. 1:40 !!! - Trotz nur lz4!

Erst dann wurde das Kompressionsverhältnis schnell immer schlechter: Max. waren 18,3 GiB ausgelagert und belegten komprimiert 9,6 GiB, womit wir wieder bei den für lz4 typischen "nicht ganz 1:2" waren.
 

Anhänge

  • D-lz4-18,3G-9,6G-sw200.png
    D-lz4-18,3G-9,6G-sw200.png
    66,6 KB · Aufrufe: 165
Zuletzt bearbeitet:
Also ich habe mal zramswap ausprobiert. Hier sind sie Ergebisse:
Code:
top - 21:20:04 up 25 min,  1 user,  load average: 1.16, 1.26, 1.48
Tasks: 286 total,   2 running, 284 sleeping,   0 stopped,   0 zombie
%Cpu(s): 41.1 us,  5.5 sy,  0.0 ni, 53.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7724.3 total,    242.1 free,   6060.6 used,   1421.6 buff/cache
MiB Swap:   4094.0 total,    664.7 free,   3429.2 used.    513.3 avail Mem 


NAME       ALGORITHM DISKSIZE  DATA  COMPR  TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd            4G  3.2G 773.8M 804.5M       4 [SWAP]

Mit zstd komme ich auf einen Kompressionsfaktor von ca. 4x, mit lz3 auf ca. 2-3.
Die swappiness habe ich auf 80 gesetzt.
 
  • Gefällt mir
Reaktionen: Caramon2
Hallo.

Durch die viele testerei hatte ich die letzten Tage erst mal genug vom PC.

Im ersten Beitrag habe ich hinzugefügt, dass ich mittlerweile von zSwap abrate, da es kontraproduktiv ist:

Ich habe für die Tests das alte Artix auf einer USB3-SSD installiert, gebootet und aktualisiert (u. a. Kernel 6.0), und auch 7zip arbeitete ausschließlich darauf, einzig die Swap-Partition hatte ich auf der internen SSD, so dass die HD-LED ausschließlich Zugriffe auf die Swap zeigte.

Zuerst habe ich zSwap so wie zRAM konfiguriert (25%+zStd) und zusätzlich eine 4 GiB Swap, da zSwap die ja voraussetzt.

Obwohl das BS damit damit theoretisch 4 GiB mehr als mit zRAM hatte, brach 7zip schon bei 69% ab: Kurz vorher habe ich einen Screenshot gemacht, dann blockierte das System ca. eine halbe Minute (mit nahezu konstant leuchtender(!) HD-LED) und anschließend habe ich den zweiten Screenshot: Anhang E+F

Hier ein Ausschnitt von Anhang E:

E-zSwap_s.png

Obwohl bei meinen 32 GiB RAM 25% ca. 8 GiB sind, war der Pool nur mit 413 MiB belegt, was unkomprimiert 1,1 GiB waren.

Unter den gleichen Umständen belegte die zRAM-Swap (vollständig im RAM) max. 6,2 GiB, was unkomprimiert 14,3 GiB waren: Auf die SSD wurde dabei gar nichts ausgelagert (geschweige denn mit konstant leuchtender HD-LED), da es ja nicht mal eine Swap-Partition/-Datei gab.

Sowas hatte ich schon bei einem vorherigen Test mit zSwap (auch bei 69% abgebrochen), aber da mein Produktivsystem unter "/sys/kernel/debug/" nichts anzeigt, konnte ich zSwap nicht kontrollieren und dachte, es würde vielleicht nicht funktionieren. - Das RAM dafür wurde aber reserviert, da 7zip mit deaktiviertem zSwap erst bei 72% abbrechen musste.

Ich habe es dann mit dem Livesystem (Kernel 5.16 und 20%+lz4, da sich zSwap-Konfiguration beim Livesystem nicht ändern ließ) in einer VM mit 8 GiB RAM und unterschiedlichen Swap-Partitionsgrößen getestet, um auszuschließen dass die 32 GiB RAM das Problem sind. Aber daran lag es nicht:

Offenbar muss die Swap-Partition/-Datei mindestens so groß sein, wie unkomprimiert ins zSwap passt: Ich bräuchte also eine 24 GiB Swap-Partition, damit zSwap mit zstd die 25% Poolgröße überhaupt erreichen kann.

Hier (das ist bei Artix die Standardschriftgröße), als die HD-LED anfing intensiv zu leuchten, die Swap also stark beansprucht wurde:

G-zSwap_8G.png

Die 1,4 GiB Poolgröße passen zu den 20% der 8 GiB RAM (abzgl. dem, was das System für sich reserviert) und da der voll war, wurde massiv auf die Swap zugegriffen. Aber auch schon vorher gab es laufend Zugriffe: Schon gleich bei den ersten paar MiB, die ausgelagert wurden.

Offenbar wird das gleich in die Swap geschrieben und nur zusätzlich komprimiert im RAM gepuffert: Die Schreiblast sinkt dadurch also nicht, sondern man hat durch den reservierten Puffer weniger RAM zur Verfügung, wodurch sogar früher ausgelagert werden muss. - Im Gegensatz dazu wird der normale Dateiträgercache (der m. W. auch Zugriffe auf die Swap cached) immer weiter reduziert (in diesem Fall auf 121 MiB), um möglichst spät auslagern zu müssen.

Ich habe es dann nochmal mit dem direkt gebooteten Livesystem (also 32 GiB RAM und 20%+lz4 zSwap) getestet:

Wieder mit 4 GiB Swap, da ich keine zig GiB Schreiblast erzeugen wollte, nur um zu testen, ob 7zip dann auch mit zSwap durchläuft. - Gegenüber gar keiner Schreiblast bei zRAM: 0 Byte statt zig GiB Schreiblast, für das selbe Ergebnis!

Hier leuchtete die HD-LED das erste Mal auf (gleich bei den ersten ausgelagerten Bytes):

H-zSwap_1.png

Hier war die Swap-Partition wieder am Anschlag (wieder nur ein paar hundert MiB Poolgröße, statt etwas über 6 GiB: 20% von 32 GiB):

H-zSwap_2.png

(überraschenderweise 1:5 komprimiert, obwohl z3fold nur max. 1:3 schaffen soll)

Und Exitus:

H-zSwap_3.png

(schon bei 68%, da das Livesystem (GTK-Community-Edition) MATE nutzt, ich dagegen Xfce)

Also kurz zusammengefasst:

zSwap ist böse! Finger weg! ;)

Ich hoffe, ich habe das einigermaßen verständlich erklärt, da ich nicht noch mehr Zeit mit zSwap verschwenden will.
 

Anhänge

  • E-zSwap.png
    E-zSwap.png
    62,2 KB · Aufrufe: 183
  • F-zSwap.png
    F-zSwap.png
    62,7 KB · Aufrufe: 175
  • Gefällt mir
Reaktionen: 0x7c9aa894
Caramon2 schrieb:
Nach einem Reboot ist eine (z)RAM-Disk (einschließlich Inhalt) natürlich weg.
Nicht unbedingt. Wenn man die RAM-Disk in einen reservierten Bereich legt, ist sie auch nach einem (Soft-)Reset noch da.
 
  • Gefällt mir
Reaktionen: Caramon2
Uridium schrieb:
Nicht unbedingt. Wenn man die RAM-Disk in einen reservierten Bereich legt, ist sie auch nach einem (Soft-)Reset noch da.
Wie setzt man das praktikabel um? - Die (z)RAM-Disk soll keinen fest reservierten Speicher nutzen, sondern nur so viel, wie sie wirklich enthält.

Das wäre sehr praktisch, wenn man im Eifer des Gefechts rebootet und man erst dann daran denkt: "Scheiße! Ich hatte ja noch was in der RAM-Disk!" ;)

Ich hatte mir schon überlegt, den Inhalt der RAM-Disk beim runterfahren automatisch sichern zu lassen und beim booten wiederherzustellen (es würde also auch ein "poweroff" überstehen), aber das war es mir dann doch nicht wert: Normalerweise ist das bei mir nicht erhaltenswert, ansonsten muss ich eben aufpassen.

Noch was zu zRAM:

- Ich hatte neulich schon die "rc.local" im ersten Beitrag verschlankt: Ursprünglich hatte ich bei "mkswap" einen Namen vergeben lassen, was unnötig war, da der nirgendswo angezeigt wird und bei "swapon" eine Priorität, die auch nur kosmetisch war, da man die zRAM-Swap ja sowieso nur ohne "echte" Swap nutzen sollte, es also keine andere gibt. Auch die Discard-Option war unnötig, da nicht mehr genutzten Auslagerungsspeicher auch ohne wieder freigegeben wird.

Außerdem hatte ich die Berechnung von 75/100 auf 3/4 vereinfacht und eben noch das mit lz4 hinzugefügt.


- Bei Ubuntu und Derivaten gibt es "zram-config", das eine zRAM-Swap einrichtet: Das besser nicht installieren, da es für jeden Kern eine zRAM-Swap anlegt und fest 50% des RAMs nutzt:

Ich hatte damals noch 16 GiB aber schon den Octacore, d. h. es wurden 8 zRAM-Swaps mit je ca. 1 GiB erstellt.

Das war vollkommen unnötig, da zRAM nur in der allerersten Version (afaik Kernel 3.13) nicht multithreadingfähig war. Schon im nächsten Kernel wurde das geändert, so dass ich also 8 zRAM-Swaps hatte, von denen jede 8 Threads nutzte, was man leicht mit "zramctl" kontrollieren kann (s. Streams):
Code:
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd         23,5G   4K   59B    4K       8 [SWAP]
Als ich damals danach gesucht habe, habe ich mehrere (auch ältere) Stellen gefunden, wo das bemängelt wurde. Aber offenbar hat Ubuntu es nicht nötig das Paket zu aktualisieren.

Oder haben die das inzwischen doch gemacht? - Zuletzt hatte ich das bei LinuxMint 20 kontrolliert, also Ubuntu 20.04-LTS.


- Bei Solus-Linux werden die Module für zRAM und zSwap aus dem Kernel entfernt und ich konnte auch keine Möglichkeit finden, das nachzuinstallieren. Genauso enthielt vor einigen Monaten der verwendete Kernel (5.15 oder 5.16) kein ntfs3, obwohl er es eigentlich offiziell unterstützen müsste.

Keine Ahnung, was die vielleicht sonst noch ausgebaut haben, aber da die schon fast krankhaft auf Stabilität fokussiert sind, halten die es wohl wie mein Vater: Einer seiner Lieblingssprüche war "Was man nicht hat, geht nicht kaputt."
 
Caramon2 schrieb:
"Scheiße! Ich hatte ja noch was in der RAM-Disk!"
Man kann natürlich seine RAM-Disk auf einem nicht-volatilen Datenträger synchronisieren das wenn mal was ist (Shutdown, Absturz, whatever) der RAM-Disk-Inhalt noch da ist.

Caramon2 schrieb:
Keine Ahnung, was die vielleicht sonst noch ausgebaut haben, aber da die schon fast krankhaft auf Stabilität fokussiert sind, halten die es wohl wie mein Vater: Einer seiner Lieblingssprüche war "Was man nicht hat, geht nicht kaputt."
Was ja auch nicht grundsätzlich verkehrt ist.

Ansonsten würde ich das gar nicht so hoch aufhängen. Du hast ja die Möglichkeit zu einer Distribution zu greifen die Dir passt oder Dich sogar jenseits von Distributionen zu bewegen. Von daher sind solche "Beschwerden" immer etwas seltsam.
 
  • Gefällt mir
Reaktionen: Caramon2
andy_m4 schrieb:
Ansonsten würde ich das gar nicht so hoch aufhängen. Du hast ja die Möglichkeit zu einer Distribution zu greifen die Dir passt oder Dich sogar jenseits von Distributionen zu bewegen. Von daher sind solche "Beschwerden" immer etwas seltsam.
Das war keine Beschwerde, sondern nur der Hinweis, dass man bei Solus nicht lange suchen muss, weil sich das, was ich hier beschreibe, damit nicht umsetzen lässt.

Aufgrund dessen Stabilität und weil nie eine neue Version installiert werden muss (rolling Release), empfehle ich Solus gerne Leuten, die keine besonderen Ansprüche an den PC haben.
 
Uridium schrieb:
Die Vorzüge von tmpfs und zram lassen sich damit nicht kombinieren. Die Technik ist eigentlich für die NVDIMM Simulation/Entwicklung gedacht.
https://pmem.io/blog/2016/02/how-to-emulate-persistent-memory/
https://docs.pmem.io/persistent-mem...-environments/linux-environments/linux-memmap
Ja, das wäre mir Kanonen auf Spatzen schießen.

Die Ramdisk mit der SSD zu synchronisieren wäre übrigens kontraproduktiv, da ich die Ramdisk ja extra nutze, um der SSD unnötige Schreibzugriff zu ersparen. - Quasi wie damals beim Amiga, wo das OS seine dynamische Ramdisk zur Beschleunigung genutzt hat, da man es üblicherweise von Floppy gebootet hat, weil HDDs noch viel zu teuer waren.

Aber ich hatte eine andere Idee:

Wie oben beschrieben, moute ich /tmp/ ins RAM (bei Solus übrigens nicht notwendig, da es das standardmäßig macht) und lasse beim Start dort den Ordner 'ramdisk" erstellen: Den habe ich als Lesezeichen im Dateimanager eingerichtet und nur darin arbeite ich. Alles andere unter /tmp/ ist nicht wichtig.

Ich brauche also nur beim herunterfahren prüfen lassen, ob /tmp/ramdisk/ leer ist, ansonsten wird nicht heruntergefahren/rebootet, sondern stattdessen der Dateimanager in /tmp/ramdisk/ geöffnet, damit ich nachsehen kann, was da noch ist.

So in der Art hatte ich das bei meinem Vater gelöst, da er oft vergessen hat, nachdem er was ausgedruckt hatte, den Drucker (mit echtem Netzschalter) wieder auszuschalten *): Statt den PC übers Startmenü herunterzufahren (die Option hatte ich entfernt), hatte ich ihm eine Desktop-Verknüpfung dazu erstellt, die ein Skipt startete, das per lsusb nach dem Drucker sah und falls es ihn fand, "espeak -vde " Der Drucker ist noch eingeschaltet! "" statt "poweroff" ausführte. - Er konnte den PC also nur noch herunterfahren, wenn der Drucker ausgeschaltet war.

*) PC, Monitor und Drucker hat er per schaltbarer Steckdosenleisten nach dem herunterfahren vom Netz getrennt - wenn er den Drucker nicht am Gerät ausgeschaltet hatte, lief der unnötig an, wenn mein Vater den PC wieder nutzen wollte, wobei natürlich auch (unnötig) die Trommel aufgeheizt wurde: das musste ja nicht sein…
 
Caramon2 schrieb:
Leider kann ich das nicht ausprobieren, da ich gerade festgestellt habe, dass bei Artix wenigstens seit Kernel 5.18 der Ordner "/sys/kernel/debug/" komplett leer ist, also auch kein "zswap" enthält.
Offenbar liegt das generell an runit, da auch beim alten Artix-Xfce-Runit "/sys/kernel/debug/" leer war. Nicht aber beim aktuellen stable Artix-Xfce-openrc (die Cummunity-Edition, mit der ich das getestet habe, gibt es nur als openrc). - openrc hat sich aber damals schon für mich disqualifiziert (ich nutze Artix seit Anf. 2020), da es den recovery-Mode nicht unterstützt: Man kann grob zwar entsprechend konfigurieren, aber es bootet dann trotzdem ins GUI. - Ich muss zwar nicht oft "recovern" (manchmal aber schon: ich probiere gerne was aus ;) ), aber da ich oft parallele Testinstallationen habe, möchte ich z. B. für "update-grub", oder um ein neues initramfs zu erstellen, nicht immer erst bis ins GUI booten.

Übrigens habe ich mir das aktuelle MX-Linux seit längeren mal wieder angesehen (s. hier): Auch dort war "/sys/kernel/debug/" leer. Ansonsten hätte ich damit meine zSwap-Ergebnisse verifiziert.
 
Caramon2 schrieb:
openrc hat sich aber damals schon für mich disqualifiziert
Aber liegt es tatsächlich an OpenRC oder die Art wie es die Distribution benutzt bzw konfiguriert?
Weil grundsätzlich kennt OpenRC ja verschiedene "Runlevel".
 
  • Gefällt mir
Reaktionen: Caramon2
Mir ging es damals um Artix und da war es eben so. Also war openrc keine Option. Da es immer noch so ist, offenbar keine Fehlentscheidung.

Inzwischen würde ich sowieso runit bevorzugen, da m. E. am meisten straight forward: Damals war es das einzige, bei dem der rescue Mode funktionierte und ich per /etc/crypttab meine LUKS-verschlüsselte Homepartition einbinden konnte: Das hat bei keinem der anderen funktioniert. - Ob das auch noch immer so ist, weiß ich nicht.

Die S6-Version konnte ich damals nicht mal per KVM booten. - Übrigens funktionierte das auch nicht mit Obarun. Dem einzigen anderen bei Distrowatch, das S6 nutzt.
 
Zurück
Oben