it-swarm.com.de

Was kann Swap konkret tun RAM kann nicht?

Was kann Linux konkret tun, wenn es einen Swap hat, den es ohne Swap nicht kann?

Bei dieser Frage möchte ich mich auf den Unterschied zwischen beispielsweise einem Linux-PC mit 32 GB RAM und keinem Swap und einem nahezu identischen Linux-PC mit 16 GB RAM mit 16 GB konzentrieren Tauschen. Hinweis Ich interessiere mich nicht für das "Ja, aber Sie könnten eine X-Verbesserung feststellen, wenn Sie dem 32-GB-PC einen Swap hinzufügen" . Das ist für diese Frage kein Thema.


Ich bin zuerst auf die Meinung gestoßen, dass das Hinzufügen von Swap besser sein kann als das Hinzufügen von RAM in Kommentaren zu einem früheren Problem .

Ich habe das natürlich durchgelesen: Benötige ich Swap Space, wenn ich mehr als genug RAM habe? und ...

  • Die Antworten konzentrieren sich hauptsächlich auf das Hinzufügen von Swap, z. B. das Disk-Caching, wobei das Hinzufügen von RAM natürlich auch den Disk-Cache erweitern würde.
  • Es wird erwähnt, dass eine Defragmentierung nur mit einem Tausch möglich ist, aber ich kann keine Beweise dafür finden.
  • Ich sehe einen Verweis auf MAP_NORESERVE für mmap, aber dies scheint ein sehr spezifisches und undurchsichtiges Risiko zu sein, das nur mit OOM Situationen und möglicherweise nur private mmap.

Swap wird oft als billiger Weg gesehen, um den Speicher zu erweitern oder die Leistung zu verbessern. Bei der Massenproduktion eingebetteter Linux-Geräte wird dies jedoch auf den Kopf gestellt ...

... In diesem Fall trägt der Swap einen Flash-Speicher, der Jahre vor Ablauf der Garantie ausfällt. Wenn das Verdoppeln von RAM ein paar zusätzliche Dollar auf dem Gerät kostet.

Beachten Sie, dass es sich bei eMMC-Flash NICHT um eine SSD handelt! . Normalerweise verfügt eMMC-Flash nicht über eine Wearleveling-Technologie, was bedeutet, dass es sich VIEL schneller abnutzt als SSDs


Es scheint eine Menge heiß umstrittener Meinungen zu diesem Thema zu geben . Ich bin wirklich auf der Suche nach trockenen Fakten über Fähigkeiten, nicht nach Meinungen über "sollten Sie/sollten Sie nicht".

Was kann mit Swap gemacht werden, was nicht auch durch Hinzufügen von RAM möglich wäre?

43
Philip Couling

Ruhezustand (oder Suspend auf Festplatte). Durch den echten Ruhezustand wird das System vollständig ausgeschaltet, sodass der Inhalt von RAM] verloren geht und Sie den Status in einem dauerhaften Speicher speichern müssen. AKA Swap. Im Gegensatz zu Windows mit hiberfil.sys und pagefile.sys, Linux verwendet Swap Space sowohl für überlasteten Speicher als auch für den Ruhezustand.

Auf der anderen Seite scheint der Ruhezustand etwas schwierig zu sein, um unter Linux gut zu funktionieren. Ob Sie tatsächlich in den Ruhezustand "können", ist eine andere Sache. ¯\_ (ツ) _/¯

61
muru

Was kann mit Swap gemacht werden, was nicht auch durch Hinzufügen von RAM möglich wäre?

Diese Frage könnte tatsächlich in Was kann mit nichtflüchtigem RAM, was nicht auch durch Hinzufügen von flüchtigerem RAM ? umformuliert werden könnte. Nur weil Sie zufällig eine Partition für das Paging reservieren (eine dedizierte Art der Interaktion mit flüchtigem RAM), ändert dies nichts an der Tatsache, dass sie immer noch Teil eines dauerhaften sekundären Speichermediums ist. Eine Swap-Partition ist auch nicht obligatorisch, um ein System in den Ruhezustand zu versetzen. Eine "Swap-Datei", die auf einer bereits vorhandenen Partition erstellt wurde, kann ebenfalls verwendet werden.

