Nabend, ich schmeiß mal folgendes Szenario in den Raum, dass ich grade versuche zu optimieren, und würde mich über Meinungen / Anregungen freuen.
Ausgangslage:
Zwei standalone Proxmox 9.2 Hosts, aktuelle Frequency Optimized EPYC CPU, jeweils über 1TB RAM, nicht mal zu einem Drittel ausgelastet.
Jeweils 2 NVMe SSDs, 3 SAS SSDs und 6 HDDs.
Host 1:
- 2x 1.92TB NVMe (1 DWPD) --> Boot-Pool, Rest für VMs
- 6x 16TB HDD --> Daten-Pool mit 3x Mirror
- 3x 3.2TB 24G SAS (3 DWPD) --> Partitioniert in jeweils 3 Partitionen
- Partition 1 --> Mirror aus 2x 1.2TB Special vDEV (nur Metadaten) für Daten-Pool
- Partition 2 --> Mirror aus 2x 70GB SLOG für Daten-Pool
- Partition 3 --> L2ARC für Daten-Pool (ca 3x 1.9TB)
- Bei SSD Nr. 3 sind Partition 1 und 2 jeweils nicht in Nutzung (Speicherplatz wird verschwendet)
- ARC wurde via Konfigurationsdatei auf 24-48GB GB eingestellt
Host 2:
- NVMe's und HDDs identisch zu Host 1 konfiguriert
- Kein Special vDEV
- 3.2TB großes SLOG aus SAS SSD 1 & 2
- 800GB L2ARC Partition auf SAS SSD 3, der restliche Speicherplatz wird verschwendet
Problem: VMs auf dem Daten-Pool von Host 1 haben teils extreme (schreib) Latenzen. Bei einer Windows VM mit etwa 4TB an MSSQL Datenbanken liegt die Länge der Datenträgerwarteschlange teils im vierstelligen Bereich. Interessanterweise spiegelt sich dies im IO Pressure Stall der VM nicht immer wieder.
Die Umgebung muss optimiert werden, für den Moment muss ich allerdings erstmal mit der Hardware klarkommen, die vorhanden ist. Optimierungen innerhalb der Datenbank übernimmt jemand anderes.
Folgende Ideen hätte ich nun. Diese sind erstmal nur für Host 1 vorgesehen. Host 2 soll später auch optimiert werden, dient im Moment aber erstmal dazu, die VMs von Host 1 temporär weiterzubetreiben, sollte eine komplette Neuinstallation / Neuerstellung des Pools erforderlich sein bzw. sich die Arbeiten nicht im laufenden Betreb umsetzen lassen (wovon ich aktuell leider ausgehe):
- Laut zpool iostat liegt die Belegung des Special vDev aktuell bei 230GB (nur Metadaten), L2ARC bei 3x 700GB bei weniger als 20% Cache Hit)
- ARC vergrößern, 200-300GB für den Anfang
- Auflösung der Partitionierung der SAS SSDs wegen IO / Workload-Konflikten --> Überall wird davon abgeraten
- 2x 3.2TB Special vDev Mirror, inkl. special_small_blocks <= 64K, da MSSQL 64K schreibt
- Die Recordsize des Pools sowie die volblocksize der VM liegen aktuell bei 16K --> Rewrite erforderlich.
- Die dritte SAS SSD als L2ARC nutzen? Oder ggf. mit einer weiteren SSD (evtl. aus Host 2) das Special vDev vergrößern? Habe die genaue Größe noch nicht ausrechnen können.
- Wird noch ein seperates SLOG Device benötigt? Ab OpenZFS 2.4 soll man ja das Special vDev dafür mitnutzen können.
- Wäre sync=disabled ansonsten eine Option, wenn man dieser Aussage zu single Nodes glauben kann? https://blog.stylite.de/blog/zfs-slog-best-practices/