Ich mache einige Experimente mit VM und KVM. Ich versuche, die Tatsache der Überbelegung und des Swap-Speichers zu erkennen. Lassen Sie mich zunächst das System-Setup und die zugehörige Konfiguration zeigen, die ich für dieses Experiment vorgenommen habe.
Mein Hostcomputersystem hat:
- Speicher (DRAM): 16 GB
- Swapspace (Swap-Partition): 32 GB
- SSD: 512 GB
und meine VM hat:
- Speicher: 4 GB
- Swapspace (Swap-Partition): 8 GB
- virtuelle Festplattenkapazität: 20 GB
Wenn ich die Speicherressource der VM über die Cgroup-Schnittstelle von 4 GB auf 1 GB begrenze. In dieser SituationÜberbeanspruchungtritt auf. Dann habe ich versucht, dies zu lösen, indem ichWAP-Bereichund durchgechecktvmstatob es funktioniert hat oder nicht. Es scheint, dass es den Swap-Speicher nicht als Speicher verwendet.
Warum hat meine VM bei Überlastung keinen Swap-Speicherplatz verwendet?
Antwort1
Ich glaube, Sie verstehen nicht, was „Überbeanspruchung“ bedeutet.
Überbelegung ist kein Trick, um tatsächlich mehr Ressourcen zu haben, als Sie dem System zugemutet haben. Es ist eine Technik, um so zu tun, als ob es mehr Ressourcen gäbe.
Das Grundkonzept ist, dass die meisten Programme mehr Speicher zuweisen, als sie tatsächlich verwenden. Beispielsweise können sie 32 KB RAM zuweisen, um eine Datei einzulesen, die nur 57 Byte groß ist. Sie lesen sie ein und verwenden dafür tatsächlich eine Speicherseite. Aber es waren immer noch 32 KB zugewiesen. Beachten Sie, dass dieses Beispiel aus den 90er Jahren stammt und heute die Zuweisung größer und die Datei größer ist. Der Punkt ist jedoch, dass zusätzlicher Speicher immer noch eine Verpflichtung darstellt, die niemals eingelöst wird.
Wenn ich mich nicht irre, passiert das sogar in einigen Programmen, die es nicht bewusst tun, weil sie Bibliotheken laden, die es tun, und sogar das Laden dieser Bibliotheken tut es - der Linker weist der Bibliothek genügend Speicher zu, aber nur die Routinen, die tatsächlich aufgerufen werden, werden tatsächlich geladen. Das wird wahrscheinlich gemeinsam genutzter Speicher sein, sodass dieser Effekt minimiert wird, aber er ist immer noch da.
Das Ausmaß der übermäßigen Zuweisung hängt stark von den aufgerufenen Programmen und ihrer Verwendung ab. Wenn ein Programm sehr gründlich ausgeführt wird, wird es wahrscheinlich mehr von einigen seiner Bibliotheken verwenden. Programme, die calloc statt malloc aufrufen, weisen weniger übermäßige Zuweisungen auf, da calloc in jedes Byte des zugewiesenen Speicherplatzes schreibt und das Betriebssystem die angeforderte Zuweisung ausführen muss, auch wenn der tatsächlich verwendete Teil des Speichers viel geringer ist. Einige Programme sind viel sorgfältiger und weisen nur die genaue Speichermenge zu, die sie benötigen, während andere sich darauf verlassen, dass das Betriebssystem Überzuweisungen unterstützt, damit sie bei der Anordnung ihrer Datenstrukturen pragmatisch vorgehen können.
Wenn die Anwendungen auf Ihrem Server, deren Nutzung auf 1 GB beschränkt ist, tatsächlich versuchen, auf Seiten im Umfang von einem ganzen GB zuzugreifen, wird der 8-GB-Swap verwendet, den Sie für die Nutzung konfiguriert haben. Dies wird jedoch nicht für eine Überbelegung verwendet. Technisch gesehen wird eine Überbelegung erst dann verwendet, wenn mehr als die 9 GB VM zugewiesen werden, die tatsächlich vorhanden sind.
Allerdings handelt es sich hier um Linux, und wenn ich mich daran erinnere, dass ich versucht habe, Linux auf die maximale Speicherzuweisung zu bringen, ohne eine Überbelegung zu aktivieren, dann ist das tendenziell etwas früher gescheitert - es hat Reserven für verschiedene Dinge wie eine kleine Menge Dateicache und so gelassen. Diese Erfahrung ist über ein Jahrzehnt her, aber ich sehe keinen Grund, das zu ändern; Speicher für Datei-E/A ist wichtig.