Warum wird ein Teil meines Swap-Speicherplatzes verwendet, wenn ich noch nicht genutzten RAM habe?

9

Eher eine Neugier als ein Problem; und ich gebe zu, so etwas wie eine peinlich grundlegende Frage:

Ich habe festgestellt, dass auf meinem Linux-Computer bei vielen Gelegenheiten ~ 500 MB Swap-Speicherplatz verwendet werden, obwohl ich ~ 600 MB nicht verwendeten RAM habe.

Mein naives Verständnis auf hoher Ebene war, dass der Swap-Bereich erst aktiviert wird, wenn der Arbeitsspeicher erschöpft ist.

Ich ging weiter und ging davon aus, dass dies der Linux-Kernel sein muss, da ein Benutzerprozess, der Speicher anfordert, dies nur logisch tut und keine Ahnung hat, ob dieser Speicher physisch durch RAM oder den Swap Space gesichert ist.

Was zu der Frage führt, warum der Kernel den Swap Space präventiv nutzen würde? Ist dies Teil eines Algorithmus zur Leistungsoptimierung? Wird es auf Festplattenteile ausgelagert, auf die am wenigsten zugegriffen werden kann (möglicherweise ein LRU-Schema)? Wenn ja, wäre es nicht einfach sinnvoll, alles im RAM zu belassen und erst dann, wenn die Erschöpfung näher rückt, die LRU-Teile vom RAM in den Swap-Bereich zu tauschen?

Ich sollte klarstellen, mein Linux-Server hat 2 GB RAM und 2 GB Swap-Speicher.

user35997
quelle
1
Warum die 4 Stimmen, um diese Frage zu schließen?
2
@ Aaron: Es ist nicht so, dass du eine schlechte Frage hast. Sie haben es gerade in Bezug auf die Systemverwaltung formuliert, damit es besser zu Hauptbenutzern oder Serveradministratoren passt. Dass Sie sich als Kuriosität darüber wundern, scheint eher ein Power-User-POV zu sein.

Antworten:

11

Der nicht verwendete Teil des RAM wird tatsächlich als HDD-Cache verwendet. Wenn Sie darüber nachdenken, lesen Sie tatsächlich Teile Ihrer Festplatte häufiger, als Sie auf einige Teile des Arbeitsspeichers zugreifen. Dies ist sinnvoll, um diesen RAM auf der Festplatte abzulegen und gleichzeitig RAM zum Zwischenspeichern von Festplattendaten zu verwenden.

Didier Trosset
quelle
7

Es ist sinnvoll, die Dinge im Voraus auszutauschen, da Sie nicht warten müssen, bis der Kernel mit dem Festplattenzugriff fertig ist, wenn Sie den Speicher wirklich benötigen.

Angenommen, Sie möchten ein großes Bild öffnen. Wenn das Bild geladen wird, werden 300 MB RAM benötigt. Wenn der Kernel den gesamten verfügbaren Arbeitsspeicher verwendet, erfordert das Laden Ihres Images, dass der Kernel 200 MB vom Arbeitsspeicher auf die Festplatte überträgt. Wenn der Arbeitsspeicher zuvor proaktiv geleert wurde, sparen Sie einige Millisekunden.

Xr.
quelle
7

2 Gründe:

  1. (@dtrosset) Linux tauscht nicht verwendete Programmteile aus, um mehr Cache und Puffer zu erhalten.
  2. Möglicherweise haben Sie in der Vergangenheit mehr Speicher verwendet und einige Dinge ausgetauscht, und es wurde nicht ausgetauscht, weil es nicht verwendet wurde, obwohl alles, was es erzwungen hat, jetzt verschwunden ist.
Douglas Leeder
quelle
1

Zusätzlich zu den anderen Antworten können Sie Linux so konfigurieren, dass für jeden zugewiesenen Speicher eine Sicherung erforderlich ist, auch wenn Programme ihn nicht verwenden.

