PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KVM lastet VM nicht langwierig aus



mysticado
23.11.11, 13:41
Hallo Leute,
ich habe folgendes Problem - für meine Diplomarbeit habe ich eine kleine Cloud erstellt mit einem Frontend-Rechner und zwei Clustern. VMs werden über die Open Source Software "OpenNebula" den Clustern zugewiesen. OpenNebula selbst macht das per Libvirt/QEMU. Soweit läuft das alles auch, doch nun zum Problem.
Ich laste meine VMs alle mit dem Programm "lookbusy" aus, vor allem die Memory.
Nun habe ich aber bemerkt, wenn ich eine 2GB Virtuelle Maschine komplett auslaste, dann zeigt es der physische Host auch an, doch nach ca. 2 Minuten fällt auf einmal die Auslastung an zu sinken, obwohl die VM immer noch die 2 GB als voll ausgelastet anzeigt.
Nun habe ich mir gedacht, vielleicht weiss einer von euch, wieso es zu diesen Inkonsistenzen kommt und die VMs volle Auslastung anzeigen, obwohl auf dem tatsächlichen Host am Ende nur noch z.B. 500MB ausgelastet sind?
Das treibt mich in den Wahnsinn. Ich hoffe jemand hat eine Idee...
Gruß!

derRichard
23.11.11, 13:57
hi!

bitte sei etwas präziser mit deinen angaben.
was genau verstehst du unter "auslastung"?
unter linux ist ram nicht einfach voll/leer, da gibt es viele abstufungen...

//richard

mysticado
23.11.11, 14:18
Also, meine Cluster sind Core2Duo Maschinen mit jeweils 3GB RAM.
Was ich mache ist schlicht - ich weise meinen 2 Clustern je eine VM zu. Jede dieser VMs erhält 2GB virtuellen Speicher.
Als Nächstes gehe ich per ssh in die VMs und starte den lookbusy Prozess welcher den kompletten virtuellen Speicher (sprich, 2GB) auslastet.

Mein physischer Host zeigt dann auch an, dass 70% (2 von 3GB) ausgelastet sind, jedoch fängt es nach ca. 2 Minuten an abzufallen und pendelt sich dann gegen 500MB ein, obwohl die VMs immer noch 2GB Vollauslastung anzeigen.
Any ideas? :)

derRichard
23.11.11, 14:22
hast du ksm laufen und/oder virtio_balloon?

//richard

mysticado
23.11.11, 15:23
Hi,
ich muss sagen, ich habe die Begriffe noch nie gehört, also würde ich auch sagen benutze ich das nicht :)
Die Prozesse laufen aber nicht automatisch im Hintergrund mit, oder?

Alles was ich im Bezug auf VMs benutze ist: KVM, libvirt, qemu

derRichard
23.11.11, 15:26
Hi,
ich muss sagen, ich habe die Begriffe noch nie gehört, also würde ich auch sagen benutze ich das nicht :)
Die Prozesse laufen aber nicht automatisch im Hintergrund mit, oder?

Alles was ich im Bezug auf VMs benutze ist: KVM, libvirt, qemu

wenn du eine diplomarbeit über kvm schreibst, dann solltest ksm aber schon kennen. :ugly:
ksm steht für kernel same page merging.

d.h. der host kernel scannt alle pages und sucht nacht duplikaten.
wenn deine beiden vms also viel speicher haben, der ident ist, vereinigt der host diesen.

dein "problem" klingt für mich sehr nach erfolgreichem anwenden von ksm...

//richard

mysticado
23.11.11, 15:29
ich wollte im thread jetzt nicht zu weit ausholen - meine diplomarbeit hat eigentlich auch mit netzwerken zu tun und nichts mit kvm...die virtualisierungsgeschichte ist sozusagen nur kollateraler schaden ;)
aber neues zu erfahren ist immer willlkommen ;) kann ich denn dieses ksm ausschalten irgendwie???

derRichard
23.11.11, 15:35
ich wollte im thread jetzt nicht zu weit ausholen - meine diplomarbeit hat eigentlich auch mit netzwerken zu tun und nichts mit kvm...die virtualisierungsgeschichte ist sozusagen nur kollateraler schaden ;)
aber neues zu erfahren ist immer willlkommen ;) kann ich denn dieses ksm ausschalten irgendwie???

