Google-Ingenieure haben diesen Monat damit begonnen, neue Patches für das Linux-Speicherverwaltungssubsystem und zugehörige Komponenten für eine Funktion namens Working Set Reporting zu veröffentlichen.

Die Working Set Reporting-Funktionalität baut auf MGLRU auf und zielt darauf ab, besser mit überbelegten VMs oder Containern umzugehen. Die aktuelle RFC-Patchserie fasst die Dinge wie folgt zusammen:

Hintergrund
==========
Workloads können sowohl für Clients als auch für Server mit virtuellen Maschinen, Kubernetes-Containern oder Memcgs containerisiert werden. Die Arbeitslasten unterscheiden sich zwischen Servern und Clients.

Serverjobs haben einen vorhersehbareren Speicherbedarf und sind besorgt über Stabilität und Leistung. Eine Technik ist die proaktive Rückgewinnung, die Speicher vor dem Speicherdruck zurückfordert und die Menge des tatsächlich freien Speichers auf einem Computer sichtbar macht.

Clientanwendungen sind stoßartiger und unvorhersehbarer, da sie auf Benutzerinteraktionen reagieren. Das System muss schnell auf interessante Ereignisse reagieren und den Energieverbrauch berücksichtigen.

Eine überlastete Maschine kann die Stellfläche der Container vergrößern über memory.max/high, virtio-balloon usw.
Das Balloon-Gerät ist ein typischer Mechanismus für die gemeinsame Nutzung von Speicher zwischen einer Gast-VM und einem Host. Dies ist besonders nützlich in Szenarios mit mehreren VMs, in denen der Speicher überbelegt ist und dynamische Änderungen der VM-Speichergröße erforderlich sind, wenn sich die Arbeitslasten auf dem System ändern. Das Ballongerät verfügt jetzt über eine Reihe von Funktionen, die dabei helfen, Speicherressourcen sinnvoll zwischen Gästen und Gastgeber zu teilen (z. B. kostenlose Seitenhinweise, Statistiken, kostenlose Seitenberichte). Für ein Host-Controller-Programm, dessen Aufgabe es ist, die Speicherressourcen in einer Umgebung mit mehreren VMs zu optimieren, muss es diese Tools verwenden, um zwei konkrete Fragen zu beantworten:

1. Wann ist der richtige Zeitpunkt, den Ballon zu modifizieren?
2. Um wie viel sollte der Ballon verändert werden?

Ein frühes Projekt zur Entwicklung einer solchen „Auto-Ballon“-Funktion wurde 2013 durchgeführt. In jüngerer Zeit wurden zusätzliche VIRTIO-Geräte erstellt (virtio-mem, virtio-pmem), die mehr Tools für eine Reihe bieten von Anwendungsfällen, jeder mit Vor-und Nachteilen. Ein früherer Vorschlag zur Erweiterung von MGLRU mit Working-Set-Schnittstellen konzentriert sich auf Server-Anwendungsfälle, funktioniert jedoch nicht für Clients.

Vorschlag
==========
Eine einheitliche Arbeitsset-Berichtsstruktur, die sowohl für Server als auch für Clients funktioniert. Es umfasst Histogramme pro Knoten auf dem Host, Histogramme pro Memcg und eine Virtio-Ballon-Treibererweiterung.

Es gibt zwei Möglichkeiten, mit der Arbeitsset-Berichterstellung zu arbeiten: ereignisgesteuert und abfragend. Der Host-Controller kann Benachrichtigungen von Reclaim empfangen, wodurch ein Bericht erstellt wird, oder der Controller kann das Histogramm direkt abfragen.
Patch 1 führt den Working Set-Berichtsmechanismus und die Host-Schnittstellen ein. Weitere Informationen finden Sie im Abschnitt „Details“. Patch 2 erweitert den virtio-balloon-Treiber um Arbeitsset-Berichte.
Der erste RFC baut auf MGLRU auf und soll als Proof of Concept für Diskussionen und Verfeinerungen dienen. T.J. und mein Ziel ist es, die aktive/inaktive LRU und die Working-Set-Schätzung aus dem Userspace zu unterstützen. Wir arbeiten an Demoskripten und bekommen auch einige Zahlen.

Zusätzlich zu den Änderungen an der Speicherverwaltung des Linux-Kernels gibt es QEMU-Patches für VirtIO Balloon zum Hinzufügen der Working Set Reporting-Funktion.

„Der Anwendungsfall ist ein Host mit überbelegtem Speicher und einer oder mehreren VMs. Das Ziel besteht darin, sowohl zeitnahe als auch genaue Informationen über die gesamte Speicherauslastung zu erhalten, um entsprechende Rückforderungsaktivitäten voranzutreiben, da dies bei einigen Client-Geräten der Fall ist.“ In einigen Fällen benötigt eine VM möglicherweise für einen bestimmten Zeitraum einen erheblichen Teil des Gesamtspeichers, tritt dann aber in eine Ruhephase ein, die zu einer großen Anzahl kalter Seiten im Gast führt.

Das Ballongerät verfügt jetzt über eine Reihe von Funktionen Unterstützung bei der gemeinsamen Nutzung von Speicherressourcen zwischen den Gästen und dem Host (z. B. kostenlose Seitenhinweise, Statistiken, kostenlose Seitenberichte). Wie in Folie 12 in [1] erwähnt, verfügt der Ballon nicht über einen guten Mechanismus, um die Rückgewinnung des Gastcaches voranzutreiben. Unser Anwendungsfall umfasst sowohl den typischen Seiten-Cache als auch „Anwendungs-Caches“ mit Speicher, der in Zeiten systemweiten Speicherdrucks verworfen werden sollte. In einigen Fällen kann virtio-pmem eine Methode zur Host-Steuerung des Gast-Caches sein, aber es gibt sie unerwünschte Auswirkungen auf die Sicherheit.“

Und dann gibt es noch die