CPU Hotplug: Dynamic CPU Management (Artikel 383)
Verwaltung von CPU-Ressourcen zur Laufzeit. Erfahren Sie alles über CPU-Hotplugging, das dynamische Hinzufügen und Entfernen von Kernen in VMs und physischen Servern.
# CPU Hotplug Masterclass: Rechenkerne im laufenden Betrieb verwalten
TL;DR / Management Summary Ein moderner Enterprise-Server muss flexibel sein. CPU Hotplug erlaubt es uns, CPU-Kerne hinzuzufügen oder zu entfernen, ohne das System neu zu starten. In virtuellen Welten (Proxmox/Cloud) nutzen wir dies zum Skalieren unter Last. Auf High-End Hardware ermöglicht es den Austausch defekter Boards im laufenden Betrieb. In diesem Modul lernen wir, wie wir CPUs via Sysfs “online” schalten und wie wir diesen Prozess automatisieren.
# 1. Einführung & Architektur
Der On/Off-Schalter für Kerne.
Der Kernel erkennt CPUs als logische Einheiten. Über das virtuelle Dateisystem /sys/devices/system/cpu/ können wir jeden Kern einzeln ansteuern.
# Die Hotplug-Logik (Mermaid)
graph TD
A[Admin / Hypervisor] -->|1. Add CPU Event| B[udev: Kernel Event]
B --> C[Kernel: Initialize Logical CPU]
C --> D[Status: Offline]
A -->|2. echo 1 > online| D
D --> E[Status: Online]
E --> F[Scheduler: Assign Tasks]
subgraph "Removal"
E -->|3. echo 0 > online| G[Migrate Tasks]
G --> H[Stop Interrupts]
H --> D
end
# 2. Manuelle Steuerung via Sysfs
Die volle Kontrolle.
Alle CPUs werden im System durchnummeriert (cpu0, cpu1, …).
# Status prüfen
# Welche CPUs sind online? (z.B. 0-7)
cat /sys/devices/system/cpu/online
# Status einer spezifischen CPU (1 = Online, 0 = Offline)
cat /sys/devices/system/cpu/cpu4/online
# CPU online/offline schalten
# CPU 4 abschalten
echo 0 | sudo tee /sys/devices/system/cpu/cpu4/online
# CPU 4 wiederbeleben
echo 1 | sudo tee /sys/devices/system/cpu/cpu4/online
# 3. Automatisierung via udev
Plug and Play.
In VMs werden neue VCPUs oft als “Offline” hinzugefügt. Wir wollen, dass sie sofort einsatzbereit sind.
# udev-Regel für Auto-Online
Datei: /etc/udev/rules.d/99-cpu-hotplug.rules
ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}=="0", ATTR{online}="1"
Proxmox-Tipp: Wenn Sie in Proxmox die Option “VCPU Hotplug” nutzen, sorgt diese Regel im SLES/Arch Gast dafür, dass der neue Kern sofort im top auftaucht.
# 4. Day-2 Operations: Energiesparen durch Abschalten
Green IT im RZ.
In Phasen extrem niedriger Last (z.B. nachts auf einem Backup-Host) können Sie physische Kerne schlafen legen, um Strom zu sparen und die Wärmeentwicklung zu reduzieren.
- Wichtig: Lassen Sie immer mindestens
cpu0aktiv. Viele System-Interrupts sind fest an den ersten Kern gebunden.
# 5. Troubleshooting & “War Stories”
Wenn der Kern nicht weichen will.
# Story 1: “Der hängende Offline-Befehl”
Symptom: echo 0 > online blockiert für 30 Sekunden und meldet dann Device or resource busy.
Ursache: Auf dem Kern laufen Prozesse, die nicht verschoben werden können (z.B. Kernel-Threads mit fester Bindung oder Real-Time-Tasks).
Lösung: Deaktivieren Sie CPU-Pinning (Artikel 381) für diesen Kern, bevor Sie ihn offline nehmen.
# Story 2: “Das Leistungs-Rätsel nach Hot-Add”
Symptom: Ein Server wurde von 4 auf 16 CPUs skaliert. Die Last ist niedrig, aber die Applikation skaliert nicht mit.
Ursache: Die Applikation (z.B. ein alter Java-Server oder Nginx mit fester Worker-Zahl) hat die CPU-Anzahl nur beim Start gelesen.
Lösung: Viele Dienste müssen neu gestartet oder per Signal informiert werden, um den neuen Ressourcen-Pool zu nutzen. Nginx: systemctl reload nginx.
# 6. Fazit & Empfehlung
- Virtualisierung: Aktivieren Sie Hotplug in Ihren VM-Templates, aber kombinieren Sie es mit udev-Regeln für die Automatisierung.
- Hardware: Nutzen Sie Hot-Remove nur, wenn Sie sicher sind, dass keine unverschiebbaren Workloads aktiv sind.
- Monitoring: Überwachen Sie
/sys/devices/system/cpu/offline, um unabsichtliche Hardware-Ausfälle von geplanten Wartungen zu unterscheiden.
# Anhang: Cheatsheet
| Aufgabe | Pfad / Befehl |
|---|---|
| Online CPUs | cat /sys/devices/system/cpu/online |
| Offline CPUs | cat /sys/devices/system/cpu/offline |
| Mögliche CPUs | cat /sys/devices/system/cpu/possible |
| CPU 1 wecken | echo 1 > /sys/devices/system/cpu/cpu1/online |
| udev testen | udevadm trigger --action=add --subsystem-match=cpu |
| Kernel Logs | `dmesg |
| CPU Topologie | lscpu |
| Thread Status | cat /proc/interrupts |
| Hardware Info | hwinfo --cpu |