[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: KVM - RAM Cache begrenzen & KSM



On 06/14/2011 02:02 PM, Bernhard Geier wrote:
> Sowas kannst du in die /etc/rc.local eintragen.
Hallo, danke euch beiden. Ich habe das ganze nun in die /etc/rc.local
eingetragen.

> Das verstehe ich gerade nicht. Wenn du eine VM mit z.B. 2 GByte RAM
> anlegst, dann wird von KVM ein Prozess erzeugt der 2 GByte Speicher vom
> Kernel anfordert - denn die 2 GByte werden ja dann von VM-Betriebssystem
> verwaltet.
> Wenn deine Maschine nur 1 GByte RAM hat und du die 2 GByte RAM deiner VM
> nutzt wird deine Hostmaschine swappen. Nutzt du in der VM nur ein paar
> MByte der zugeteilten 2 GByte dann wird praktisch nicht geswappt.

Korrekt. Das problem ist aber dein letzter Satz. Da Linux cached wie
wild endet es nach einer gewissen Laufzeit der VM darin das immer die
vollen 2 Gigabyte Speicher genutzt wird.

Folgendes Beispiel. Auf der VM führe ich folgendem Befehl aus.

> root@meraym:~# free -m
>              total       used       free     shared    buffers     cached
> Mem:          3966        999       2967          0          0        848
> -/+ buffers/cache:        149       3816
> Swap:            0          0          0

In diesem beispiel nutzen die Prozesse der VM eigentlich nur 150
Megabyte. Während 848 Megabyte bereits als Cache genutzt werden. Das
ganze auf einer Maschine die gerade mal eine Stunde lief und fast nichts
getan hat. Wenn die Maschiene nun länger läuft kann man davon ausgehen
das der vollständige Speicher in der VM, hier 4 Gigabyte irgendwann
genutzt sind. Wobei wahrscheinlich 3 Gigabyte nachher als Cache genutzt
wird von Linux selber.

Für die Hostmaschiene bedeutet das aber das diese 4 Gigabyte auch
alloziert werden müssen. Sei es nun im RAM oder im SWAP. Den für die
Hostmaschiene ist es einfach nur ein prozess der 4 Gigabyte speicher
benötigt.

Wenn man allerdings den Cache begrenzen kann, so würde ich
beispielsweise den Cache auf 300 Megabyte begrenzen, daher die VM nutzt
ihre 150 Megabyte und maximal 300 Megabyte an Cache und keine 848
Megabyte. Dadurch müsste die Hostmaschiene maximal 150 + 300 = 450
Megabyte Speicher allozieren.

Standardmäßig halte ich es ja für sinvoll das gecached wird solange man
freien RAM hat, aber in diesem Fall bedeutet es das hier RAM von der
Hostmaschiene verloren geht.

Der ganze Sinn dahinter ist halt das man VMs immer mehr Speicher
zuteilen kann, als sie zwar in der Regel benötigen, wenn sie aber mal
Zeitweise mehr benötigen ohne Probleme weiter laufen. Insgesamt der
Speicher aber nach Möglichkeit auch im RAM liegt, und nicht im SWAP auf
der Hostmaschiene. Das setzt natürlich vorraus das man nicht zu sehr
overcommittet und zuviele VMs laufen lässt, aber sowas zu beachten
gehört ja zur Administration dazu.

Wenn aber jeder gast schon seine 2 Gigabyte Cache hat, wird die
Hostmaschiene wohl ohne ende swapen, und meine befürchtung ist das
"unnötiger cache" irgendeiner VM im RAM liegt, während von einer anderen
VM der Speicher im Swap liegt.

Es ist zwar wie gesagt schön das Linux Standardmäßig so aggressiv cached
und den RAM weiterhin sinvoll nutzen mag, aber bei einer Virtuellen
Maschine als Gast verbraucht man so eben den RAM für den ganzen cache
der gäste.

Insofern weiß ich an der Stelle nicht ob mir vm.swappiness überhaupt
etwas bringt. Soweit ich sehe regelt es nur wie stark Linux den Swap
speicher ausnutzt. Für die VM ist das egal da ich dort gar kein swap
nutze, da ja der Hauptspeicher theoretisch schon geswapt sein kann.

Und für die Hostmaschiene weiß ich nicht ob dies auch etwas bringt, denn
wenn der Speicher angefordert wird, muss ja linux so oder so den
Speicher zur verfügung stellen und dann swap nutzen. Es geht halt nur
eher darum sicherzustellen das eher in notfällen geswappt wird, und
nicht grundlegend immer geswaped wird.


Reply to: