slu hat geschrieben: 
25.09.2023 11:06:03
Wenn ich jetzt mehr Swap zur Verfügung stelle, würde der dann nicht immer voller werden und der buff/cache bleibt gleich voll?
Wenn ich die verdorbenen Sachen aus meinem Kühlschrank weg werfe, und durch frische ersetze bleibt der gleich voll. Wird aber deutlich nützlicher. Die Frage ist, WAS du da drin hast.
RAM ist schneller als die Festplatte. Am liebsten würdest du deswegen alle Daten im RAM haben und nur für den Fall, dass man runter/hoch fährt Sachen auf die Festplatte schreiben. Router, die üblicherweise nur wenige Megabyte Daten haben, machen üblicherweise genau das. Für viele anderen Systeme wäre ausreichend viel RAM für so einen Betrieb aber ein bisschen teuer, weshalb man seine Daten üblicherweise auf die Festplatte schreibt. Aber wenigstens die häufigst genutzten Daten werden nochmal im RAM behalten. Deswegen werden Systeme schneller, wenn sie mehr RAM haben. Wenn dein Firefox nicht jedes mal von der Platte gelesen werden muss sondern im RAM bleibt, ist der flotter. Je mehr RAM desto mehr Cache desto häufiger sind Sachen schon im RAM.
Umgekehrt geht das nicht so einfach: Wenn du ein Word-Dokument aufmachst, dass du nie abgespeichert hast, kann dein Rechner das, völlig egal wie lange du daran nichts machst, nicht einfach aus dem RAM werfen und falls es dann doch gebraucht wird wieder von der Platte lesen. Das sind etwa die Daten, die "free" als "used" bezeichnet.
Wenn du jetzt aber mit dem Firefox surfst macht es durchaus Sinn, das Word Dokument auf die Platte zu schreiben, damit der Firefox schnell im RAM läuft ohne von der Platte gelesen werden zu müssen. Dafür ist dann der Swap da.
Wenn du deinem System mehr swap und ne hohe swappiness gibst, wird der used Anteil vermutlich runter gehen und die caches dafür hoch. "used" macht aber eh nur ~20% deines RAMs aus. Und große Teile davon, werden sicher auch häufig benutzt, sodass es gar nicht sinnvoll ist, die in den SWAP zu legen um mehr platz für seltener genutzte Caches zu haben. Du kannst deinen SWAP graduell erhöhen. Dann wirst du merken, dass der Kernel das GiB dass du ihm zuvor gegeben hast weitestgehend voll macht. Denn es gibt sicher eine menge Daten, die selten angefasst werden aber nicht nochmal auf der Festplatte vorhanden sind. Aber sicher keine 100GiB, da es ab einem gewissen Punkt nicht mehr sinnvoll ist.
So und jetzt Spezialfall Windows-VMs: Windows hat ja schon nen swap-file in Form der pagefile.sys (Ich glaube unter Windows 10 heißt es auch irgend was mit swap.sys) Kann das geschilderte also eh schon selbst machen, während das Linux drunter ja gar nicht versteht, was jetzt Firefox und Word ist sondern nur sieht wo am häufigsten zugegriffen wurde. Die Windows VM kann also eigentlich viel besser entscheiden, was in den RAM soll und was nicht. Der Grund ist der, dass die VM ja nur ihren eigenen verwalten darf. Wenn du dem Host Swap gibst, kann er den RAM eine wenig genutzte VM in den Swap verfrachten (die sich dann über einen verdammt langsamen RAM wundert) und dafür z.B. die pagefile.sys einer Stark beanspruchten VM in den RAM packen, (die sich dann über verdammt schnellen Swap freuen kann.) Sprich: RAM wird weniger fest nach Konfiguration sondern dynamisch nach bedarf verteilt. Oder anders: Stark beanspruchte VMs können andere ausbremsen, die gerade eh nichts zu tun haben und damit schneller werden. Ob dieses verhalten gewünscht oder unerwünscht ist, musst du selbst entscheiden.
Im Optimalfall lässt der eine der nen besonders anspruchsvollen Job hat, den irgend wann nachts laufen und bekommt den gesamten RAM während die restlichen VMs in den Swap verfrachtet werden. Im worst case programmiert er irgend einen Mist der ohne Ende auf der Palatte rum rödelt und bremst damit die ganze Abteilung aus.