NUMA Advanced: Memory Tiering & IRQ Affinity (Artikel 389)
Fortgeschrittene NUMA-Optimierung für Enterprise-Server. Erfahren Sie alles über IRQ-Affinität, Memory Tiering und die Minimierung von Inter-Socket-Latenzen in komplexen Systemen.
# NUMA Advanced: Das Maximum aus Multi-CPU-Systemen herausholen
TL;DR / Management Summary Wer die Grundlagen von NUMA (Artikel 382) kennt, weiß um die Gefahr von Remote-Memory-Zugriffen. Ein Senior Admin geht jedoch einen Schritt weiter: Er optimiert nicht nur den RAM, sondern auch die IRQ-Affinität (Interrupts). Ein Netzwerkpaket, das auf CPU 0 ankommt, aber von einer Applikation auf CPU 1 verarbeitet wird, muss den langsamen Inter-Socket-Bus passieren. In diesem Modul lernen wir, wie wir Hardware-Interrupts und Speicher-Tiers so ausrichten, dass Daten den kürzesten Weg nehmen.
# 1. Einführung & Architektur
Die Latenz der Hardware-Schnittstellen.
In einem Dual-Socket-Server hängen die PCI-Steckplätze (Netzwerkkarten, NVMe) physikalisch an einer der beiden CPUs.
# Die Daten-Engpässe (Mermaid)
graph TD
subgraph "NUMA Node 0"
A[CPU 0] --- B[Local RAM]
A --- C[NIC: eth0]
end
subgraph "NUMA Node 1"
D[CPU 1] --- E[Local RAM]
D --- F[NVMe: Disk 1]
end
G[App on CPU 1] -->|Read Request| C
C -->|Interrupt| A
A -->|Notify| D
D -->|Data via Bus| A
A -->|Transfer| C
style G fill:#f96,stroke:#333
# 2. IRQ Affinity: Hardware an die CPU binden
Keine unnötigen Sprünge.
Interrupts (Anfragen der Hardware) sollten immer von der CPU verarbeitet werden, an der das Gerät physisch hängt.
# Den zuständigen Node finden
cat /sys/class/net/eth0/device/numa_node
# Wenn hier '0' steht, hängt die Karte an CPU 0.
# Interrupts pinnen
# Finde die IRQ-Nummer für die Karte
grep eth0 /proc/interrupts
# Schiebe IRQ 45 auf Kern 0
echo 1 | sudo tee /proc/irq/45/smp_affinity
# 3. Memory Tiering (Hot vs. Cold)
Speicher nach Geschwindigkeit sortieren.
Moderne Systeme können verschiedene Speichertypen mischen (DDR4, DDR5, PMEM).
- Tier 0: Lokaler RAM (Fastest).
- Tier 1: Remote RAM (Slower).
- Tier 2: Persistent Memory / CXL (Slowest).
# Den Balancer feintunen
Wenn Sie wissen, dass Ihre Applikation sehr viele Daten liest, aber nur wenig schreibt, können Sie den numa_balancing Mechanismus beruhigen, um CPU-Zyklen für das Verschieben der Seiten zu sparen (siehe Artikel 382).
# 4. Day-2 Operations: Latenz-Benchmarking
Beweise für das Tuning.
Nutzen Sie intel-cmt-cat oder pcm (Processor Counter Monitor), um die Auslastung der Inter-Socket-Verbindungen (UPI/QPI) zu messen.
- Ein hoher Wert bei “Remote Memory Bandwidth” deutet auf ein schlechtes NUMA-Design hin.
# 5. Troubleshooting & “War Stories”
Wenn der Bus glüht.
# Story 1: “Der 10Gbit-Flaschenhals”
Symptom: Eine 10Gbit Karte liefert in einer VM nur 4Gbit/s, obwohl die CPU des Hosts gelangweilt ist.
Ursache: Die VM läuft auf Node 1, die Netzwerkkarte hängt an Node 0. Der Overhead durch den Kopiervorgang über den Inter-Socket-Bus limitiert den Durchsatz.
Lösung: Pinnen Sie die VM auf den gleichen NUMA-Node wie die Netzwerkkarte. In Proxmox: hostpci0: 00:1f.3,pcie=1,x-vga=on.
# Story 2: “Das BIOS-Lügen-Problem”
Symptom: numactl -H meldet eine Distanz von 10 zwischen allen Nodes, obwohl es ein Multi-Sockel System ist.
Ursache: “Node Interleaving” ist im BIOS aktiviert. Das BIOS täuscht dem OS ein einheitliches (UMA) System vor. Dies ist für Enterprise-Server fast immer kontraproduktiv.
Lösung: Deaktivieren Sie “Node Interleaving” im BIOS. Das OS muss die echte Topologie sehen, um effizient zu planen.
# 6. Fazit & Empfehlung
- Design: Platzieren Sie Netzwerkkarten und Storage-Controller symmetrisch, wenn möglich.
- Wartung: Nutzen Sie das Tool
irqbalancenur in einfachen Umgebungen. Für High-Performance pinnen Sie IRQs manuell. - Monitoring: Überwachen Sie
numastat -p <pid>für Ihre wichtigsten Applikationen.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| NUMA Node eines Device | cat /sys/bus/pci/devices/.../numa_node |
| IRQ Verteilung prüfen | cat /proc/interrupts |
| Inter-Socket Traffic | pcm-numa (aus pcm-tools) |
| Local vs Remote RAM | numastat |
| Memory Allokation fixieren | numactl --preferred=<node> |
| CPU-Cache Topology | lscpu -e |
| Latency Test | numactl --interleave=all perl test.pl |