Ich habe Unix eine ganze Weile benutzt und in den letzten Jahren war ich der Meinung, Swap sei ein Anachronismus, aber ich wäre gespannt, was andere Leute davon halten.
Mein Argument ist ungefähr das folgende (vorausgesetzt, es werden keine globalen Einschränkungen oder Änderungen der OOM-Einstellungen vorgenommen):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
Für jeden Service, der auf Leistung ausgelegt ist, ist das Verständnis der Obergrenzen der Ressourcennutzung meiner Meinung nach der Schlüssel zur Optimierung. In diesem Fall wissen Sie, wie viel Sie benötigen.
Ich kann mir nicht viele Situationen vorstellen (einige, aber nicht viele), in denen Sie einen laufenden Prozess anhalten und ihn austauschen könnten, um Platz für andere Dinge zu schaffen ein core-dump über gcc oder ein manuelles auskopieren des speichers wäre funktional äquivalent.
Ich möchte auf keinen Fall ein eingebettetes System austauschen (obwohl möglicherweise ein kleinerer RAM verfügbar ist). Wenn Ihnen der RAM ausgeht, ist es mir lieber, als einen Flash-Speicher mit einer Million Schreibzugriffen pro Sektor zu zerstören Fahren Sie über ein Wochenende, indem Sie die Sektoren bis zur Noppe nivellieren.
Gibt es Unix-Bärte, die zwingende Gründe haben, weiter zu tauschen?
UPDATE Antworten && Analyse:
BESTÄTIGT? - fork () benötigt für den untergeordneten Prozess dieselbe Speicherkapazität wie der übergeordnete
Modern fork () ist Copy-on-Write für Kinder unter POSIX (allgemein), aber speziell für Linux und FreeBSD , und ich nehme OSX durch Extrapolation an. Ich betrachte diesen Teil des anachronistischen Gepäcks, das der Tausch mit sich führt.
Interessanterweise wird in diesem Solaris-Artikel behauptet, dass Solaris zwar Copy-on-Write mit fork () verwendet, dass Sie jedoch mindestens die doppelte (!) Größe des übergeordneten Prozesses im freien virtuellen Speicher haben sollten, damit fork () nicht in den Arbeitsspeicher verschwindet Mitte. Während das Solaris-Element das Argument, dass Swap ein Anachronismus ist, etwas zunichte macht, denke ich, dass genug Betriebssysteme CoW so korrekt implementieren, dass es wichtiger ist, den Mythos zu zerstreuen, als ihn als weitere Rechtfertigung für Swap zu markieren. Schon seit. Seien wir ehrlich. Zu diesem Zeitpunkt sind die Leute, die Solaris tatsächlich verwenden, wahrscheinlich nur Oracle-Leute. Nichts für ungut Solaris!
BESTÄTIGT - tmpfs / ramfs-Dateien können ausgetauscht werden, wenn tmpfs / ramfs voll ist
Verwenden Sie keine No-Limit-tmpfs / ramfs! Definieren Sie immer explizit die RAM-Menge, die tmpfs / ramfs verwenden soll.
PLAUSABLE - Haben Sie einen kleinen Swap "nur für den Fall"
Einer meiner alten Chefs hatte ein tolles Sprichwort: "Sie wissen nicht, was Sie nicht wissen" - im Grunde können Sie keine Entscheidung treffen, die auf Informationen basiert, die Sie noch nicht haben. Dies ist jedoch ein plausibles Argument für den Austausch mit mir. Ich vermute, dass die Art der Maßnahmen, die Sie ergreifen würden, um festzustellen, ob Ihre Anwendung ausgetauscht wird oder nicht, schwerwiegender ist, als zu prüfen, ob malloc () erfolgreich ist oder die Ausnahme abfängt ein fehlgeschlagenes neues ().
Dies kann in Fällen nützlich sein, in denen Sie einen Desktop ausführen und eine Reihe von zufälligen Dingen ablaufen, aber selbst dann - wenn etwas verrückt wird, wäre es besser, OOM zu ernten, als in die Tausch-Hölle einzutauchen. Das bin nur ich.
GEHACKT! - Auf Solaris , swap ist wichtig für ein paar Gründe
tmpfs - erklärt , die Menge an freiem Speicherplatz zur Verfügung tmpfs auf die Menge von nicht zugeordneten Swap - Speicher im System abhängt. Die Größe eines tmpfs-Dateisystems wächst, um die darauf geschriebenen Dateien aufzunehmen, aber es gibt einige inhärente Kompromisse für starke Benutzer von tmpfs. Tmpfs teilt Ressourcen mit den Daten- und Stapelsegmenten der ausgeführten Programme. Die Ausführung sehr großer Programme kann beeinträchtigt werden, wenn tmpfs-Dateisysteme nahe an ihrer maximal zulässigen Größe liegen. Es steht Tmpfs frei, bis auf 4 MB den gesamten Swap-Speicher des Systems zuzuweisen.
Solaris - Fakten und Mythen über Swap - Zustände Virtueller Speicher besteht heute aus der Summe von physischem RAM und Swap - Speicherplatz auf der Festplatte. Für Solaris muss KEIN Auslagerungsspeicher konfiguriert werden. Wenn Sie diese Option auswählen, können Sie keine neuen Prozesse starten, sobald der Arbeitsspeicher voll ist. .
Ich bin mir nicht sicher, ob dies bedeutet, dass die maximale virtuelle Karte, die Sie erstellen können, RAM + Swap ist , oder ob Sie immer noch so etwas wie mmap () eine Datei erstellen können, die größer als RAM ist, und sich dabei auf die verzögerte Initialisierung von mmap () verlassen können Heutzutage läuft Solaris wahrscheinlich einwandfrei ohne Swap, es scheint jedoch weniger benutzerfreundlich zu sein als andere POSIXy-Betriebssysteme.
GEHACKT! Beliebte Linux-Tools für den Ruhezustand scheinen sich auf Swap zu verlassen
Standardmäßig sieht es so aus , als ob TuxOnIce für den Ruhezustand auf Swap angewiesen ist - obwohl andere Backends existieren. Wenn Sie jedoch keine Box verwenden, die in den Ruhezustand versetzt werden muss, würde ich immer noch hinter der Aussage stehen, dass Swap unter Linux anakronistisch ist.