Per Swap-Speicher mehr virtuelle Maschinen auf KVM-Hosts nutzen

Normalerweise begrenzt der physische Arbeitsspeicher die Menge der ausführbaren virtuellen Maschinen. Per Swap-Speicher lassen sich diese erweitern.

Die nachfolgende Rechnung scheint einfach genug: Hat ein KVM-Host (Kernel-based Virtual Machine Hypervisor) 16 GB Arbeitsspeicher, sollten Sie damit maximal 32 virtuelle Maschinen (VM) mit jeweils 512 MB RAM betreiben können. Bedienen Sie sich allerdings einiger cleverer Tricks, können Sie die Nutzung des Arbeitsspeichers optimieren und somit mehr aus Ihren physischen Servern herausholen.

Sie müssen sich immer vor Augen halten, dass aus der Hypervisor-Perspektive eine mit KVM realisierte virtuelle Maschine lediglich ein Linux-Prozess ist. Aus diesem Grund gelten natürlich die allgemeinen Regeln hinsichtlich virtuellem und physischem Arbeitsspeicher wie bei jedem anderen Linux-Prozess auch.

Beim Start setzt eine KVM-VM Pointer auf virtuelle Speicher-Adressen. Virtuelles RAM ist kein echter Arbeitsspeicher, sondern lediglich ein Adressraum, in dem Prozesse Pointer setzen dürfen. Wie viel virtuelles RAM ein Prozess verwendet, ist im Prinzip völlig egal.

Ist eine virtuelle Maschine aktiv, wird physischer Speicher zugewiesen. Das ist der Arbeitsspeicher, der auch aktiv genutzt wird. Die Menge des vom Prozess belegten physischen Speichers ist mit der tatsächlichen Arbeitsspeichernutzung der virtuellen Maschine identisch. 

An dieser Stelle ist es interessant zu beobachten, dass es keine Eins-zu-Eins-Beziehung zwischen der Menge des von der VM benutzten Speichers (Abbildung 1) und dem der virtuellen Maschinen zugewiesenen Arbeitsspeicher gibt (Abbildung 2).

Abbildung 1: Speicher-Verbrauch innerhalb der virtuellen Maschinen

Abbildung 2: Speicher-Zuweisung auf dem KVM-Host

Wie Sie sehen, sind in unserer Test-VM 238 MB als benutzt markiert. Die Menge des physischen Arbeitsspeichers, den das Host-Betriebssystem reserviert hat, ist allerdings wesentlich höher. Das ist aber natürlich kein Problem, entscheidend ist dabei nur, dass die Menge des von der virtuellen Maschine benutzten physischen Arbeitsspeichers geringer ist als das der VM zugewiesene RAM.

Mit Swap-Speicher den Arbeitsspeicher erweitern

Es gibt noch einen Aspekt, der bestimmt, wie viele virtuelle Maschinen ein Server hosten kann. Wir sprechen hier von der Benutzung von Swap-Speicher, also von einer Art Auslagerungspartition bzw. Auslagerungsdatei. Der Linux-Kernel wacht darüber, ob zugewiesener Arbeitsspeicher aktiv genutzt wird. Sie können das in der Datei /proc/meminfo überprüfen:

Active: 2097832 kB
Inactive: 1136816 kB
Active(anon): 1537524 kB
Inactive(anon): 101456 kB
Active(file): 560308 kB
Inactive(file): 1035360 kB

Active bedeutet, dass der Arbeitsspeicher als RAM verfügbar sein sollte. 

Inactive ist Arbeitsspeicher, der unlängst nicht verwendet wurde und somit für ein Auslagern bereit steht. Als System-Administrator sollten Sie die Statistiken Active gegen Inactive über einen längeren Zeitraum beobachten. 

Stellen Sie außerdem sicher, dass die Menge an Swap-Speicher auf dem Server mindestens so groß wie die maximal beobachtete Menge des inaktiven Speichers ist, weil virtuelle Maschinen diesen Swap-Speicher auch wirklich nutzen werden.

Wenn Sie sich für die Nutzung von Swap-Speicher entscheiden, sollten Sie zudem sicherstellen, dass aktiver Arbeitsspeicher nicht ausgelagert wird und dann wieder eingelesen werden muss. Das führt zu deutlich reduzierter Performance. Aktiver Speicher sollte sich immer im RAM befinden und nicht im Swap-Speicher. 

