KVM RAM Verbrauch optimieren?

Dunuin

Distinguished Member
Jun 30, 2020
14,793
4,627
258
Germany
Moin,

Mir ist mal wieder aufgefallen wieviel RAM KVM verschlingt obwohl der Gast selbst nicht so viel RAM benutzt. Das hatte ich sonst vorallem bei FreeBSD Gästen beobachet, aber jetzt fällt es mir auch bei meiner Debian 10 VM auf.

free -h im Gast:
Code:
              total        used        free      shared  buff/cache   available
Mem:           15Gi       2.9Gi        10Gi        12Mi       2.4Gi        12Gi
Swap:         2.0Gi          0B       2.0Gi
Also 5,3GiB benutzt und 10GiB unbenutzt die eigentlich von KVM freigegeben werden könnten.

htop auf dem Host:
kvm1.png
Geht hier um meinen Minecraft Server. Der hat 16GiB RAM zugeteilt bekommen und nutzt davon 11,5G, also über das doppelte was der Gast in dessen Prozess tatsächlich benutzt.

Qemu-guest-agent ist installiert und für die VM aktiviert. Ballooning ist aktiviert. KSM ist auf dem Host ab 60% aktiv, also auch in dem Fall, weil der RAM vom Host um die 80% ausgelastet ist.

Zugeteilten RAM selbst kann ich leider nicht verringern, weil je nach Last zwischen 5GB und 15GB von Prozessen verwenden werden. Oft läuft der Gast aber halt über Wochen mit nur sehr wenig RAM Auslastung, da ist es dann schade wenn Balloning anderen VMs den RAM abzieht obwohl die Miencraft VM da permanent 10GB RAM verschwendet. Ich kann für die Minecraft VM aber auch kein "Min RAM" für Ballooning setzen, da dies zu OOM führen würde, wenn da doch selten mal was los ist und wirklich die vollen 16GB gebraucht werden. Das RAM Overprovisioning immer etwas kritisch ist, ist mir schon klar, aber alle meine Server haben bereits den RAM voll ausgebaut und weitere Homeserver sind leider nicht im Budget.

Kann man da irgendwas optimieren, dass da KVM unbenötigten RAM irgendwie freigibt?

Hier die VM Einstellungen:
cat /etc/pve/qemu-server/111.conf
Code:
agent: 1
balloon: 16000
boot: cdn
bootdisk: scsi0
cores: 8
cpu: host,flags=+aes
ide2: none,media=cdrom
memory: 16384
name: Minecraft
net0: virtio=1A:6D:3D:9E:21:D6,bridge=vmbr42,firewall=1
numa: 0
ostype: l26
scsi0: VMpool_VLT_VM:vm-111-disk-0,cache=none,discard=on,iothread=1,size=96G,ssd=1
scsi1: VMpool_VLT_VM:vm-111-disk-1,cache=none,size=2G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=fb35b063-fa70-4019-869e-e2ea7117d3e0
sockets: 1
vmgenid: 7bf7e311-6570-4ec4-a4ed-f5030ac3123e
vmstatestorage: VMpool7_VMSS

