#!/bin/blog

May 4, 2008

Swap im Reality Check

Filed under: Uncategorized — martin @ 10:02 pm

Swap unter Linux scheint so eine Sache zu sein, um die sich reichlich Mythen und Legenden ranken. Deshalb schreibe ich heute mal auf, was ich so von der Sache halte.

Wie wir alle wissen, wird der Swap-Bereich zusammen mit dem realen Arbeitsspeicher (RAM) zum sogenannten Virtual Memory (VM) zusammengefaßt. Auf einem System mit 2 GB RAM und 2 GB Swap steht also ein für Appikationen nutzbares VM von 4 GB zur Verfügung. Die Hälfte davon befindet sich als Swap auf Festplatte. Zugriffe darauf sind sehr viel langsamer als Zugriffe auf den normalen Arbeitsspeicher.

Mythos: “Jedes UNIX-System braucht Swap!”

Swap ist nicht mehr als eine sehr, sehr langsame Speichererweiterung. Ist der Arbeitsspeicher voll, werden Speichersegmente auf Festplatte ausgelagert. Dadurch, daß diese Auslagerung deutlich langsamer als normale RAM-Aktiviät geschieht, wird das System in aller Regel extrem langsam. Diese Auslagerungsaktivität kann im Rahmen einer Überwachung erkannt werden. Idealerweise wird auch die Problemquelle identifiziert und der entsprechende Prozeß von Hand beendet, so daß das System weiterlaufen kann.

Daraus folgt im Prinzip nichts anderes, als daß Swap nichts weiter bringt, als einen gefühlten Zeitgewinn für das Beenden von Speicherfressern.

Auf der Hand liegt andererseits auch, daß man z.B. ein Flash-basiertes (und damit read-only)-System ohne Swap betreiben können muß. Folglich gilt, daß ein Linux-System ohne Swap problemlos laufen kann, solange der Arbeitsspeicher für den gesamten Speicherbedarf aller zu benutzenden Applikationen ausreichend dimensioniert ist.

Mythos: “Swap muß immer auf einer eigenen Partition liegen!”

Unter Linux (und vermutlich auch den meisten anderen UNIX-Systemen) ist es problemlos möglich, anstelle einer Swap-Partiton ein Swapfile zu verwenden. Die Vorgehensweise dazu ist dort in der Manpage von mkswap beschrieben. Da ein swappendes System ohnehin ein schweres Problem mit der Performance von Speicherzugriffen hat, kann man den marginalen zusätzlichen Performanceverlust durch die Dateisystemebene praktisch vernachlässigen. (Eine Ausnahme gilt, die erwähne ich im übernächsten Absatz.)

Mythos: “Es muß immer doppelt soviel Swap vorhanden sein, wie Arbeitsspeicher!”

Das ist so eine ganz alte Daumenregel, deren historischer Hintergrund schwer durchschaubar ist. Sie ist vermutlich teilweise darin begründet, daß es UNIX-Systeme gegeben haben soll, bei denen der Arbeitsspeicher auf Swap gespiegelt wurde. Um also eine wirksame Vergrößerung des VM durch Swap zu haben, war also wesentlich mehr Swap als Arbeitsspeicher erforderlich.

Eine Mindestgröße für Swap ergibt sich bei tragbaren Systemen, die für die Hibernation ihren Arbeitsspeicher auf Swap auslagern. Dies ist meines Wissens die einzige Situation, in der nicht nur eine wirkliche Mindestgröße für Swap vorliegt, sondern in der es sich auch tatsächlich um eine Swap-Partition handeln muß.

Generell gilt, daß es über die altbekannte Daumenregel hinaus keine feststehende Regel für die Swap-Größe gibt. Wer sich an der alten Regel festhalten will, darf das gern tun. Man sollte sich aber durchaus fragen, welche Dinge man von einem System mit 8, 16 oder 32 GB Swap zu erwarten glaubt.