Unabhängig davon, ob Sie eine Swap-Partition oder eine Swap-Datei verwenden, werden am Ende Dinge gespeichert, die in den oder aus dem RAM geschrieben werden sollen. Wenn Sie das Netzkabel von einem System mit aktivierter Swap-Partition abziehen, wird diese Swap-Partition nicht auf magische Weise gelöscht.

Während diese Auslagerungsdaten beim nächsten Start nicht eingelesen werden (da die Auslagerungsdatei Einträge enthält, die Prozessen entsprechen, die nicht mehr ausgeführt werden), ergreifen einige Distributionen möglicherweise absichtliche Schritte, um sie entweder während eines ordnungsgemäßen Herunterfahrens oder eines ordnungsgemäßen Neustarts zu zerstören Wenn jemand ein Kabel aus einem System herausziehen würde, könnte er diese Swap-Partition forensisch untersuchen.


In Bezug auf eingebettete Geräte, die Sie erwähnt haben, nutzt sich Flash als nichtflüchtiger Speicher RAM (NVRAM oder EEPROM)) ab, da es E/A-Treffer (Flash) aufnehmen kann Die in Bezug auf die Anzahl der Programmier-/Löschzyklen dargestellte Zellausdauer verblasst im Vergleich zu der des flüchtigen RAM. Sie rasieren buchstäblich jedes Mal eine Oxidschicht ab, wenn Sie an diesen Ort schreiben, und schließlich ist einfach kein Oxid mehr zuzulassen für die dauerhafte Speicherung der Ladung und es tritt buchstäblich vor dem anschließenden Lesen aus.

Andererseits ist die Überlebensfähigkeit des RAM von volatile im Vergleich zu Flash praktisch nicht vorhanden (in der Größenordnung von Minuten unter idealen Versuchsbedingungen), wenn oder wenn Sie die Stromquelle abschalten. Im Fall von flüchtigen RAM gibt es nichts, was den Verlust der Ladung und den entsprechenden Zustand des Flip-Flops (Eingänge, bestimmende Ausgänge, die dann die Eingänge neu bestimmen), auch bekannt als Rückkopplung, aufhalten kann -gesteuerte Riegel.

16
BarBar1234

32 GB RAM und kein Swap vs. 16 GB RAM mit 16 GB Swap.

Auf diese Weise gefragt, spart Swap meistens Geld und erhöht die Leistung pro Dollar-Verhältnis, vielleicht auch pro Watt.


Aber Swap ist immer noch mehr als "Speicher so langsam wie eine Festplatte". Es ist ein temporärer Speicher für Speicherseiten, der bei Bedarf direkt (schmutzig wie sie sind, kein Dateisystem-Overhead) in RAM) geladen werden kann.

Natürlich hängt viel von der Last (der Art der Last) ab, und die Idee des Austauschs kann sogar nach hinten losgehen. Aus diesem Grund gibt es neben swapon/swapoff selbst und der Diskussion über die richtige Größe den Parameter "swappiness".

Aus Wikipedia habe ich diese Aussage über "Swap" unter Linux erhalten (im Artikel "Paging")

