[gelöst] KVM / QEMU: Memory Ballooning derzeit nur manuell?

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
heisenberg
Beiträge: 3559
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

[gelöst] KVM / QEMU: Memory Ballooning derzeit nur manuell?

Beitrag von heisenberg » 14.03.2016 17:02:55

EDIT: Neuen Post dazu im Proxmoxforum erstellt:
https://forum.proxmox.com/threads/quest ... ing.26523/

Hallo zusammen,

ich habe hier ein Setup von Proxmox auf Debian Jessie, das ich mit KVM-VMs nutzen werde und das Thema Memory Ballooning, also die dynamische Anforderung und Freigabe von Arbeitsspeicher, ist noch relativ neu fuer mich.

Hier ein paar Info zum Host und zur Test-VM:
Beschreibung der Umgebung

In der Doku von Proxmox steht, dass bei Angabe eines Speicherbereiches automatisch Memory-Ballooning verwendet wird. Die VM-Definition sieht auch so aus, als ob das wohl so konfiguriert ist.

Ein drop caches so wie in folgendem Befehl zu sehen...

Code: Alles auswählen

echo 3 > /proc/sys/vm/drop_caches
habe ich nach jedem Test in der VM und auf dem Host ausgefuehrt.

Ich habe damit mehrere Tests durchgefuehrt:
  • Mal ein paar GB an Daten nach /dev/shm kopiert. Der Speicherverbrauch auf dem Host stieg an aber ging nicht wieder zurueck, nachdem ich /dev/shm wieder geraeumt habe. Drop Caches hat auch nicht geholfen.
  • Ein kleines Python Programm laufen lassen, das Speicher belegt und nach Beendigung wieder frei gibt:

    Code: Alles auswählen

    #!/usr/bin/env python
    
    import sys
    import time
    
    if len(sys.argv) != 2:
        print "usage: fillmem <number-of-megabytes>"
        sys.exit()
    
    count = int(sys.argv[1])
    
    megabyte = (0,) * (1024 * 1024 / 8)
    
    data = megabyte * count
    
    while True:
        time.sleep(1)
    
    Auch hier wurde nur Speicher angefordert, aber nicht wieder freigegeben.
Den Speicher habe ich auf dem Host geprueft mit:

Code: Alles auswählen

 while :; do free -m;sleep 10;echo '';done | grep -E '(^$|Mem:|buffers/cache)'
Die VM ist erst wieder auf Minimalspeicherverbrauch, wenn ich Sie komplett abschalte und neu starte. Reboot reicht nicht.

Hier ist nochmal die Speicherverbrauchshistorie fuer den Pythontest:
NoPaste-Eintrag39206

Habe ich ein Verstaendnisproblem bzgl. Memory-Ballooning?
Habt Ihr noch gute Tips zum lesen? (Habe noch nicht erschoepfend die Suchmaschine meines Vertrauens bemueht).
Zuletzt geändert von heisenberg am 16.03.2016 17:35:23, insgesamt 5-mal geändert.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

hec_tech
Beiträge: 1093
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: KVM / QEMU: Mem. Ballooning: Speicher wird nicht freigeg

Beitrag von hec_tech » 14.03.2016 20:37:23

Habe leider kein Proxmox 4 zur Hand aber du müsstest in der VM ein Balooning Device sehen.

Ist das Modul virtio_balloon geladen?

Benutzeravatar
heisenberg
Beiträge: 3559
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: KVM / QEMU: Mem. Ballooning: Speicher wird nicht freigeg

Beitrag von heisenberg » 15.03.2016 00:16:40

Ah. Ok. Da muss also ein Ballon-Modul da sein. Sehr interessant.

Code: Alles auswählen

root@testvm1:~# lsmod | grep -i virtio_balloon
virtio_balloon         13047  0 
virtio_ring            17513  2 virtio_pci,virtio_balloon
virtio                 13058  2 virtio_pci,virtio_balloon
Da isser schon mal der Ballon.

Ein Ballon-Gerät gibt's wohl auch

Code: Alles auswählen

root@testvm1:/# lspci -knn | grep -i ball
00:03.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon [1af4:1002]
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
heisenberg
Beiträge: 3559
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: KVM / QEMU: Mem. Ballooning: Speicher wird nicht freigeg

Beitrag von heisenberg » 15.03.2016 01:18:18

So, erstmal noch ein kleiner Artikel, der Ballooning schön erklärt(Englisch): https://rwmj.wordpress.com/2010/07/17/virtio-balloon/

Im Übrigen scheint es so, als ob ich auf dem falschen Dampfer unterwegs war. Ballooning ist nix, was derzeit schon automatisch stattfindet, sondern etwas, was nur manuell angestossen werden kann.

Wenn ich also im Proxmox KVM Monitor "balloon 500" eingebe, dann versucht das Ballooning-Device MaxRAM - 500 MB Speicher zu belegen und der Ballooning Speicher steht dem wieder Host zur Verfügung. Den KVM Monitor erreicht man über die Konsole per:

Code: Alles auswählen

qm monitor VM_ID 
Wie man da Kommandos per Batch reinbekommen kann habe ich noch nicht gesehen. Per STDIN geht das wohl nicht.

Im übrigen gibt's da wohl durchaus ein Projekt, dass das Auto-Ballooning zum Ziel hat:
http://www.linux-kvm.org/page/Projects/auto-ballooning

----

Im Endeffekt sehe ich da diese Lösungen(Aufwand steigend):
  1. Ich lasse nachts einmal einen Ballooning-Lauf über all VMs laufen, so dass seltene, unverhältnismässige hohe Speicheranforderungen im Laufe eines Tages wieder zurueckgegeben werden.
  2. Ich lasse regelmaessig in kurzen Abstaenden ballooning durchführen, der sich am gerade in der VM befindlichen RAM-Verbrauch orientiert.
  3. Ich rechne einen Durchschnittsverbrauch an RAM der VM mit und setze das ballooning regelmässig etwas über dem Durchnittsverbrauch z. B. der letzten Stunde an.
EDIT:
Ich habe das auch nochmal im Proxmox-Forum gefragt:

https://forum.proxmox.com/threads/quest ... ing.26523/
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
heisenberg
Beiträge: 3559
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: KVM / QEMU: Memory Ballooning derzeit nur manuell?

Beitrag von heisenberg » 16.03.2016 17:35:08

P. S.: Die Lösung hat sich im verlinkten Fred gefunden.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Antworten