PVE Energieeinstellungen oder wie ich in den Wahnsinn getrieben werde
Wenn man bei einem Premium-Server das Energieprofil auf „Static High Performance“ stellt und sämtliche C-States im BIOS abschaltet, sollte man eigentlich davon ausgehen können, dass der Hypervisor diese Einstellung respektiert.
Der Tanker läuft mit voller Kraft voraus. Keine unnötigen Pausen, keine Tiefschlafphase und möglichst geringe Verzögerungen.
Oder?
Nö. Das interessiert meinen Lieblings-Hypervisor Proxmox auf Debian-Basis offenbar einen feuchten ***.
Warum wird C6 trotzdem genutzt?

Obwohl im BIOS alles korrekt eingestellt war, zeigte PowerTOP weiterhin, dass die Prozessoren fleißig den tiefen C6-Zustand nutzten.

Also begann die übliche Fehlersuche:
- BIOS-Einstellungen prüfen
- Einstellungen zurücksetzen und neu setzen
- BIOS aktualisieren
- Server neu starten
- Erneut messen
- Langsam an sich selbst zweifeln
Nach mehreren Durchläufen und einigen energischen Rückfragen lieferte die Google-KI schließlich einen entscheidenden Hinweis: Der Linux-Kernel verwendet auf Intel-Systemen den Treiber intel_idle. Dieser verwaltet die verfügbaren Ruhemodi der CPU und kann dabei tiefere C-States anbieten, obwohl diese im BIOS vermeintlich eingeschränkt wurden.
Ganz aus der Luft gegriffen war diese Aussage nicht. IBM beschreibt genau dieses Verhalten für bestimmte Serversysteme. Auch die Dokumentation des Linux-Kernels bestätigt, dass intel_idle und acpi_idle unterschiedliche Wege zur Verwaltung der C-States nutzen.
Wichtig ist jedoch: Das ist kein reines HPE- oder Proxmox-Problem. Es betrifft das Zusammenspiel aus Firmware, Prozessor und Linux-Kernel. Außerdem sind „High Performance“ und das Abschalten tiefer C-States nicht automatisch dasselbe. Das eine betrifft vor allem die Leistung und Taktsteuerung, das andere die Ruhephasen der CPU.
Die Lösung
EFI: In meinem Fall half der folgende Kernel-Parameter:
intel_idle.max_cstate=1
Damit darf intel_idle weiterhin genutzt werden, wird aber auf einen flachen C-State begrenzt.
Bei einem Proxmox-System sollte zuerst geprüft werden, welcher Bootloader tatsächlich verwendet wird:
proxmox-boot-tool status

Wenn das Ergebniss wie bei mir EFI ist müssen wir folgendes machen:
nano /etc/kernel/cmdline
und folgendes in der Zeile hinzufügen:
intel_idle.max_cstate=1

Danach wird die Boot-Konfiguration aktualisiert:
proxmox-boot-tool refresh
BIOS: Bei einer klassischen GRUB-Konfiguration wird der Parameter dagegen in /etc/default/grub innerhalb von GRUB_CMDLINE_LINUX_DEFAULT eingetragen:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_idle.max_cstate=1"
Anschließend:
update-grub
reboot
Nach dem Neustart kann geprüft werden, welcher Treiber aktiv ist:
cat /sys/devices/system/cpu/cpuidle/current_driver
Zusätzlich sollte kontrolliert werden, ob der Parameter wirklich übernommen wurde:
cat /proc/cmdline
Und siehe da: C6 war verschwunden und der Server verhielt sich endlich so, wie es die BIOS-Einstellung bereits versprochen hatte.

Kaum macht man es richtig, funktioniert es.
Kleiner Hinweis
Das Einschränken tiefer C-States kann den Stromverbrauch und die Wärmeentwicklung erhöhen. Es sollte daher nicht vorsorglich auf jedem Server umgesetzt werden. Sinnvoll ist es vor allem dann, wenn messbare Verzögerungen auftreten und ein Vorher-Nachher-Test zeigt, dass die Änderung wirklich hilft. Das Performance Workload Profil ändert nichts an den C-States Einstellungen.
Quellen:
- Linux Kernel: CPU Idle Time Management
- Linux Kernel: Parameter
intel_idle.max_cstate - IBM: Linux ignores C-State settings in UEFI
- Proxmox: Host Bootloader
- Prozessor P-States und C-States
- https://www.spec.org/cpu2017/flags/HPE-Platform-Flags-Intel-V1.1-HSW-revB.html
Doch es bleibt noch >> „Die Frage nach den P-States“ >>