Der Linux-Kernel unterstützt eine praktisch unbegrenzte Anzahl von Swap-Backends (Geräte oder Dateien ...

Wenn mehreren Swap-Backends dieselbe Priorität zugewiesen wird, werden sie im Round-Robin-Verfahren verwendet (ähnlich wie bei RAID 0-Speicherlayouts), ...

Dies zeigt, dass Sie das Austauschen in etwas verwandeln können, das auf Hardwareebene sinnvoller ist: Ein dediziertes "Scratch-Laufwerk" würde diesen ausgetauschten Seiten ein besseres Zuhause geben. Idealerweise sollte ein Scratch-Laufwerk (sehr) klein, aber schnell und robust sein.


Gemäß der "neuen" Größenregel (Quadratwurzel Wurzel von Giga) sollte Ihr Beispiel Folgendes vergleichen:

16 GB RAM + 0 GB Swap+1000 GB Disk

16 GB RAM + 4 GB Swap+ 996 GB Disk

Denn was wirklich keinen Sinn ergibt, ist:

16 GB RAM+0 GB Swap + 1000 GB Disk

12 GB RAM+4 GB Swap + 1000 GB Disk

Das wäre eine Swap-Partition auf einem tmpfs ("ramdisk") - vielleicht nicht einmal zu schädlich, aber ich sehe hier überhaupt keinen Nutzen. Sie können nicht einmal Winterschlaf halten.

(siehe unten für zram und zswap, wenn Sie dem Komprimierung hinzufügen)


Um den Austausch zu verstehen, müssen Sie das gesamte System und die durchschnittliche Last berücksichtigen. Und da vm/mm (Virtual Memory Management) ein komplexes System ist, ist es wirklich schwierig, einen klaren Vorteil zu nennen. Ich mag die Idee eines "reibungslosen" Übergangs in ein überlastetes System.

Ich habe 8 GB RAM und kein Swap. Aber trotzdem verteidige ich das Konzept, AFA kann ich verstehen :-)


Ich habe dieses Redhat-Zitat in einem der OP-Links gefunden. Das Szenario ist ein ständig steigender Speicherbedarf bei 2 GB RAM + 2 GB Swap, wenn ich mich erinnere:

... In unserem Fall [gerade dargestellt] ist ziemlich viel Swap verfügbar, so dass die Zeit der schlechten Leistung lang ist.

Aber die Alternative ist OOM noch früher!

Die "Zeit der schlechten Leistung" ist zwar lang, aber die Leistung verschlechtert sich nur proportional zur Last. Ich kenne den Kontext nicht, vielleicht möchten sie nur vor einer zu großen Swap-Partition warnen. Es klingt Anti-Swap, ist es aber auf den zweiten Blick nicht.

Andererseits habe ich aus dem gleichen Grund keinen Tausch. Ich möchte wissen, wann ich und meine Anwendungen die Obergrenze erreichen, und dann werde ich entscheiden, ob ich die Last verringern, mehr kaufen muss RAM) oder eine Partition für den Austausch aktivieren muss (ich habe eine oder zwei kleine Partitionen dafür bereit).


Ich habe diese zram und dann zswap Sache nachgeschlagen: sehr interessant ...:

Im Vergleich dazu fungiert zswap als RAM-basierter Cache für Swap-Geräte. Dies bietet zswap einen Räumungsmechanismus für weniger genutzte ausgetauschte Seiten, der zram fehlt.

Andererseits funktioniert zram ohne Swap-Gerät. Es macht möglich, was ich sagte, macht keinen Sinn, aber ich habe die Komprimierung nicht berücksichtigt.

Mein Punkt ist dieser Räumungsmechanismus , der "Swap" innewohnt. Dies kann unter hoher Last sehr nützlich sein, unabhängig davon, ob Sie durch Auswechseln oder durch Komprimieren tauschen.

15
rastafile

Für eine gegebene Summe ist es immer besser, es als RAM als Swap) zu haben.

Es gibt einen Unterschied im Verhalten zwischen einem Noswap-System und einem Swap-System, der nützlich sein kann oder nicht: Thrashing. Wenn dem Swap-System der gesamte verfügbare virtuelle Speicher ausgeht, wird es beim Verschieben von Seiten zwischen Swap und RAM immer mehr blockiert. Dies verlangsamt das System. Unter bestimmten Umständen kann dies manuelle oder automatisierte Eingriffe ermöglichen, um die Last zu reduzieren und das System wiederherzustellen.