Ob aktiver Speicher ausgelagert und wieder eingelesen wird können Sie überprüfen, indem Sie den Befehl vmstat verwenden. Führen Sie zum Beispiel vmstat 2 10 aus, werden zehn Zusammenfassungen der Systemauslastung in einem Intervall von zwei Sekunden ausgegeben. An dieser Stelle sollten Sie unbedingt die Statistiken für die Parameter SI und SO (Swap In bzw. Swap Out) zu überwachen. Eine große Zahl ist hier kein gutes Zeichen.

Out of Memory (OOM) und Swap-Speicher

Bei der Verwendung von Swap-Speicher sollten Sie generell auch Ihre Server immer im Blick haben, damit dem Host der Arbeitsspeicher niemals ausgeht. Zu einem so genannten Out of Memory (OOM) kommt es, wenn die Gesamtsumme des den virtuellen Maschinen zugewiesenen Arbeitsspeichers größer ist als die Gesamtmenge des physisch vorhandenen Arbeitsspeichers plus des Swap-Speichers. 

Anfänglich könnte es sogar funktionieren, mehr virtuelle Maschinen zu betreiben als RAM plus Swap-Speicher zulassen würden. Werden die virtuellen Maschinen allerdings aktiver, benötigen sie auch mehr Arbeitsspeicher, was dann ziemlich sicher in einer OOM-Situation resultieren würde.

Bei einem OOM werden zufällig Prozesse terminiert. Somit könnten virtuelle Maschinen spontan ausfallen. Allerdings ist es nicht besonders schwer, ein OOM zu vermeiden. Dazu müssen Sie einfach nur sicherstellen, dass dem System immer mehr Arbeitsspeicher plus Swap-Speicher zur Verfügung steht als die gesamte Menge des den virtuellen Maschinen zugewiesene virtuellen Arbeitsspeichers ausmacht.

Arbeitsspeicher mithilfe von Kernel Samepage Merging gemeinsam nutzen

Eine weitere Methode, die Speicher-Nutzung von KVM zu optimieren, ist Kernel Samepage Merging (KSM). Der KSM-Daemon hat den gemeinsam genutzten Kernel-Speicher im Blick und überwacht die Verwendung von Shared Memory innerhalb der virtuellen Maschine. 

Das ist zum Beispiel dann der Fall, wenn mehrere Server mit dem gleichen Betriebssystem laufen. In diesem Fall weist man dem Arbeitsspeicher nicht das gleiche Betriebssystem mehrmals zu. KSM stellt dabei sicher, dass es lediglich einmal geladen und dann von den virtuellen Maschinen gemeinsam genutzt wird.

Auch wenn KSM helfen kann, die Menge des von den virtuellen Maschinen benötigten Arbeitsspeichers drastisch zu reduzieren, kann in diesem Fall die Arbeitslast der CPUs steigen. Deswegen sollten Sie den Prozess überwachen, damit es an einer anderen Stelle des Servers zu keinen Performance-Problemen kommt.

Weil der Linux-Kernel effizient zwischen aktivem und inaktivem Speicher unterscheidet, lässt sich Swap-Speicher ausgezeichnet nutzen, um die Speicher-Anforderungen für mit KVM realisierte virtuelle Maschinen zu optimieren. Stellen Sie dabei wie bereits erwähnt sicher, dass die gesamte Menge des Arbeitsspeichers, der den virtuellen Maschinen zugewiesen ist, die Gesamtsumme des verfügbaren RAM plus Swap-Speicher auf dem Host-Server nicht übersteigt.

KSM kann Ihnen zudem dabei helfen, die Speicher-Anforderungen zu minimieren. Allerdings sollten Sie natürlich darauf achten, dass es nicht zu Performance-Problemen kommt. Auf diese Weise können Sie möglicherweise mehr virtuelle Maschinen betreiben, als die physische RAM-Rechnung erlauben würde.

Folgen Sie SearchDataCenter.de auch auf Facebook, Twitter und Google+!

Erfahren Sie mehr über Serverbetriebssysteme

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close