Überbeanspruchen von Speicher und Angst vor dem OOM-Killer sind jedoch keine notwendigen Teile der Linux-Erfahrung. Durch einfaches Setzen des sysctl-Parameters vm / overcommit_memory auf 2 wird das Overcommit-Verhalten deaktiviert und der OOM-Killer für immer in Schach gehalten. Die meisten modernen Systeme sollten über genügend Speicherplatz verfügen, um in den meisten Situationen eine umfangreiche Auslagerungsdatei bereitzustellen. Anstatt zu versuchen, zu verhindern, dass Haustierprozesse beendet werden, wenn der überlastete Speicher knapp wird, ist es möglicherweise einfacher, die Situation insgesamt zu vermeiden. [ Pause vom OOM-Killer ]

Wenn ein Programm Speicher zuweist, kann der Kernel einfach mehr Swap-Seiten als festgeschrieben markieren. Diese Anzeige wird im Speichermanager des Kernels gespeichert, der tatsächliche Speicherplatz wird noch nicht berührt. Bis dieser Speicher verwendet wird, muss tatsächlich nichts ein- und ausgelagert werden. Wenn sie nie verwendet werden, schwankt die Swap-Nutzung, ohne die Leistung zu beeinträchtigen.

Da Prozesse mit einem eigenen Adressraum oder einer eigenen "Ansicht" dargestellt werden (so funktioniert Swap in erster Linie), hat der Kernel viel Spielraum bei der Verwaltung. Wenn Sie ein Fork-Beispiel verwenden, das auch aus dem oben verlinkten Artikel stammt, kann der Speicher kopiert werden, da es viel wahrscheinlicher ist, dass gemeinsam genutzte Speicherseiten vorhanden sind, als eine große Menge nicht verwendeten Speichers frisch zuzuweisen, wodurch die Anzahl der Swap-Verwendungen erhöht wird. Wenn es tatsächlich geschrieben wird (was möglicherweise nicht der Fall ist), kann dieser "festgeschriebene Swap" durch nicht verwendeten RAM ersetzt werden (dann die RAM-Nutzung erhöhen und die Swap-Nutzung verringern). Stellen Sie sich einen Prozess mit 500 MB zu, der auf einem Computer mit vollständigem oder fast vollständigem RAM verwendet wird. Wenn 500 MB im Swap verfügbar sind (und der Speicherplatz billig ist, wie groß ist 1% der heutigen TB-Laufwerke ?: P), muss (noch) kein Speicher kopiert werden

Somit wird die Möglichkeit des OOM-Killers vermieden, und es ist viel einfacher, die meisten Softwareprodukte unter der Annahme zu entwerfen, dass Speicherzuweisungen (einschließlich "impliziter" Zuweisungen durch etwas wie Fork) entweder sofort erfolgreich sind oder fehlschlagen, mit der praktischen Erkenntnis, dass Speicher erforderlich ist getauscht, dann könnte es die Leistung beeinträchtigen. Diese Auswirkung ist fast immer gering, führt jedoch im schlimmsten Fall zu einem Swap-Thrashing (manchmal immer noch einem direkten Kernel-Crash oder OOM-Killer vorzuziehen).

Obwohl ich nicht genau weiß, wie der Linux-Speichermanager funktioniert, ist diese Antwort mein allgemeines Verständnis und das, woran ich mich im Laufe der Jahre erinnere. Ich habe versucht, diese Antwort erneut zu bearbeiten, sodass ein minimales Verständnis des Betriebssystemdesigns erforderlich ist (es ist sehr komplex und nicht etwas, das mich schrecklich interessiert), aber es scheint ein wenig zu schwanken. Bitte lassen Sie mich wissen, wenn Sie sehen, wie es verbessert werden könnte. Auf der packenden Hand könnte es keine so peinlich grundlegende Frage sein.

Roger Pate
quelle