In einem Noswap-System bleibt die Leistung bis zu einer sehr hohen Speichernutzung relativ konstant. Zu diesem Zeitpunkt beginnt das Betriebssystem, schreibgeschützte Seiten aus ausführbaren Dateien mit Speicherzuordnung zu entladen, und hat auch sehr wenig Platz für den Festplatten-Cache. Es ist wahrscheinlich, dass der OOM-Killer zu diesem Zeitpunkt ausgelöst wird. Also eher ein plötzlicher Ausfall als eine langsame Verschlechterung.

Ich bin damit einverstanden, dass Swap für eingebettete Systeme wenig Sinn macht, insbesondere bei kleinen eingebetteten Flash-Geräten. Die Welt ist voll von kleinen Linux-Consumer-Routern, Glühbirnen usw. mit ziemlich fester Speichernutzung und ohne Austausch.

15
pjc50

Swap kann im Gegensatz zu RAM leicht deaktiviert, eingeschränkt, verlangsamt oder erweitert werden - eine nützliche Funktion bei der Entwicklung der Speicherzuweisungsstrategie einer Anwendung.

Angenommen, Ihr Kernel sieht 4G RAM und 4G Swap, und das Betriebssystem und die Entwicklungsanwendungen (Browser, IDE usw.) verbrauchen 3G. Das sind 5G kostenlos virtuell: 1G real und 4G Swap .

Sie entwickeln Ihre neue Datenbank oder Ihr neues Spiel, bei dem beispielsweise 2G seine heißen Ressourcen laden soll. Also geht es weiter, sbrk und mmap wiederholt, und mit Swap on wird das 2G durch das Wunder des Kernels = real VM Layer. Hurra, dein Code funktioniert gut. (Und dein Browser oder was auch immer wurde seitenabgestiegen, um die Hölle zu tauschen.)

Stoppen Sie jetzt Ihr Programm. swapoff und führen Sie Ihr Programm erneut aus. Dieses Mal erhält es, während es sich um sbrk handelt, ein ENOMEM und Ihr Code muss sich mit einem unglücklichen Pfad auseinandersetzen. Wie reagiert es? Wie tanzt es in diesem Szenario?

Oder montieren Sie einen USB-Stick mkswap und swapon auf dem USB-Mount und erhöhen Sie vm.min_free_kbytes um den Kernel zu zwingen, noch mehr auf diesen USB-Stick zu gehen. Führen Sie Ihr Programm erneut aus. Wie verhält sich Ihre App jetzt mit langsam mallocing VM?

Wie wäre es, wenn Sie all das tun, während Ihre App ausgeführt wird? Wie verhält es sich, wenn es ausgeführt wird und OOM-Bedingungen auftreten?

Es gibt kein Ende für die Möglichkeiten, wie Sie ein System quälen können, das nur noch wenig real RAM) hat, indem Sie Ihr Swap-Subsystem live optimieren. Und im Gegensatz zu cgroups oder rusage müssen Sie Ihren Prozess nicht herunterfahren Ändern Sie das virtuelle RAM, das ihm zur Verfügung steht.

Sie können diese Art von Speichermissbrauch testen, indem Sie Mocks verwenden, um ENOMEM oder langsames brk zu simulieren. Dies ist eine angemessene Vorgehensweise, da es stabil ist. Aber nichts geht über Live-Fire-Übungen in Umgebungen mit wenig Speicher, um das Gold stochastischer Prozesse abzubauen. Mit Swap kann ein Tester die Speicherressourcen und -eigenschaften des Kernels im Handumdrehen auf eine Weise optimieren, die der realen Welt mit wenig Speicher angemessen ähnlich ist. Das Hinzufügen oder Entfernen von RAM Sticks liefert diesen Wert nicht.

10
bishop

Dies ist ein Nischenfall, und zugegebenermaßen könnten Sie einfach mehr RAM hinzufügen, aber ...

Jeder scheint davon auszugehen, dass Swap einen physischen nichtflüchtigen Speicher wie eine Festplatte oder ein Flash-Laufwerk bedeutet. Swap ist eher ein Prozess als ein physischer Ort.

