Arbeiten mit tmpfs

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der TIPPs & Tricks Sammlung.
Terminals / Shells X Portage System Dateisysteme Kernel Netzwerk Sonstiges alphabetischer Tipp Index


Dieser Tipp ist vor allem für alldiejenigen, bei denen eines der folgenden Merkmale zutrifft:

  • viel RAM
  • keine IO-lastigen anderen Jobs, die auf Cache angewiesen sind

Inhaltsverzeichnis

[Bearbeiten] Wozu ist dieser Tipp dienlich?

Manche Leute behaupten, $PORTAGE_TMPDIR im tmpfs beschleunigt das installieren von Paketen. Andere behaupten genau das Gegenteil.

[Bearbeiten] Geht das auch bei mir ?

Kann, muss aber nicht sein. Ich habe mich umgehört und ca. 100 Leute befragt. 20 von ihnen profiterten davon, 70 nicht, 9 hatten verlangsamte Emerges und einer wusste nichtmal was Linux ist.

[Bearbeiten] Wie finde ich raus, ob tmpfs mir etwas bringt?

Wichtig ist, dass man ordentlich testet. Es bringt dabei wenig, wenn man erst einmal von Festplatte ($PORTAGE_TMPDIR auf Platte) mergt und anschließend mit dem Tempordner im tmpfs. Andersrum ist es ebensowenig sinnvoll, da der Cache die Messungen verfälschen kann. Damit tmpfs Vorteile bringt, muss das zu installierende Paket folgende Punkte erfüllen:

  • sehr hoher relativer Anteil an nicht-nebenläufigen Rechenaufgaben
    Beispiel: entpacken des Codes, configure, Installation, etc.
    Anderes Beispiel: das Erstellen der Locales bei der libc.
  • recht ungünstiger Anteil von IO im Verhältnis zur benötigten Rechenzeit der Installation
    Beispiel: kompilieren von Java-Quellcode zu Java-Bytecode ist vielfach schneller als kompilieren von C++-Quellcode zu Objektcode.
  • sehr langsame Festplatten, beispielsweise in manchen Laptops (weniger als 7200UpM, langsame Spursuche, etc.)
  • Cache-Invalidierung. Läuft parallel zu emerge noch ein sehr IO-lastiger Job, werden viele Daten im Cache durch diesen Job ersetzt. Damit werden die Festplattenzugriffe, die emerge benötigt, erhöht.

Wann bringt tmpfs wenig oder gar nichts?

  • Bei wenig RAM.
  • Wenn make mit mehr Jobs läuft, als CPUs im System vorhanden sind. (-j Schalter)
  • Wenn der Anteil der Zeit für das Kompilieren selbst (etwa mit gcc) hoch ist im Vergleich zu entpacken, patchen, installieren, etc.

Wenn man dies testen möchte, sollte man mehrere Durchläufe mit jeder Konfiguration starten (beispielsweise best-of-3). CCache und DistCC ist dabei sinnvollerweise deaktiviert. Zwischen den Durchläufen sollte man den Cache invalidieren. Dazu reicht es, hinreichend lange auf der Platte rumzurödeln (ein paar Dateien nach /dev/null caten, ein paar Dateien auf der Platte rumkopieren, etc. - Hauptsache mehr Daten als in den RAM passen). Ansonsten verbleiben Daten zwischen den Tests im RAM/Cache und verfälschen die Messungen.

Es sollte auch mit recht großen Paketen gemessen werden, um Messfehler zu minimieren, beispielsweise firefox, glibc, etc. Es sollten dabei keine rechenintensive oder IO-lastige Jobs nebenher laufen. Es kann auch noch der -j Parameter von make variiert werden, wobei CPU-Anzahl+1 als default und Minimum gilt.

Bitte Kommenate über Performanz von tmpfs in die Diskussionsseite!

[Bearbeiten] Dann ma los

Ein tmpfs mit einer Größe von 850 MB auf /var/tmp/portage mounten:

mount -t tmpfs -o uid=portage,gid=portage,mode=755,size=850M tmpfs /var/tmp/portage

1/2 des Gesamt-RAMs:

mount -t tmpfs -o uid=portage,gid=portage,mode=755 tmpfs /var/tmp/portage

Dann testen: emerge irgendwas

[Bearbeiten] tmpfs in /etc/fstab

Fein ist das auch das Ganze in die /etc/fstab zu stecken:
none /var/tmp/portage tmpfs uid=portage,gid=portage,mode=755,defaults 0 0

[Bearbeiten] Aufräumen

umount -f /var/tmp/portage

Dadurch wird der belegte Speicher wieder freigegeben.

[Bearbeiten] Script

Achtung: RAM-Größe anpassen!

Datei: /usr/local/sbin/temerge
#!/bin/bash
# http://de.gentoo-wiki.com/Arbeiten_mit_tmpfs
 file=/var/tmp/portage/.keep
 if [ -e $file ]; then
   mount -t tmpfs tmpfs -o \
     uid=portage,gid=portage,mode=755,size=1G /var/tmp/portage
   emerge $*
   cd 
   umount /var/tmp/portage
 fi


Tip: Falls du emerge immer mit tmpfs aufrufen möchtest, füge diesen Alias in deiner /root/.bashrc hinzu:

alias emerge='/usr/local/sbin/temerge'

Emerge mountet nun automatisch ein tmpfs im Hintergrund.

'Persönliche Werkzeuge