linux-kernel-advanced performance tuning numa irq memory server-hardware advanced

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 irqbalance nur 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