pveversion -v:
Code:
proxmox-ve: 6.4-1 (running kernel: 5.4.128-1-pve)
pve-manager: 6.4-13 (running version: 6.4-13/9f411e79)
pve-kernel-5.4: 6.4-5
pve-kernel-helper: 6.4-5
pve-kernel-5.4.128-1-pve: 5.4.128-2
pve-kernel-5.4.124-1-pve: 5.4.124-2
pve-kernel-5.4.119-1-pve: 5.4.119-1
ceph-fuse: 12.2.11+dfsg1-2.1+b1
corosync: 3.1.2-pve1
criu: 3.11-3
glusterfs-client: 5.5-3
ifupdown: residual config
ifupdown2: 3.0.0-1+pve4~bpo10
ksmtuned: 4.20150325+b1
libjs-extjs: 6.0.1-10
libknet1: 1.20-pve1
libproxmox-acme-perl: 1.1.0
libproxmox-backup-qemu0: 1.1.0-1
libpve-access-control: 6.4-3
libpve-apiclient-perl: 3.1-3
libpve-common-perl: 6.4-3
libpve-guest-common-perl: 3.1-5
libpve-http-server-perl: 3.2-3
libpve-storage-perl: 6.4-1
libqb0: 1.0.5-1
libspice-server1: 0.14.2-4~pve6+1
lvm2: 2.03.02-pve4
lxc-pve: 4.0.6-2
lxcfs: 4.0.6-pve1
novnc-pve: 1.1.0-1
proxmox-backup-client: 1.1.13-2
proxmox-mini-journalreader: 1.1-1
proxmox-widget-toolkit: 2.6-1
pve-cluster: 6.4-1
pve-container: 3.3-6
pve-docs: 6.4-2
pve-edk2-firmware: 2.20200531-1
pve-firewall: 4.1-4
pve-firmware: 3.2-4
pve-ha-manager: 3.1-1
pve-i18n: 2.3-1
pve-qemu-kvm: 5.2.0-6
pve-xtermjs: 4.7.0-3
qemu-server: 6.4-2
smartmontools: 7.2-pve2
spiceterm: 3.1-1
vncterm: 1.6-2
zfsutils-linux: 2.0.5-pve1~bpo10+1
 
Last edited:
Ich habe das nochmal weiter beobachtet. Also der KVM Prozess fängt klein an und braucht nur etwas mehr RAM als was der Gast auch nutzt. Also nutzt der Gast z.B. 3 von 16 GB RAM dann ist der KVM Prozess z.B. auch nur bei 5 GB. Starte ich dann aber ein paar Sachen im Gast und der RAM-Verbrauch vom Gast geht hoch auf 10GB, dann steigt auch der KVM Prozess auf 12 GB. Soweit also alles verständlich. Wenn ich dann im Gast wieder Prozesse beende fällt der RAM im Gast von 10 auf 3 GB. Aber selbst wenn im Gast dann für 24 Stunden der RAM nur zwischen 3-5 GB pendelt (also wirklich 10GB free und nicht available) bleibt der KVM Prozess auf dem Host bei 12 GB. Sieht also so aus, als wenn der KVM Prozess immer nur wachsen aber nie schrumpfen kann.

Ist das so richtig? Wäre dann ja ziemliche Ressourcenverschwendung und kann ich mir eigentlich nicht vorstellen. Wenn nein, woran kann es dann liegen?
Gepinnt kann der RAM nicht sein, ich habe zwar IOMMU aktiv aber für diese VM wurde nichts durchgereicht. Ich glaube Pages die von KSM dedupliziert wurden können auch nicht mehr freigegeben werden, solange da noch irgend ein Prozess aktiv ist dem die deduplizierten Pages gehören. Aber nach 24 Stunden sollte KSM das ja eigentlich auch längst einmal den ganzen RAM durchgescannt und wieder freigeräumt haben.
 
Last edited:
Hatte testweise auch mal ksmtuned deaktiviert, reboot durchgeführt und den RAM der KVM Prozesse für ein paar Tage beobachtet. Sieht nicht so aus als wenn KVM jemand RAM wieder freigeben würde. Die Prozesse starten halt klein und im Laufe der Zeit werden sie immer größer, da ja das Gast OS dann auch den RAM zum Cachen nimmt. Sollte dann aber im Gast mal wieder RAM frei werden, dann belegt halt der KVM-Prozess trotzdem weiterhin den vollen RAM ohne zu schrumpen. Also macht der Gast z.B. 1 von 16GB -> 12 von 16 GB -> 3 von 16 GB dann geht KVM von 2 auf 14GB und bleibt dann bei dem höchsten Wert, selbst wenn der Gast seit Tagen nur 3GB benutzt.

Geht das generell nicht anders bei KVM oder läuft da bei mir einfach was falsch?
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!