linux-kernel-advanced performance virtualization cpu hotplug kernel advanced

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 cpu0 aktiv. 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