Bei meinen vielen tausend Bildern stoße ich oft an die Grenzen des physikalischen RAM-Speichers. Weiter Aufrüsten geht halt irgendwann mal nicht mehr, wenn es die Hardware (Board) nicht mehr zuläßt. Es gibt aber einen einfachen Trick, den RAM quasi zu verdoppeln, ohne noch mehr Speicherriegel rein zu stopfen.
Komprimieren des RAM mit ramzswap (compressed swap in RAM)
Wie funktioniert das ?
Ganz einfach, wenn der physikalische RAM fast aufgebraucht ist, dann fängt Ubuntu an zu swappen. Das ist zwar genial, aber da die swap-Partition auf einer langsamen Platte liegt, kann das ein Geduldsspiel werden. So wie bei mir, nach 900 Stunden gemeinsamer Astrometrie bei 2000 Bilder habe ich den Prozeß abgebrochen, da sich Theli zu Tode swappte
Was habe ich gemacht ?
Ich habe Ubuntu so konfiguriert, das wenn es zu swappen beginnt (also den RAM auslagert), diesen zuerst komprimiert und ihn dann wieder, ja richtig, wieder zurück in den RAM schreibt. So läßt sich bei guter Konfiguration der RAM also quasi virtuell verdoppeln. Die Komprimierung bringt ca. 100% mehr RAM, da die Komprimierung die Daten ungefähr halbiert bis drittelt.
Was muß ich tun :
Ein kleines Startscript schreiben und ein Config-File anpassen.
Howto :
compressed swap anlegen
50% vom RAM als komprimierten swap im RAM anlegen
Startscript erstellen :
# sudo vi /etc/rcS.d/S99ramzswap
- Code: Alles auswählen
#!/bin/sh
modprobe ramzswap disksize_kb=16777216 memlimit_kb=8388608
sudo swapon /dev/ramzswap0 -p 0
exit 0
Die Werte müssen natürlich an den vorhandenen physikalischem RAM angepaßt werden. Bei mir 16GB RAM -> Also eine ramzswap mit 16GB und die max. (komprimierte) Größe auf 50% = 8GB. Wichtig auch der Parameter -p 0. Damit sagt ihr Ubuntu, das es die ramzwap mit höherer Priorität verwenden soll, als die swap-Partition auf der Platte. Ubuntu füllt also erst die ramzwap, bevor es auf die swap-Partiton geht. Die swap-Partition sollte aber als Notnagel weiterhin vorhanden sein. Rein theoretisch könnte man sie auch weglassen.
# sudo chmod 755 /etc/rcS.d/S99ramzswap
# sudo swapoff -a
eventuell alle swapfiles, falls vorhanden (nicht Partition !) in der /etc/fstab deaktivieren !
# sudo vi /etc/initramfs-tools/initramfs.conf
Zeile anpassen :
COMPCACHE_SIZE="50 %"
Nach einem Reboot sollte jetzt zu der üblichen swap-Partition noch einen Ramdisk mit höher Priorität existieren.
Testen :
# swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 3227640 0 -1
/dev/ramzswap0 partition 16777212 0 0
Ich habe also ein device ramzswap0 mit 16GB angelegt, das wie eine Partition auf der Festplatte aussieht, die aber direkt ins RAM geschrieben wird. Da die Daten darin komprimiert werden, vergrößert sich quasi der RAM wieder und der Inhalt paßt ohne Probleme wieder da rein. Von außen betrachtet sieht das dann so aus, als hätte ich 32GB RAM. Die sind natürlich nicht wirklich da, es erscheint nur so. Durch die Komprimierung haben aber tatsächlich 32GB im RAM Platz. Noch deutlicher wird das hier :
theli@theli:~$ free
total used free shared buffers cached
Mem: 16368000 15704748 663252 0 27192 12733528
-/+ buffers/cache: 2944028 13423972
Swap: 20004852 764 20004088
Der Wert von 20GB kommt zustande, weil da noch die physikalische swap-Partition mit hinzu gerechnet wird : 16GB + 3,2GB = knapp 20GB = 20.004.088kB
16GB MEM + 16GB ramzswap + 3,2GB swap-Partition = 35GB
Das ist natürlich kein Wundermittel und ersetzt in keinster Weise wirklichen physikalischen RAM. Wenn man aber an Hardwaregrenzen stößt, dann läßt sich der Kauf eines neuen Board oder PCs vielleicht etwas hinaus zögern. Noch ein interessanter Nebeneffekt. Fängt die Kiste an zu swappen, so beeinträchtigt das jetzt kaum mehr die Geschwindigkeit, Man merkt es fast gar nicht, wenn geswappt wird. Die Prozessorlast ist durch die Komprimierung jetzt zwar etwas höher, aber bei Multiprossesor-Kernen fällt das nicht mehr ins Gewicht.
Ach ja, zurück zu denn 900 Stunden und 2000 Dateien. Genau die gleiche Astrometrie wurde mit der ramzswap dann in knapp 5 Stunden ohne den kleinsten Hänger abgearbeitet
PS: So kann man übrigens auch alte schwachbrüstige Notebooks zu mehr RAM verhelfen und sie verjüngen und beschleunigen
Viel Spaß beim Ausprobieren.
Thomas