Gedächtnisballon im Betriebssystem


13

Einige Hypervisoren optimieren die Speichernutzung mit einer Methode, die als Ballooning bezeichnet wird (zumindest nennt KVM das so). Diese Methode dedupliziert den Speicher zwischen VMs und setzt gemeinsame Seiten auf schreibgeschützt, wobei beim Schreiben kopiert wird.
Dies ist das Gegenteil eines Gabelrufs.

Ist es möglich, Prozesse auf Betriebssystemebene zu implementieren (ich dachte hauptsächlich an die Duplizierung des Speichers beim Surfen mit Chromium mit mehreren Registerkarten auf derselben Site). Wurde sie bereits implementiert?

Antworten:


14

Was Sie beschrieben haben, verwirrt das Ballonfahren und das Zusammenführen derselben Seite. Ich werde versuchen, die beiden näher zu erläutern, um den Unterschied deutlich zu machen.

Gedächtnisballon

Dies ist ein Trick , um sicherzustellen , dass einige der an den zugewiesenen Speicher Gast virtuellen Maschine bleibt von einem anderen nutzbaren Gast oder der Gastgeber selbst (Caches, etc). Dies geschieht auf folgende Weise:

In den Gast-Kernel wird ein Treiber eingefügt, der die Speichernutzung des Gasts überwacht und einen Teil des nicht verwendeten Speichers "stiehlt" (indem er sich selbst im Speicher des Gasts zuordnet und so sicherstellt, dass dieser Gast diesen Bereich nicht berühren kann).

Dann informiert es den Host-Kernel, dass es diese Speicherseiten tatsächlich aus dem Kern entfernen kann, dass sie im Gast nicht verwendet werden (bis der Gast einen gewissen Speicherdruck erfährt, an welchem ​​Punkt der Ballon entleert und verwendet wird) diese Bereiche wieder).

Letztendlich kann der Kernel genau denselben Speicher einem anderen Gast zuweisen und die gesamte Speichernutzung effizienter gestalten, wenn die Gäste mit viel freiem Speicher arbeiten.

Gleiche Seite zusammenführen

Diese Technik identifiziert identische Speicherseiten, die aus irgendeinem Grund nicht bereits als "schreibgeschützt" beim Kopieren beim Schreiben markiert sind, und markiert sie als solche.

Auf Betriebssystemebene besteht nur ein begrenzter Bedarf an solchen Tricks. Einfach gesagt, sind die meisten identischen Speicherseiten bereits schreibgeschützt (manchmal sogar ohne CoW), da es sich meistens um Anwendungscode, Bibliotheken usw. handelt. Sie werden nativ über eine Memory Map geöffnet und können daher vom Kernel beibehalten werden Nur eine Kopie von ihnen im Kern (wenn überhaupt, kann sie auch vollständig ausgeblendet und bei Bedarf aus dem Primärspeicher eingelagert werden).

Auf der Ebene des virtualisierten Betriebssystems wird dasselbe Prinzip in jedem Gastsubsystem ordnungsgemäß angewendet. Der Host-Kernel hat jedoch keine Ahnung, ob zwei der Gäste zumeist denselben Code ausführen und sich daher denselben Speicher teilen - die Gäste kommunizieren nicht, um dies zu koordinieren.

Deshalb ist es manchmal das gesamte System für identische Speicherseiten scannen - die meiste Zeit, werden sie identisch sein über das Gastbetriebssystem ist, nicht in jedem - der Gast - Kernel macht einen anständigen Job den Speicher ordentlich er innerhalb der Reichweite zu halten. In einer typischen VM-Umgebung, in der ein Host-Kernel mehr als 50 Gäste verwaltet, können daher erhebliche Speichereinsparungen erzielt werden.

Beides auf einmal

Ballooning und Same-Page-Merging können sehr gut koexistieren und für identische Systeme eine erhebliche Überbelegung des Speichers erzielen.


Zur Beantwortung Ihrer Frage: Das Zusammenführen derselben Seite kann und wird manchmal auf Betriebssystemebene aktiviert. Dies hat mit der gemeinsamen Nutzung von Seiten zu tun, die interpretiert werden und daher möglicherweise identisch sind, ohne dass dieselbe Sicherungsdatei vorhanden ist.

In Ihrem Chromium-Beispiel - die Prozess-Binärdateien selbst sind bereits über eine schreibgeschützte Startzuordnung dedupliziert - teilen sie sich genau denselben Speicherplatz. Die Seiten-Caches (Inhalte der Registerkarten) werden normalerweise auch von Prozessen gemeinsam genutzt (schreibgeschütztes Kopieren beim Schreiben), da der Festplatten-Cache verwaltet wird. Dieselbe Datei auf der Festplatte kann gleichzeitig zwischen verschiedenen Prozessen in der VM geöffnet werden -optimaler Sinn.

Der Vorteil ist am offensichtlichsten beim gemeinsamen Status verschiedener Javascript-Engines. Ich bin mir jedoch nicht sicher, ob sie im exakt gleichen Speicherlayout zugeordnet sind und sicherstellen, dass die gesamte Speicherseite identisch ist.

Dies ist auf mobilen Systemen anders. Android beispielsweise verwendet KSM in großem Umfang, um identischen Code zwischen verschiedenen Anwendungen zu deduplizieren.

In beiden Fällen können Sie es selbst unter Linux aktivieren (Kernel SamePage Merging). Der Treiber exportiert verschiedene Statistiken, die Sie nach dem Lesen dieser Antwort interpretieren und selbst entscheiden können, ob sie zu Ihrem Zweck passen.

https://www.kernel.org/doc/Documentation/vm/ksm.txt


3
Das Zusammenführen derselben Seite wird je nach Hypervisor (und Alter) auch als "transzendenter Speicher" bezeichnet.
Tim Post

Vielen Dank, ich sehe, dass KSM erfordert, dass die Anwendung davon Kenntnis erhält, und nach einer (Schnell-) Suche unterstützt Chromium dies derzeit nicht. Mir ist bekannt, dass die Binärdateien dedupliziert sind, aber ich beziehe mich hauptsächlich auf die JIT-Ausgabe und die unformatierten Skripte, die meinen Arbeitsspeicher stark belasten ...

Raw-Skripte in Chromium werden ebenfalls dedupliziert - sie landen wie alle anderen Webobjekte im Festplatten-Cache, und der Festplatten-Cache wird zugeordnet und nicht gelesen.
QDOT

Die unformatierten Skripte werden zugeordnet, aber selbst häufig verwendete Skripte (wie jQuery und Angular.js) werden im Cache repliziert und sind nicht aufeinander abgestimmt, da CDNs und exakte Replikate von Skriptdateien auf den verschiedenen Standortservern häufig verwendet werden.

Dies sollte wahrscheinlich im Chat enden, aber ich würde gerne Ihre Statistiken von Linuxs KSM sehen.
qdot
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.