# Proxmox Disk I/O Optimization: Cache-Modi & Storage Tuning
TL;DR / Management Summary Die Speicher-Performance ist in 90% der Fälle der Flaschenhals in virtuellen Umgebungen. In Proxmox entscheiden wir pro VM-Disk über den Cache-Modus. Ein Senior Admin wählt standardmäßig No Cache für maximale Sicherheit, wechselt aber auf Write Back, wenn das Backend durch eine USV (UPS) geschützt ist und maximale Schreibgeschwindigkeit benötigt wird. Durch die Nutzung von io_uring und VirtIO-SCSI Single mit IO-Threads minimieren wir die Latenzen auf ein Minimum.
# 1. Die Cache-Modi erklärt
Sicherheit vs. Speed.
Unter VM -> Hardware -> Hard Disk -> Edit -> Cache:
- No Cache (Standard/Sicher): QEMU öffnet die Datei mit
O_DIRECT. Daten gehen am Host-Cache vorbei direkt auf die Disk.- Ideal für: Datenbanken, Cluster-Workloads.
- Write Back: Daten werden sofort im Host-RAM als “geschrieben” markiert.
- Vorteil: Enormer Speed-Boost bei Schreibvorgängen.
- Gefahr: Datenverlust bei Stromausfall des Hosts (RAM-Inhalt weg).
- Write Through: Liest aus dem Host-Cache, schreibt aber direkt durch.
- Direct Sync: Sicherste, aber langsamste Methode. Jede Operation wird physisch quittiert.
# 2. Der I/O Thread & VirtIO-SCSI Single
Parallelisierung auf Host-Ebene.
Standardmäßig nutzt Proxmox einen Controller für alle VM-Disks.
- Aktion: Stellen Sie den Controller auf
VirtIO SCSI Single. - Option: Aktivieren Sie
iothread=1für jede Disk. - Wirkung: Jede virtuelle Festplatte erhält einen eigenen Thread im Linux-Kernel des Hosts. Dies verhindert, dass ein massiver Schreibvorgang auf Disk A die Latenz von Disk B (auf der das OS liegt) in die Höhe treibt.
# 3. Deep Dive: AIO (Async I/O) Engine
Der Motor der Pakete.
Proxmox unterstützt verschiedene Engines, um I/O Befehle abzuarbeiten:
- Native: Klassisch, stabil.
- Threads: Nutzt User-Space Threads.
- io_uring (Empfohlen für Linux 5.10+): Die modernste Schnittstelle. Reduziert die Anzahl der Context-Switches massiv.
- Senior Tipp: Nutzen Sie
io_uringfür maximale Performance auf modernen SSD/NVMe Arrays.
# 4. Day-2 Operations: TRIM & Discard
Speicherplatz lebendig halten.
In virtuellen Umgebungen bleibt eine 100 GB Datei auf dem Host auch dann 100 GB groß, wenn der Gast alle Daten gelöscht hat.
- Lösung: Aktivieren Sie das Flag
Discardin den Disk-Optionen. - Voraussetzung: Controller muss
VirtIO SCSIsein. - Nutzen: Das Gast-OS schickt TRIM-Befehle, Proxmox gibt den Platz auf dem ZFS/LVM-Thin Pool sofort frei.
# 5. Troubleshooting & “War Stories”
Wenn die Disk ‘lahmt’.
# Top 3 Fehlerbilder
-
Symptom: Massive Latenz-Spikes alle 5 Sekunden.
- Ursache: ZFS “Transaction Group Commit” (Artikel 683). Der Host-Cache wird auf einmal auf langsame Disks geleert.
- Lösung: Nutzen Sie eine ZIL/SLOG SSD mit Power-Loss Protection.
-
Symptom: VM bootet nicht von SCSI.
- Ursache: Windows VirtIO Treiber nicht geladen.
- Fix: Temporär auf
SATAstellen, Treiber installieren, zurück aufSCSI.
-
Symptom: Hoher CPU-Load durch
kworker/uX:X.- Ursache: Der Host ist mit der Emulation des I/O-Stacks beschäftigt.
# “War Story”: Der “Double-Caching” Teufel
Ein Admin aktivierte Write Back in Proxmox und zusätzlich das Caching in seinem Hardware-RAID-Controller.
Das Ergebnis: Die Schreibperformance war “unfassbar” (5000 MB/s).
Die Katastrophe: Ein Netzkabel am Host wurde versehentlich gezogen. Da die Daten in drei verschiedenen RAM-Caches (App, Hypervisor, RAID-Controller) lagen, bevor sie die Disk berührten, war das Dateisystem der VM so korrupt, dass nur ein Full-Restore half.
Lehre: Nutzen Sie Caching nur dort, wo Sie es kontrollieren können (z.B. ZFS ARC oder RAID-Controller mit BBU/Flash). Doppeltes Caching ist ein Daten-Roulette.
# 6. Monitoring & Reporting
Durchsatz messen.
# Performance Benchmark (Host)
Nutzen Sie fio, um die echten Fähigkeiten Ihres Storages zu testen:
fio --name=test --ioengine=libaio --direct=1 --rw=randwrite --bs=4k --numjobs=8 --iodepth=32 --size=1G --runtime=60
- KPI: IOPS (Ziel: > 50.000 für SSD-Arrays).
# 7. Fazit & Empfehlung
I/O Optimierung ist das Herzstück des VM-Tuning.
- Empfehlung: Nutzen Sie VirtIO SCSI Single mit iothreads und io_uring.
- Wichtig: Verwenden Sie den Cache-Modus No Cache für Datenbanken und Write Back für Webserver (nachdem die USV-Sicherheit geklärt ist).
# Anhang: Cheatsheet (Disk Options)
| Option | Wert | Zweck |
|---|---|---|
| Discard | on |
TRIM Support |
| SSD Emulation | on |
Hilft dem Gast-OS beim Optimieren |
| Backup | off |
Schließt unwichtige Disks vom Backup aus |
| IO Thread | on |
Parallelisierung |