/sys/kernel/mm/ksm/run auf 0 setzen.

je nach distro gibt es auch /etc/init.d/ksm.

//richard

mysticado
23.11.11, 17:55
Hey super!!! Das war es tatsächlich! Jetzt wird mein physischer Host auch wirklich die volle Zeit ausgelastet.
Nun habe ich aber ein anderes Problem - nach 10 Minuten habe ich lookbusy auf meiner VM gestoppt, sprich die VM hat wieder die volle Memory freigemacht. Wenn ich jedoch auf meinen Host schaue, steht da immer noch, dass 2GB "used" sind. Anscheinend wird der Teil der Memory nun der VM zugewiesen und wird hinterher auch nicht gesäubert. Kann das sein?
Und wie kann ich das nun wieder hinbekommen? Ich würde gerne diese VM auf einen anderen Host migrieren und gleichzeitig eine neue starten - das geht so aber nicht wirklich... :(

derRichard
23.11.11, 18:02
ich frage mal anders, was genau ist das problem bzw. was erwartest du?
das speichermanagement von linux ist kein drei-zeilen algorithmus...

//richard

mysticado
23.11.11, 18:05
Sagen wirs mal so ich habe erwartet, dass wenn ich meine auf dem Host laufende VM auslaste, die gleiche Last auch auf dem Host zu sehen ist. Wenn ich die VM dann entlaste, würde ich erwarten, dass man auch beim Host sieht "ok, es wird weniger speicher verbraucht".
Ist doch eigentlich logisch oder? Bei mir wird aber die VM entlastet, doch der Host bleibt auf 2GB Last (obwohl nix mehr gemacht wird?!)

derRichard
23.11.11, 18:11
Sagen wirs mal so ich habe erwartet, dass wenn ich meine auf dem Host laufende VM auslaste, die gleiche Last auch auf dem Host zu sehen ist. Wenn ich die VM dann entlaste, würde ich erwarten, dass man auch beim Host sieht "ok, es wird weniger speicher verbraucht".
Ist doch eigentlich logisch oder? Bei mir wird aber die VM entlastet, doch der Host bleibt auf 2GB Last (obwohl nix mehr gemacht wird?!)

nein, das ist nicht logisch.
und überhaupt wie "entlastest" du die vm?
vielleicht behält sich linux einfach etwas speicher.
und btw. verwendest du virto_balloon?

jedenfalls so einfach ist das alles nicht.
//richard

mysticado
23.11.11, 18:20
Also nochmal,
in der VM lasse ich das Programm "lookbusy", welches mit dem Befehl "-m 2000M" eben so viel virtuellen RAM auslastet. Natürlich kann lookbusy auch mit normalen Linux Systemen benutzt werden, doch in meinem Fall muss ich halt mal die VM auslasten :)
Das Entlasten der VM wird einfach durch einen kill des Prozesses hervorgerufen, wodurch die ausgelastete Memory natürlich sofort wieder zurückgeht.
Mir ist eben nur unklar, wenn die VM Memory doch wieder leer ist, wieso der Host sie immer noch als voll anzeigt. Anscheinend weist er diesen Block der VM zu und bleibt wohl auch zugewiesen, so lange die VM selbst besteht?
virtio_balloon nutze ich nicht - jedenfalls nicht das ich wüsste. Das Framework OpenNebula (welches ich in meiner Cloud nutze, um VMs zu erstellen, assignen, migrieren und löschen) bedient sich jedoch der "virsh" Befehle. Ist es das was du meinst?

derRichard
23.11.11, 18:51
du kannst nicht einfach aus dieser abstrakten sichweise auf das sehr komplexe verhalten vom speichermanagement schließen.

//richard

mysticado
23.11.11, 20:32
Ist ja in Ordnung, man muss ja auch nicht gleich mit solch einem "Unterton" schreiben.
Ich bin dir echt dankbar für die Hilfe soweit, aber ich habe oben nur meine Meinung geäußert, bzw. gesagt, was ich als Laie annehme, was passieren sollte...ich finde, ich gab dir keinen Grund gleich die Tonart zu wechseln.
Wie dem auch sei, ich geh mir woanders Hilfe holen - danke soweit!

derRichard
23.11.11, 20:41
öhm, wo habe ich die tonart gewechselt?

//richard