Was stelle ich im Gast bezüglich Cache ein. Bei Windows kann ich z.B einstellen, es soll überhaupt nicht gecached werden, oder es soll nicht gewartet werden bis der Cache auf die Platte geschrieben ist. Wenn ich jetzt ssds habe und der Cache dort durch Kondensator gesichert ist, dann wäre es doch OK Wenn Windows den Plattenchache aktiviert hat, aber nicht auf das leeren des selbigen wartet. Oder sind bei verwendung von VMs in Proxmox die Einstellungen diesbezüglich im Gast wurscht?
Gibt eine klare Antwort: Kommt darauf an :-D
Dinge wie z.B. eine Datenbank schreiben normalerweise immer synchron auf die Platte und wollen genau wissen, dass der Schreibvorgang als erfolgreich quittiert wird. Das sollte normalerweise alle Write-Back-Caches umgehen, denn nur wenn es wirklich "von unten" als geschrieben markiert wird kann eine Datenbank konsistent wegschreiben. Der (Betriebssystem-)Cache wird somit durch das Betriebssystem umgangen. Was der Harddisk-Cache an der Stelle macht weiß oft keiner, da das ja eine Einheit ist, die man da käuft. SSDs machen hier mittlerweile sehr viel besser als die Festplatten, aber auch hier ist nicht alles Gold.
Wichtig ist, dass die Einstellungen im virtuellen Windows nicht mit den Einstellungen im physikalischen Client zu tun haben, denn der Sinn der Virtualisierung ist ja, dass man genau das abstrahiert und eben keinen direkten Zugriff hat. Somit ist der Festplattencache, den du im virtualisierten Windows siehst nur der eben der virtuelle Festplattencache, deiner virtualisierten Festplatte. Die Einstellungen in Qemu bzw. PVE sind dann diese Einstellung der Platte, wie man auch daran erkennt, dass man diese pro Disk manuell und individuell einstellen kann. Das hat aber natürlich dann auch wieder nichts mit den realen Caches der SSDs zu tun. Ist alles recht komplex. Für bestimmte Anwendungsfälle geht man meistens hin und trennt die Daten wie z.B. Platten für eine Datenbank getrennt von den Platten des Betriebssystems und dann kann man dort andere Caching-Verfahren wählen um alles weiter zu optimieren. Wenn man das jetzt ganz, ganz hart betrachtet kann jeglicher Datenverlust - auch ein einzelnes Bit - dazu führen, dass nachher nichts mehr geht.
Fraglich ist auch die Risikoabschätzung hierbei: Wenn der Server recht redundant ausgelegt ist, d.h. Festplatten und Netzteile (+USV), dann hat man sehr wenig Ausfallwahrscheinlichkeit des gesamten Systems, sodass es zu diesem Cache-Problem äußerst selten kommt. Hardwarefehler gibt es aber immer und Dinge wie Kosmische Strahlung und Bitflips im RAM und auf der Festplatte ist oft wahrscheinlicher (zumindest in meiner Beobachtung). RAM hat man mittels ECC eigentlich gut abgedeckt und Festplatten mit ZFS. Wenn der Rechner mal abschmiert ist man eh im Crash-Recovery-Prozess und er ist auch nicht immer anständig, denn oft sind Daten inkonsistent, weil die meisten Anwendung schlicht keinen Wert auf solche Dinge legen wie z.B. Datenbankarbeiten/OLTP in einzelne Transaktionen zu packen um logisch alles versuchen konsistenz zu halten. (Nicht, dass es nur so Dinge gibt, aber viele Software arbeitet nunmal so). Wenn man einfach so das Kabel zieht und viele gleichzeitigen Transaktionen auf einer Datenbank somit unterbrochen werden hat man halt keine Ahnung wie es aktuell aussieht. Solche Szenarien versucht man natürlich immer in Software "von innen" zu lösen, d.h. eine Datenbankclusterlösung ala Real-Application-Cluster von Oracle, bei dem die Transaktion im Ausfall zurückgerollt und auf den anderen Server erneut gestartet wird. Somit umgeht man diese Problematik komplett.
Um jetzt aber nochmal auf das Thema zurückzukommen: In den meisten Fällen sind die Standardeinstellungen von PVE ein gutes Maß. Erklärung inkl. Risikoabschätzung findest du hier:
https://pve.proxmox.com/wiki/Performance_Tweaks