Der Speicher in einem Proxmox VE ist zu langsam, die Kollegen beschweren sich schon, es ist alles zu langsam. Was kann man da machen?
Ursachenforschung
Als erstes sollte man die eigentliche Ursache ermitteln. Ist es denn wirklich der Speicher auf den Platten oder SSDs? Oder liegt ein anderes Problem vor und gar ein Fehler? Da ist es am einfachsten, wenn man Zugriff auf ältere Performance-Daten hat. Jetzt kann man mit den aktuellen Daten vergleichen und stellt zum Beispiel fest, das der Durchsatz und die Latenzzeit deutlich gestiegen sind. Da könnte die Ursache liegen.
Haben wir den Speicher als Quelle ermittelt und wir nutzen ein ZFS, dann lassen sich einige Performance-Einstellungen verändern bzw. mit geringem Aufwand die Hardware verbessern.
ZFS Read Cache
Fangen wir mit etwas Theorie zu ZFS an. ZFS hat einige Features für eine mögliche Performance-Steigerung schon eingebaut. Das ist als aller erstes der Read-Cache, der sogenannte ARC (Adaptive Replacement Cache). Der wird automatisch für ZFS in Proxmox aktiviert und nutzt den RAM des Servers.
Da haben wir auch schon den ersten Ansatz für eine Verbesserung. Ist nicht genügend RAM für VM, Container und ZFS vorhanden, dann könnte dies Auswirkungen auf die Performance nehmen. Das sollte wir vor der RAM Aufrüstung erst einmal ermitteln. Dafür können wir die Befehlt arc_summary nutzen. Der gibt eine umfangreiche Auswertung über den Read Cache aus.
Können wir aber den RAM nicht erweitern, die Auswertung gibt aber einen großen Füllgrad aus, so können wir den ARC (im RAM) noch durch einen L2ARC (auf SSD/NVMe) erweitern. Das sollte aber nur dann genutzt werden, wenn die RAM Aufrüstung nicht möglich ist. Die SSD bzw. NVMe ist deutlich langsamer als der RAM, also sollte der RAM die erste Wahl sein.
ZFS Write Cache
Als weiteren Cache gibt es den Write Cache. Auch ZFS hat so etwas, wird dort allerdings Log bzw. ZIL (ZFS Intent Log) genannt. Der Begriff Log ist passender, da die eigentliche Aufgabe die Zwischenspeicherung der Transaktionslogs des ZFS ist.
Dies Log liegt auf den Platten des ZFS Pool und wenn diese Platten nun drehende Platten sind, dann ist das Log relativ langsam. Verlagert man das Log auf SSD oder NVMe, so wird es schneller. Damit steigert man jede Schreib-Operation deutlich. Es ist also so etwas wie ein Write-Cache.
Welche Vorgaben gibt es für den Write-Cache im ZFS?
Ein Ausfall des Logs führt zu Datenverlust, da die aktuellen Schreib-Daten nur im Log vorhanden sind. Das Log wird im Default alle 5 Sekunden auf die Platten geschrieben, es gehen also bis zu 5 Sekunden Daten verloren. Das kann bei einem Shop-System oder allgemein Datenbanken zum totalen Ausfall führen. Also muss der Write Cache auf einem Mirror angelegt werden. Damit kann eine SSD oder NVMe ausfallen.
OK, sicher muss der Write Cache sein, aber wie sieht es mit der Größe aus. Alle 5 Sekunden wird der Cache geleert, also der maximale Write Durchsatz des Systems mal 5 Sekunden. Schafft das System 1000 MB/s wären das dann 5000 MB oder 5 GB. Also nicht besonders groß. Wenn man jetzt hofft, durch die Steigerung deutlich schneller zu werden, dann muss der Write Cache natürlich entsprechend angepasst werden. Also in diesem Beispiel auf 10 GB für den doppelten Durchsatz. Aber immer noch recht klein.
Klein, aber eine extrem hohe Schreibbelastung. Also sollte man wirklich gute SSDs oder NVMe nehmen. Eine Desktop SSD kann innerhalb weniger Wochen die maximale Schreibleistung erhalten und dann ausfallen.