Das Ganze klingt zwar nach bösem Voodoo, funktioniert aber tatsächlich: Kernel SamePage Merging. Möglich ist das seit Kernel 2.6.32 und funktioniert, vereinfacht dargestellt, so, dass der Kernel versucht, identische Speicherinhalte zu identifizieren und diese quasi intern zu verlinken.
In der Praxis setze ich das auf einem von mir verwalteten Cluster mit 14 Knoten ein, der mit der auf Virtualisierung und Clustering spezialisierten Linux-Distribution Proxmox läuft. Proxmox vereint KVM und containerbasierte Virtualisierung unter einem Dach, indem auf der einen Seite ein angepasster Linux-Kernel für die paravirt-ops-Schnittstelle eingesetzt und auf der anderen Seite OpenVZ für die containerbasierte Virtualisierung verwendet wird. Der letzte Artikel hier handelt von diesem Thema. Proxmox wird direkt auf jedem der Knoten installiert und danach über eine recht komfortable und moderne Weboberfläche administriert.
Zurück zum Thema, KSM. Ich habe einen entsprechenden Kernel auf einem der Knoten installiert und betreibe auf diesem drei KVM-Maschinen mit Windows Server 2008 R2. Alle drei Maschinen haben 4 GB RAM zugewiesen bekommen, sollten also 12 GB RAM benötigen. Jetzt kommt der Knackpunkt: jeder dieser Knoten verfügt nur über 8 GB physikalischen Speicher. Rein rechnerisch klappt das also nicht, der Knoten müsste anfangen zu swappen. In der grafischen Übersicht des Knotens zeigt Proxmox eine RAM-Auslastung von theoretischen 10 GB an, tatsächlich werden aber nur ungefähr 3,75 GB verwendet, über die Hälfte des verbauten RAMs ist also noch frei. Da die Basis aller drei Installation identisch ist, kann der nun theoretisch drei Mal belegte Speicher zu einem Bereich zusammengefasst und somit zu 2/3 eingespart werden.
Das Verfahren hat natürlich nicht nur Vorteile: die aufwändigere Speicherverwaltung kostet CPU-Zeit. Wenn aber zu erwarten ist, dass die installierten VMs hauptsächlich viel RAM aber wenig Rechenleistung benötigen, spielt das eine eher untergeordnete Rolle. In meinem Falle kommt pro Knoten ein Intel Core2Quad Q9550 zum Einsatz. CPU-Leistung ist also ausreichend da.
RedHat hat es geschafft, auf einer Testmaschine mit 16 GB RAM 52 (!) VMs mit Windows XP parallel zu betreiben, jeder Maschine war 1 GB virtuelles RAM zugeordnet worden. Noch mal in Zahlen: theoretisch belegt worden wären 52 GB, praktisch genutzt aber nur 16 GB.
2 Antworten zu “KSM (Kernel SamePage Merging) in der Praxis”
OK, gelesen habe ich davon in der c’t schon mal, aber noch nie in der Praxis erlebt.Hast du die Systeme denn auch im Echtbetrieb laufen oder sind das alles Zahlenspiele mit der Theorie?
<html><head></head><body style=“word-wrap: break-word; ‑webkit-nbsp-mode: space; ‑webkit-line-break: after-white-space; “><div>Na, das steht doch im dritten Absatz. Diese Systeme laufen im Echtbetrieb, aber nicht unter hoher Last. Was sich aber noch ändern wird.</div><div><br class=“Apple-interchange-newline”><blockquote type=“cite”> <div style=“width: 600px; font-size: 12px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;” class=“PosterousEmail”></div></div></body></html>