Betrachten Sie die folgenden seltsamen Spielereien:

  1. Ich habe ein Gerät mit 32 GB RAM und keinen anderen Speicher).
  2. Ich muss 42 GB Daten verarbeiten.
  3. Glücklicherweise sind die Daten in schönen, separaten Abschnitten und in hohem Maße komprimierbar (vielleicht so etwas wie eine Zeitreihe, die größtenteils statisch ist), und ich muss nicht auf alle gleichzeitig zugreifen, also ...
  4. Ich verwende zram , um eine komprimierte Speicher-Swap-Partition einzurichten, mit der ich das meiste davon ausblenden kann, wenn ich sie nicht verwende.
  5. So kann ich mehr Daten in meinen begrenzten Speicher einpassen, ohne meinen Programmcode zu ändern.

Eine Verwendung für Swap (die sich zufällig im RAM befindet), das ist mehr als nur das, was Sie von plain RAM (ohne Swap-Partition) erhalten.

Ja, Sie könnten technisch einfach mehr RAM hinzufügen. Diese Art von Verrücktheit würde bedeuten, dass Sie, egal wie viel RAM Sie hinzufügen, immer etwas mehr Speicherplatz beanspruchen könnten (solange Sie Ihre Daten kennen/was auch immer geeignet ist).

6
Alan

Sie haben bereits die Antwort, aber Ihre Frage zeigt, dass Sie diese Antwort noch nicht schätzen.

Die einfache Antwort lautet: "Seien Sie groß und billig (und vielleicht flexibel)". Sie wissen es bereits, aber Sie entlassen es auch. Das solltest du nicht.

RAM ist nicht "ein paar zusätzliche Dollar". Gigabyte für Gigabyte, zum Beispiel ECC RAM auf meinem Server kostet £ 130 für 32 GB (RDIMM 2400 DDR4) oder ungefähr £ 4/GB. Die SDD, die ich für den Austausch verwende, kostet ungefähr £ 100-130 GBP pro TERABYTE oder etwa 0,11 GBP/GB (Mikron/Intel mit Schutz vor Stromausfall). Serverfarmen können mit Hunderten von Servern Hunderte bis Tausende (in vielen Fällen) GB pro Server beanspruchen.

RAM ist auch leistungshungriger - ein Leerlaufprozess in RAM erfordert RAM Stromversorgung und Aktualisierung, während auf SSD der Stromverbrauch viel geringer ist. Auf kleinen eingebetteten Geräten Dies kann ein eigenständiges Problem sein.

Verschleißnivellierung ist auch weniger ein Problem als Sie denken auf den meisten Geräten. SSDs halten länger als gedacht, und kommerziell entwickelte Geräte wählen eine SSD, die ihrer erwarteten Verwendung entspricht, nicht die extrem schlechten in einigen Karten.

Schließlich ist Swap flexibler. Wenn Ihre Aufgabe normalerweise 32 GB verwendet, aber kurz und selten 64 GB benötigt, müssen Sie mit RAM 64 unabhängig davon 64 bereitstellen. Mit Swap funktioniert es auf 32 und verwendet kurz, dann verwirft, Tauschen Sie für die außergewöhnlichen Zeiten.

Tl; Dr - Sie verpassen völlig den wirtschaftlichen Punkt.

4
Stilez

Was kann mit Swap gemacht werden, was nicht auch durch Hinzufügen von RAM möglich wäre?

Für den Ruhezustand ist eine Auslagerungsdatei erforderlich, auch wenn der Auslagerungszustand nicht anderweitig verwendet wird.

Sonst nichts. Swap ist eine gute Notlösung if

  • RAM ist im Vergleich zum Speicherplatz sehr teuer oder begrenzt

  • Das System ist ein Allzwecksystem unter der Kontrolle eines Benutzers, der von Zeit zu Zeit unvorhersehbare Software und/oder Workloads ausprobieren kann.

  • Wenn OOM-Szenarien überhaupt möglich sind und das Paging auf die Festplatte dem völligen Absturz von Programmen vorzuziehen ist.