Mythos: “Aber tmpfs braucht Swap!”

Nur um dem unvermeidlichen Kommentar vorzubeugen: Das tmpfs-Dateisystem, z.B. unter Solaris und Linux, braucht nicht Swap, sondern Virtual Memory. Es wird also bei ausreichenden Platzverhältnissen im Arbeitsspeicher gehalten, kann aber von Applikationen auf Swap verdrängt werden. Es stellt sich die Frage, inwieweit ein dediziertes Filesystem für /tmp überhaupt eine Berechtigung hat, wenn seine Schreib- und Leseperformance im Prinzip unvorhersagbar sind.

Advertisements

8 Comments »

  1. >Mythos: “Es muß immer doppelt soviel Swap vorhanden sein, wie Arbeitsspeicher!”

    Ich glaube das mache ich seit Ewigkeiten völlig automatisch ohne drüber nachzudenken *g*

    Interessante Auflistung 🙂

    Comment by Oliver — May 4, 2008 @ 10:45 pm

  2. Die 1:2-Regel hab ich spätestens bei 512MB zu einer 1:1-Regel umgewandelt. Und als ich letztens die neue Festplatte partitioniert habe, hab ich die traditionelle Swap-Partition gleich mal ganz weggelassen. Bin also jetzt mit 2GB RAM swaplos unterwegs, bei meinem Nutzungsverhalten komm ich nicht mal ansatzweise an 2GB RAM-Nutzung ran.

    Comment by Usul — May 5, 2008 @ 7:54 am

  3. Es soll sogar Installer einiger Distributionen geben, bei denen ohne gültige Swap Partition keine Installation stattfindet. Auf einer Workstation mit 2GByte Speicher sehe ich z.B. keinen großen Sinn von Swap. Auf Serversystemen kann es einem Admin die Nacht retten, aber ist auch keine Dauerlösung (wie du schon sagst).

    Comment by matthias — May 5, 2008 @ 12:01 pm

  4. Die 1:2 Regel ist mir heute er wieder als IMHO Ausrede begegnet. Eine Maschine mit 8 GB RAM und Secure Plattform wurde nach Upgrade R60 zu R65 zum “ich boote alle 3 Minuten”-Geraet. Versuchte Erklraerung aus der Not geboren: “Swap ist zu klein! Muessen 16 GB sein und nicht 8 GB.”… 😉 Ich bin gespannt obs zusaetzlicher Swap bringt.

    Comment by Jens — May 5, 2008 @ 3:36 pm

  5. Ist es auch nicht so, dass der Inhalt des Arbeitsspeichers vor dem Standby-Modus in die Swap-Partition abgelegt wird?

    Comment by Einsiedlerkrebs — May 7, 2008 @ 9:36 pm

  6. Standby? Nein. Das gibts (meines Wissens) nur bei Apple. Dort wird bei Standby der Speicher rausgeschrieben, falls bis zum nächsten Aufwachen der Strom ausgehen sollte.

    Comment by martin — May 7, 2008 @ 9:52 pm

  7. […] Swap im Reality Check Ein paar Fakten zum Thema Swap. Alte Mythen werden aus dem Weg geräumt. […]

    Pingback by In a nutshell: 2008-05-22 | adminlife.net — May 22, 2008 @ 3:47 pm

  8. @6 Soweit ich weiß gibt es Hibernating Lösungen für Linux bei denen das ebenfalls so ist. Find ich Prinzipiell auch keine dumme Sache. Der dumme Anwender braucht sich dann keine Gedanken machen ob er jetzt “Runterfahren”, “Sleep” oder “Hibernate” klickt. Er drückt einfach “aus” und das System geht in Standby. Wenn es nach einer Zeit T kein erneutes aufwachen registriert, wacht es wieder auf und geht in Hibernate.
    Wenn das sauber funktioniert wäre das eine komfortable Lösung.

    Comment by Martin — May 23, 2008 @ 8:36 am


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: