Homelab Ressourcen optimieren

Im Homelab kommt es in der Regel vor allem auf hohe Packungsdichte und weniger auf individuelle Performance der VMs oder theoretischen Security Themen an. Daher lassen sich im Homelab einige Ressourcen einsparen, indem man in den Advanced Settings der Hosts ein paar Anpassungen vornimmt:

Transparent Page Sharing

Die erste Ressource, die üblicherweise zur Neige geht, ist der Hauptspeicher. Das VMware Kernel liefert einige Features, um den Hauptspeicher optimal zu nutzen. Dies sind unter anderem (Liste ist nicht vollständig):

  1. Zero Page Reclamation – Alle Pages, die von einer VM angefordert wurden, aber nicht benutzt werden, werden vom Zero Page Collector wieder zurück geholt.
  2. Transparent Page Sharing – Memory Deduplication. Auf Speicherseiten wird ein Hash Wert gebildet und dieser Hash Wert permanent verglichen. Redundante Werte werden durch einen Pointer ersetzt. Beim beschreiben der Seite wird mittel CoW zunächst die Seite kopiert und danach der Inhalt verändert.

Transparent Page Sharing ist ein extrem effektiver Mechanismus. Allerdings kostet er. Zunächst einmal muss der komplette Hauptspeicher permanent gescannt werden und zum Zweiten ist die Schreibperformance durch den CoW Mechanismus natürlich geringer als ohne TPS. TPS ist permanent eingeschaltet.

Allerdings greift seit vSphere 5 TPS nicht mehr optimal. Dies liegt an mehreren Dingen:

  1. Large Pages: Die Memory Pages wurden in der Vergangenheit in 4kB Blöcken adressiert. Die Chance, dass 4kB identisch sind, ist relativ hoch. Aus Performance- und Ressource Gründen (TLB Mapping) wurde aber der Page Size mit dem Wechsel auf die 64bit Architektur auf bis zu 4MB angehoben (Large Pages). S. hier
    ESXi unterstützt Large Pages bis 2MB. Dies reduziert bei großen Maschinen den Memory Overhead und beschleunigt die Speicherzugriffe, da TLB Misses seltener sind. Allerdings sit die Chance, dass mehrere 2MB Pages im Host identisch sind relativ gering.
  2. Memory Salting: Es gibt ein akademisches Paper, in dem beschrieben wird, wie man theoretisch aus einer VM ausbrechen kann, wenn man auf TLB Pages zugreift. Daher wurde 2015 ein Memory Salting eingeführt, was dazu führt, dass effektiv nur noch Pages innerhalb einer VM miteinander geteilt werden können. Dies ist nachvollziehbarer Weise auch wenig effektiv.
    Für bestimmte Use Cases kann für bestimmte Maschinen der selbe Salt Wert angegeben werden, was es erlaubt, dass TPS nun über diese VMs hinweg funktioniert. Dies kann in einer VDI Umgebung sinnvoll sein.

In meinem Homelab habe ich daher ein paar Advanced Parameter auf dem Host geändert:

  1. Large Pages ausschalten: Mem.AllocGuestLargePage = 0
  2. Salting abschalten: Mem.ShareForceSalting = 0

Nun, wie effektiv ist nun die Maßnahme? Ich habe hierfür ein vROPs Dashboard gebaut:

Wie man sehen kann, schwankt die TPS Menge, dennoch wird deutlich, dass TPS extrem gut funktioniert. Die Metrik Memory|Shared gibt den gesamten geteilten Speicher an. Dies ist aber leider noch keine Information bezgl. der Effektivität. Daher kommt die zweite Metrik Memory|Shared Common hinzu, die angibt, wieviel individuelle Pages gehalten werden. Die Differenz aus beiden gibt nun an, wieviel Speicher durch TPS eingespart wurde. In meinem Fall sind das über 40GB!.

Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.