Was genau kann Swap tun RAM kann nicht

Zwei Dinge:

A. Seien Sie dabei, wenn RAM voll ist).

B. Halten Sie Speicherseiten, die zu einem bestimmten Zeitpunkt nicht von Prozessen verwendet werden (weil sie unter bestimmten Bedingungen blockiert sind), damit RAM für etwas anderes verwendet werden kann).

Wenn Sie genug RAM) haben, um eine Speicheranforderung von allen Prozessen zu erfüllen, die jemals gleichzeitig ausgeführt werden, oder OOM-Fehler nicht stören, kann A ignoriert werden.

Linux verwendet free RAM, um Lese- und Schreibvorgänge für Blockgeräte zwischenzuspeichern, muss dies jedoch nicht. RAM ist schneller als Blockgeräte. Linux kann blättern Wenn Dinge, die Prozesse nicht zum Austauschen verwenden, mehr RAM] zum Zwischenspeichern von Blockgeräte-Lesevorgängen verwendet werden können. Wenn Sie sich nicht um die Geschwindigkeit Ihres Blockgerätezugriffs kümmern, kann dies In eingebetteten Umgebungen wie Routern usw. kann B ignoriert werden (und in diesen Situationen ist Ihnen der Ruhezustand sowieso egal).

Swap ist kein Festplatten-Cache. Es ist möglich, dass Seiten, die sich im Swap befinden, keiner Festplattendatei zugeordnet werden oder niemals auf die Festplatte geschrieben werden sollen.

4
LawrenceC
... In diesem Fall trägt der Swap einen Flash-Speicher, der Jahre vor Ablauf der Garantie ausfällt. Wo das Verdoppeln von RAM ein paar zusätzliche Dollar auf dem Gerät ist.

Ich denke, Sie werden feststellen, dass dies falsch ist. Erstens werden ein paar zusätzliche Dollar keine vernünftige Menge an RAM verdoppeln. Zweitens ist Flash billiger als RAM. Drittens wird Swap für inaktive Daten verwendet. Wenn Sie eine Situation haben, in die die Swap-Partition kontinuierlich geschrieben wird, haben Sie zu wenig RAM und ohne Swap wäre ein wichtiger Prozess abgestürzt.

Außerdem sind zufällige Schreibvorgänge auf eine vollständige SSD (die dazu führen, dass sie frühzeitig fehlschlagen) langsam. Sie sind in der Tat sehr, sehr langsam. Ihre SSD stirbt nicht vorzeitig, wenn Ihr Computer nicht durch Tauschen zum Crawlen verlangsamt wird.

Es ist weitaus besser, wenn Ihr Computer deutlich langsamer wird, wenn der Arbeitsspeicher knapp wird, als wenn ein wichtiger Prozess abstürzt.

Was können Sie mit Swap tun, was Sie mit RAM nicht tun können?

  • Hibernation
  • Kernel-Crash-Dumps
  • Günstiger virtueller Adressraum (viel billiger als RAM)
  • Deaktivieren von Overcommit
2
juhist

Swap kann Ihnen Geld sparen. RAM ist teurer als die entsprechende Festplattenmenge. Ziel ist es, das Kosten-Leistungs-Verhältnis zu optimieren. Natürlich ist RAM ist immer besser als Swap). Aber es kostet Sie mehr und geht verloren, wenn Sie nicht alles verwenden.

Der Nutzen des Austauschs hängt auch stark von der Art der Arbeitsbelastung ab. Wenn Sie beispielsweise viele Apps geöffnet haben, aber nur eine davon aktiv verwenden, kann das von den inaktiven Programmen verwendete RAM RAM) freigegeben und stattdessen vom aktiven Prozess verwendet werden. Ein Andererseits ist die Verwendung eines einzelnen speicherintensiven Programms, das mehr Speicher benötigt als die verfügbare Menge von RAM), eine nicht optimale Verwendung von Swap.

2
Johan Myréen