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.
Antworten:
Verwechseln Sie nicht (den) Swap (als Festplattenbereich) und (den) Swap (als Methode zum Verschieben von Speicherseiten vom RAM auf die Festplatte und umgekehrt).
Übermäßiges Austauschen sollte aus Performancegründen vermieden werden, ein Swap-Bereich ist jedoch nicht unbedingt ein Problem.
Auf Systemen wie Linux wird der OOM-Killer ausgelöst, wenn der Arbeitsspeicher überlastet wird, dh wenn Prozesse mehr Arbeitsspeicher zuweisen als verfügbar ist, wenn der Arbeitsspeicher nicht ausreicht, um die Situation zu bewältigen. Sie müssen dem Algorithmus vertrauen, der verwendet wird, um den "richtigen" Prozess zum Beenden auszuwählen, und akzeptieren, dass einer oder mehrere Ihrer Prozesse beendet werden, ohne die Möglichkeit zu haben, ordnungsgemäß herunterzufahren. Hier ist eine berühmte Analogie , die erklärt, warum der OOM-Killer möglicherweise überhaupt keine gute Idee ist.
Auf Systemen wie Solaris, die keinen Speicher überbelegen, dh sicherstellen, dass eine Speicherreservierung immer durch den virtuellen Speicher gesichert wird, sei es im RAM oder auf der Festplatte, ist ein ausreichender Auslagerungsbereich unbedingt erforderlich, da sonst ein möglicherweise erheblicher Teil des RAM vorhanden ist verschwendet.
quelle
Ich kenne einen Grund, weiter zu tauschen. Ich habe eine App, die so viel Speicher benötigt, wie ich mir leisten kann, um sie für mein System zu konfigurieren. Es verwendet Hadoop, das in einem Teil der Verarbeitung einen Fork und Exec ausführt, um einen einzelnen Unix-Befehl auszuführen (ich denke "uname" oder "user" oder etwas, für das sie kein Java-Äquivalent finden konnten). Es scheint, dass Java keine vfork mit Copy-on-Write-Semantik ausführt, wie es eine native Anwendung tun würde. Wenn ich meine App mit 4 GB RAM starte, verwendet der Fork beim Verzweigen weitere 4 GB RAM, gibt sie jedoch schnell wieder frei. Wenn ich nicht 4 GB Swap für diesen Hadoop hätte, müsste ich 8 GB RAM bezahlen, nur um 4 GB für meine App zu haben.
quelle
files_struct
, diestruct signals
, dietask_struct
und andere) verwendet werden. Bei vielen ausführbaren Seiten handelt es sich nicht um positionsabhängigen Code (PIC). Daher muss für Seiten mit ausführbarem Code, die vom Dynamic Loader (ld-linux.so
) geändert wurden, ein Auslagerungsspeicher reserviert sein, auch wenn nichts unmittelbar in den Auslagerungsspeicher geschrieben wird. Deshalb liebe ich Linux. Sie können Swap ausschalten und das System läuft weiter. :)Ich kann die Diskussion technisch nicht ergänzen, aber ich kann ein paar Beispiele nennen. Mein altes Notebook (2 GB RAM kunbuntu lucid) wird normalerweise mit Swap bei 0 ausgeführt. Wenn ich eine Übertragung (BitTorrent-Client) mit einer Anzahl von Torrents durchführe, die zusammen 100 Verbindungen verwenden können, kann der Swap sehr hoch sein. Es wird noch schlimmer, wenn ich eine XP-VM habe, die 1 GB realen Speicher verwendet.
Ich habe andere kommentieren sehen, dass speicherintensive Prozesse wie Grafik-Rendering auch in Swap eintauchen können. Wenn Sie das nur gelegentlich tun, ist das kein Problem.
Was OOM-Probleme angeht, kann Swap tatsächlich ein Lebensretter sein, da Sie Zeit zwischen dem Erkennen des Problems und dem Übergang nach Süden haben. Viele Dinge verbrauchen fast mein gesamtes Gedächtnis, deshalb schaue ich mir das nicht an, aber wenn der Swap hochläuft, bemerke ich das und beginne, nach dem Problem zu suchen - bevor es mich beißt.
quelle
Es gibt eine sehr gute Anwendung für Swap Space: RAM-Erweiterung, indem Sie den Swap Space auf ein Speichergerät setzen, das RAM verwendet, um die Einschränkungen des installierbaren System-RAM zu überwinden
Schauen Sie sich dieses Gadgest an http://techreport.com/articles.x/16255 Es ist im Grunde eine Schnittstelle von S-ATA zu DDR2-RAM. Sie können bis zu 64 GB RAM in diese stecken. Indem Sie einen Swap-Bereich auf einen dieser Bereiche setzen, erhalten Sie erheblichen zusätzlichen RAM. Natürlich ist es nicht so schnell wie normaler System-RAM. Dadurch wird der System-RAM jedoch zu einer Art zusätzlicher Cache-Schicht.
quelle
Ich habe Linux und Windows ohne Swap (Auslagerungsdatei, in der Windows-Nomenklatur) auf Notebooks / Desktops mit 4 GB oder mehr ausgeführt. Es gibt einige Fälle, in denen die Erinnerung erschöpft ist. Ich beschäftige mich nur mit ihnen. Ich habe das Gefühl, dass das System auf diese Weise schneller ist, worauf ich mehr Wert lege. Keine besonderen Anforderungen an meine Arbeitsbelastung.
Dinge, die ich gelernt habe:
quelle
Ich denke, dass Ihre Argumente für einen Server , auf dem die Leistung wichtig ist, durchaus zutreffen und es möglicherweise nicht vorhersehbar ist, welche App als Nächstes agiert.
Für einen Desktop finde ich Swap jedoch nützlich, wenn ich Aufgaben pushe und knacke.
Wenn ich zum Beispiel mit einer App an einer Aufgabe arbeite
A
und dann feststelle, dass ich die AppB
für etwas (entweder eine Unteraufgabe oder eine Unterbrechung) verwenden muss, ist es für mich mental einfacher, dasA
Wechseln auf die Festplatte zuzulassen, während ich arbeite inB
als zu schließenA
und dann daran denken, es danach erneut zu starten.Dies gilt insbesondere dann, wenn
A
ein nicht gespeicherter Zustand beibehalten wird, der beim Neustart nicht wiederhergestellt werden würde.Es
A
hängt von der App ab, ob es schneller ist, auf den Swap zuzugreifen oder ihn zu schließen und neu zu starten. (Einige schaffen es, einen langsamen Start zu haben, aber eine kleine Wohngröße.)Ich stimme jedoch zu, dass eine bessere Lösung zur Steigerung der Produktivität darin besteht, zusätzlichen Arbeitsspeicher zu installieren.
quelle
Auf meinem System verschüttet / tmp, um zu tauschen, wenn es zu viel RAM verschlingt.
Dies ist viel schneller als ein echtes Dateisystem für / tmp.
quelle
Es gibt viele Gründe, wenn Swap verwendet wird.
Wenn das System nicht über genügend physischen Speicher verfügt, kann der Kernel normalerweise einige Anwendungen (in der Tat - einige Teile des Speichers, die von nicht ausgeführten Anwendungen verwendet werden) zum Auslagern verwenden.
Später, wenn diese Anwendungen etwas tun sollten (z. B. wenn einige Daten auf einem Socket ankommen oder ein Zeitgeber ausgelöst wird), versetzt der Kernel eine andere Anwendung in den Swap.
Ein weiteres Beispiel für die Verwendung von Auslagerungen ist Suspend to Disk.
Bei eingebetteten Geräten können alle in (mindestens) zwei große Gruppen unterteilt werden:
Natürlich gibt es Geräte, die nur einen Code ausführen (eine Art Mikrocontroller) usw. Ich würde sie nicht beschreiben, da solche Geräte kein Betriebssystem haben. Daher ist es für solche Geräte sinnlos, über Tausch zu diskutieren.
Die erste Gruppe eingebetteter Geräte (auf denen einige Betriebssysteme ausgeführt werden) kann (und normalerweise verwendet sie) den Swap. Und im Allgemeinen verwenden solche Geräte Swap auf die gleiche Weise wie Desktops und Server.
Die zweite Gerätegruppe (mit RTOS) verwendet Swap überhaupt nicht, da RTOS zeitlich begrenzt ist, um auf Ereignisse zu reagieren
Übrigens, es gibt eine Menge Beschreibungen, wie Linux den Swap verwendet. Eine davon ist http://distilledb.com/blog/archives/date/2009/02/22/swap-files-in-linux.page
Windows ein ähnlicher Ansatz.
quelle
Es scheint mir, dass sowohl der Ruhezustand als auch der hybride Schlaf unter Linux Auslagerungsspeicher benötigen .
Ich habe unter Linux nie Swap Space / Partition verwendet, bis ich mit der Notwendigkeit von Hybrid Sleep konfrontiert wurde - da bei meinem System kein Energiesparmodus bei kritischem Akkuladestand verfügbar war, da dies von Upower übernommen wurde, das nur zwischen Shut-Down, Hibernate und Hybrid auswählte -schlafen. (mehr hier )
quelle
Ein paar gute Anwendungen, die ich gesehen habe, sind Prozesse, die viel Speicher benötigen, aber nicht leistungskritisch sind. Ein Fall war ein alter Firefox, der ein schlechtes Gedächtnisleck hatte. Es würde RAM füllen und überlaufen, um ohne negative Auswirkungen zu tauschen. Ein anderer, den wir hatten, war unser rekursiver DNS-Server (der schnell einen riesigen Cache aufbaut, der selten verwendet wird).
Die andere Erklärung, die ich über Swap gesehen habe, lief in etwa so: "Sie sollten immer SWAP = 2 * RAM konfigurieren. Dies ist völliger Unsinn, es gibt keine Beziehung zwischen RAM und Swap. Swap dient dazu, Spitzen in der Speichernutzung auszugleichen Wenn Ihre Last stabil ist, brauchen Sie keinen Swap. Wenn Ihre Last sehr variabel ist, brauchen Sie genügend Swap für die Spikes, und arrangieren Sie dies so, dass sie die meiste Zeit in den Arbeitsspeicher passen swap wird nur selten genug verwendet, um die Leistung insgesamt nicht wesentlich zu beeinträchtigen. Zusammenfassend lässt sich sagen, dass Sie keine Ahnung haben, wie hoch Ihre Lastspitzen sind, und konfigurieren Sie SWAP = 2 * RAM, da die Festplatte so viel billiger als RAM ist. "
Einige alte Versionen von Solaris konnten Swap überhaupt nicht verwenden, es sei denn, es gab mindestens so viel Swap wie RAM (ich erinnere mich, dass es festen Swap-Speicher für das Verlassen von RAM oder so etwas reservierte), so dass 2 * RAM wirklich um das vernünftige Minimum lag Wert. Aber das war vor Äonen, als unsere große Maschine 64 MiB RAM und eine 1 GiB Festplatte hatte ...
quelle