Wann wird der Swap wieder in den physischen Speicher verschoben?

8

Wann wird Swap unter Linux wieder in den physischen Speicher verschoben? Ist es nur auf Anfrage, dh. wann wird es gebraucht? Oder wird der Swap langsam in den physischen Speicher übertragen, wenn der Computer nicht unter hoher Last steht?

Ztyx
quelle

Antworten:

7

Auf Nachfrage. Tatsächlich überträgt Linux den physischen Speicher langsam, um ihn im Leerlauf auszutauschen (siehe: "swappiness").

Ignacio Vazquez-Abrams
quelle
Vielen Dank. Eine kurze, prägnante Antwort. Ich mag das (obwohl ich die Bemühungen aller anderen schätze, die in ihre Antworten gesteckt wurden)!
Ztyx
Diese Antwort ist falsch. Die Frage ist, wann Speicher eingelagert und nicht ausgelagert wird. Das ist das Gegenteil. Bei einem Seitenfehler lädt der Kernel die Seite von Disk / Swap neu. Also meistens auf Anfrage. Sie können auf den gesamten virtuellen Speicher eines Prozesses zugreifen, um Seitenfehler auszulösen. Infolgedessen würden die Seiten zurück in den RAM kopiert.
user228505
7

Während des regulären Betriebs werden Daten vom Swap bei Bedarf in den Speicher geladen, wie andere geantwortet haben. In diesem Fall gibt es jedoch noch einen weiteren Fall: Wenn der Swap-Speicher deaktiviert ist, ist genügend physischer Speicher vorhanden, um den gesamten Swap-Inhalt zu laden.

Mach einfach:

swapoff -a

… Und alle Ihre Auslagerungsdaten werden in den Speicher zurückgeführt. Der Nebeneffekt ist, dass Festplattenpuffer / Caches möglicherweise geleert werden.

Manchmal kann es wünschenswert sein swapoff -a ; swapon -a, z. B. nach einem fehlerhaften Speicherverlustprozess vor dem Absturz wichtigere Prozesse zu löschen - um sicherzustellen, dass alle im System ausgeführten Prozesse in den Speicher geladen werden und nicht auf den Austausch warten ein paar Minuten.

Jacek Konieczny
quelle
Oh, du lernst jeden Tag etwas Gutes! Übrigens, wird ´swapoff -a´ scheitern, gibt es nicht genug physisches Gedächtnis? Besteht das Risiko, Swapoff anzurufen?
Ztyx
Es schlägt fehl, wenn nicht genügend physischer Speicher vorhanden ist. Das ist immer noch ein Risiko, swapoffdas nicht fehlschlägt, aber das System wird bald nach dem swapoffund der OOM den zufälligen Prozess beenden (im schlimmsten Fall die Shell, die gerade aufgerufen wird, swaponoder den swaponBefehl). In der Praxis ist dies sehr unwahrscheinlich - Caches verwenden viel Speicher, bevor sie swapoffaufgerufen werden. Daher sollte genügend RAM vorhanden sein, damit beide Befehle ausgeführt werden können.
Jacek Konieczny
7

Wie andere bereits betont haben, werden Seiten nur bei Bedarf (bei Bedarf) wieder in den Arbeitsspeicher kopiert, anstatt Arbeitsspeicher zu belegen, der möglicherweise besser für Cache / Puffer verfügbar ist.

Die Tatsache, dass die Seiten zurück in den Arbeitsspeicher kopiert und nicht verschoben werden, ist wichtig und kann zu Verwirrung führen, wenn Sie sich dessen nicht bewusst sind. Die Seite wird nicht vom Swap freigegeben, es sei denn, sie wird überhaupt nicht mehr benötigt (dh die Seite wird vollständig freigegeben), wird im RAM geändert (sodass die Kopie beim Swap nicht mehr korrekt ist) oder der Swap geht zur Neige (und das Ein -Disk-Blöcke werden benötigt, um einige andere Seiten auszutauschen. Auf diese Weise ist kein erneutes Schreiben der Festplatte erforderlich, wenn die Seite in Zukunft erneut ausgetauscht werden muss, da der Kernel weiß, dass bereits eine gute Kopie auf der Festplatte vorhanden ist. Dies kann das "Thrashing" erheblich reduzieren, wenn der verfügbare RAM kritisch niedrig wird, der Swap-Speicher jedoch nicht verstopft.

Sie können sehen, wie viele Seiten sich derzeit sowohl im RAM als auch im Swap befinden. cat /proc/meminfoDie SwapCachedZeile gibt die Datenmenge an, die sich auf Seiten befindet, die sich derzeit sowohl im RAM als auch auf der Festplatte befinden. Wenn Sie der Meinung sind, dass Ihr aktueller Swap ihn höher als erwartet verwendet, überprüfen Sie den SwapCached-Wert, da dies möglicherweise die Diskrepanz erklärt.

David Spillett
quelle
Es gab bereits Diskussionen zu ähnlichen Themen. Allerdings nicht diese spezielle Frage. Siehe auch serverfault.com/questions/100448/…, das sich mit SwapCached befasst.
Ztyx
Ich erinnere mich nicht einmal daran, diese Antwort geschrieben zu haben ... Ich hätte sie wahrscheinlich einfach
verlinken
0

Dies ist normalerweise an die von Ihnen verwendete Hardware gebunden. Auf der meisten Hardware (einschließlich Intel) steuert die MMU den gesamten Prozess.

Wenn ein Programm Speicher zuweist, fordert es ihn an die MMU an und erhält eine virtuelle Adresse zurück. Die MMU registriert diese Seite wiederum als "in Verwendung" in der globalen Adressraumkarte.

Wenn das Programm tatsächlich auf diesen Speicherplatz zugreift, sucht die MMU die Seite in der Adresszuordnung. Befindet sich diese Seite im "Live" -Speicher, sendet sie einen "Live" -Zeiger an das Betriebssystem zurück, der das Lesen / Schreiben des Speichers im Auftrag des Programms übernimmt. Wenn der Speicher derzeit nicht zugewiesen ist, wird ein Seitenfehler ausgelöst. Diese Prozessorausnahme wird dann vom Betriebssystem abgefangen, das dann dafür verantwortlich ist, herauszufinden, wo sich die Daten in der Auslagerungsdatei befinden, sie in den physischen Speicher zu laden und die Seite an die MMU zurückzugeben, damit der anfängliche Prozess fortgesetzt werden kann.

Dies bedeutet, dass, wenn nicht auf die Speicherseite zugegriffen wird, diese nach dem Auslagern nie wieder in den "Live" -Speicher zurückkehrt. Aus diesem Grund gibt es normalerweise eine Betriebssystem-API, mit der Programme festlegen können, dass ein bestimmter Speicherblock NICHT auf die Festplatte übertragen werden soll und im Speicher bleiben soll (ich weiß nichts über Linux, aber unter Windows ist es die VirtualLock-Funktion). .

Stephane
quelle
mlock(2) linux.die.net/man/2/mlock
Ignacio Vazquez-Abrams