. .

Kompilieren im RAM (gentoo Linux)


Das verwendete System ist ein Dual – TI UltraSparc IIIi mit dem Kernel 2.6.20-gentoo-r6.
Unter Linux ist es ohne große Probleme möglich, Teile des Arbeitsspeichers in den Verzeichnisbaum zu mounten.
Da unter gentoo Linux bei einer Aktualisierung des Systems mittels emerge die Festplatte recht gut in Mitleidenschaft gezogen wird, entschloss ich mich für eine Nutzung des RAMs zum Kompilieren der Programmpakete.Dies hat generell mehrere Vorteile:

  • mechanische Schonung der Festplatte
  • Fragmentierungsverminderung
  • schnelleres Kompilieren, da meistens die Festplatte der limitierende Faktor ist

Dennoch gibt es auch Nachteile:

  • Mindestens 1,5 GB RAM ist noetig, wenn man nicht auf Probleme stoßen will
  • eventuelles Volllaufen des zugewiesenen Speicherbereiches und Abbruch des Kompiliervorganges mit der Meldung ‚no space left on device‘
  • erfahrungsgemäß läuft die CPU während des Kompilierens durchgehend auf 100%

Natürlich muss jeder selbst entscheiden, ob er es mal riskieren will, dass der Kompiliervorgang abbrechen kann, oder ob er die Festplatte schonungslos seinem Nutzen unterwirft.
Dass die CPU auf 100% läuft wird der Erfahrung nach wahrscheinlich nur die Besitzer von Intel-CPUs stören.

Um das Feature des Einbindens von RAM in ein Verzeichnis möglich zu machen, ist es erforderlich, dass im Kernel der Dateisystemtyp „tmpfs“ aktiviert ist. Aber ohne diesem würde das System sowieso nicht laufen.

Ich habe das Mounten des RAMs sofort in die Datei /etc/fstab eingetragen:

vim /etc/fstab
# /etc/fstab…
none /var/tmp/portage tmpfs defaults,size=2000M,mode=1777,nodev 0 0
Das Aktivieren der Option „noexec“ führt zu Fehlern beim Kompilieren, da die configure-scripts direkt ausgeführt werden.Die erste Spalte steht auf none, da es kein direkt ansprechbares Device gibt.
Die zweite Spalte verweist auf das Verzeichnis, in das der RAM gemountet werden soll. Ist das durch die Variable PORTAGE_TMPDIR in der Datei /etc/make.conf zu verwendende Verzeichnis des Portage nicht /var/tmp, muss diese Spalte angepasst werden.
Die dritte Spalte ist das schon erwähnte Dateisystem tmpfs.
Die Option size in der vierten Spalte gibt an, wieviel RAM gemountet werden soll.
Spalte vier und fünf stehen logischerweise auf 0, da ein Filesystemcheck beim Booten nicht möglich wäre.Mountet nach Abspeichern der Datei und dem Löschen des Inhaltes des Verzeichnisses /var/tmp/portage den RAM.
rm -r /var/tmp/portage/*
mount /var/tmp/portage/
Das vorhergende Leeren des Verzeichnisses verhindert, dass Plattenplatz verloren geht, da der Mount des RAMs den Zugriff auf die Platte unterhalb des Verzeichnisses verhindert.Erst durch Füllen der temporären Partition wird der Arbeitsspeicher verwendet, nicht durch das bloße Mounten!
Durch das Unmounten des RAMs wird automatisch dessen Inhalt gelöscht.Sollte kein Fehler aufgetreten sein, müsste mount nun Ähnliches ausgeben:
mount
/dev/sda1 on / type ext3 (rw,noatime)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec)
udev on /dev type tmpfs (rw,nosuid)
devpts on /dev/pts type devpts (rw,nosuid,noexec)
/dev/sda4 on /usr type ext3 (rw,noatime)
/dev/sda5 on /var type ext3 (rw,noatime)
/dev/sda6 on /home type ext3 (rw,noatime)
/dev/sdb1 on /var/lib/mysql type ext3 (rw,noatime)
/dev/sdb2 on /var/www type ext3 (rw,noatime)
/dev/sdb3 on /daten/backup type ext3 (rw,noatime)
shm on /dev/shm type tmpfs (rw,noexec,nosuid,nodev)
none on /proc/openprom type openpromfs (rw)
none on /var/tmp/portage type tmpfs (rw,nodev,size=2000M,mode=1777)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
securityfs on /sys/kernel/security type securityfs (rw,noexec,nosuid,nodev)
Somit kann mit dem Kompilieren begonnen werden.
Dateioperationen können ganz normal wie bei einer Festplatte angewandt werden.Große Pakete wie openoffice zu kompilieren bedarf natürlich einer großzügigen Vergabe von RAM. Da sollten etwa 2 GB schon reichen; aber dies ist klarerweise abhängig von der generellen RAM-Kapazität. Also mindestens 500 MB sollte man schon frei lassen, damit das System selbst nicht in Bedrängnis geraten kann. Außerdem sollte man auch darauf achten, dass die Angabe im realistischen Bereich liegt. Sollte das System auf den Swap zurückweichen müssen, war das Ganze umsonst.Im oben genannten Beispiel-System sind insgesamt 8 GB RAM. Maximal 2 GB (2000 MB) davon werden durch das Mounten von /var/tmp/portage belastet werden können.
In einem anderen Desktop-System zum Beispiel sind insgesamt nur 2 GB RAM enthalten; Maximal 1,3 GB werden nach /var/tmp/portage gemountet. Es sind bisher noch keine Probleme aufgetreten. Sollte dennoch mehr RAM als 700 MB benötigt werden – beispielsweise durch ein Spiel wie Doom3 oder Quake 4 – reicht es völlig aus, einfach den Inhalt des RAMs im Verzeichnis von /var/tmp/portage zu löschen, um wieder die vollen 2 GB RAM verwenden zu können. Ein kurzzeitiges Unmounten tut es auch.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>