Seite 1 von 1

Geht Dir der RAM aus ?

BeitragVerfasst: Samstag 4. Februar 2012, 20:25
von Knickohr
... na, dann komprimiere ihn halt ! ;-)

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 :mrgreen:

Viel Spaß beim Ausprobieren.

Thomas

Re: Geht Dir der RAM aus ?

BeitragVerfasst: Samstag 4. Februar 2012, 20:33
von mischa
hi thomas,

vielen dank fuer diese ausfuehrliche beschreibung!!! das ist sehr nuetzlich, ich wusste hiervon nichts.

mischa

Re: Geht Dir der RAM aus ?

BeitragVerfasst: Samstag 4. Februar 2012, 20:35
von Knickohr
Na siehste.

Gestern noch schier unüberwindbare Probleme mit überlaufendem RAM und heute Nacht hat sich das quasi in Luft aufgelößt. Bin mal gespannt, wann ich an die nächste Grenze stoße :P

Ach ja, das oben beschriebene ist nur für Ubuntu 10.04LTS gültig. Bei Ubuntu 11 geht das anders, da ist es zum größten Teil schon mit implementiert. Googled einfach mal danach ! Bei anderen Pinguin-Distributionen gibts das sicher auch, aber bitte, ich weiß nicht, wie es da geht.

Thomas

Re: Geht Dir der RAM aus ?

BeitragVerfasst: Samstag 4. Februar 2012, 22:01
von Knickohr
Und hier der Beweis, das es prächtig funktioniert :

Bild1.gif

16GB physikalischer RAM komplett vollgefahren, System swappt 15,4GB in die ramzswap, die sich aber wiederum in den 16GB RAM befinden. Das System hat also knapp 32GB an RAM. Man sieht auch wunderschön, wie die 4 Kerne munter arbeiten und die Festplatte sich langweilt. Die swap-Partition auf der Festplatte wird nicht angefaßt. System ist stabil und reagiert erfreulich munter. Man merk kaum, das es swappt.

Der Speicherfresser, wie nicht anders erwartet, scamp ;-) Krallt sich über 26GB :shock:

Thomas

Re: Geht Dir der RAM aus ?

BeitragVerfasst: Sonntag 5. Februar 2012, 00:55
von mischa
Knickohr hat geschrieben:Der Speicherfresser, wie nicht anders erwartet, scamp ;-) Krallt sich über 26GB :shock:


Hast du mal ausprobiert, den referenzkatalog fuer dein allsky-mosaik auf mag=6 zu begrenzen anstelle von mag=10? Das sollte den speicherbedarf drastisch reduzieren.

mischa

Re: Geht Dir der RAM aus ?

BeitragVerfasst: Sonntag 5. Februar 2012, 11:20
von Knickohr
Hi,

das mache ich dann, wenn der Speicher wieder mal nicht ausreichen sollte :P

Nee, ist einfacher gesagt, als getan. Da müßte ich für alle 50 Pointings die Einzel-Astrometrie neu machen (wegen unterschiedlicher Parameter). Und dazu habe ich jetzt mal gar keine Lust :shock:

Nachtrag :

Auch die vorhandene swap-Partition läßt sich mit ramzwap noch nachträglich komprimieren, was nochmal "Speicher" bringt, wenn man die Partition nicht mehr vergrößern kann und / oder will.

Code: Alles auswählen
#!/bin/sh

modprobe ramzswap disksize_kb=24000000 memlimit_kb=12000000 backing_swap=/dev/sda5
sudo swapon /dev/ramzswap0 -p 0

exit 0

backing_swap gibt das Device der swap-Partition an.

Ich probiere gerade ein bißchen mit den Werten rum, um zu sehen, wieviel RAM sich gerade noch komprimieren läßt. Also nicht über die Werte wundern :mrgreen: 50% vom RAM sind ein sicherer Wert und lassen sich auf jedem Fall nutzen. Da die Kompression je nach Inhalt mal mehr oder weniger ist, kann man den Inhalt auch durchaus auf 1/3 drücken. Wie gesagt, ist probieren, muß nicht funktionieren ! (Nicht zum Nachahmen empfohlen !!!)

Thomas