linux-kernel-advanced performance tuning cpu kernel scheduler nice rt

Process Management: Scheduler Tuning (Artikel 370)

Optimierung der Prozessverwaltung im Linux-Kernel. Erfahren Sie alles über den CFS-Scheduler, CPU-Affinität, Prozess-Prioritäten und die Echtzeit-Fähigkeiten des Kernels.

# Process Scheduling: Die CPU-Ressourcen perfekt verteilen

TL;DR / Management Summary Wer darf wann rechnen? Diese Entscheidung trifft der Kernel Scheduler. In modernen Linux-Systemen sorgt der CFS (Completely Fair Scheduler) für eine gerechte Verteilung der CPU-Zeit. Ein Senior Admin greift ein, wenn Standard-Fairness nicht ausreicht: Er priorisiert kritische Dienste mittels nice, pinnt Prozesse an spezifische CPU-Kerne (Affinität) oder wechselt für extrem zeitkritische Aufgaben in den Echtzeit-Modus (Real-Time). Ziel ist es, Latenzen für Endbenutzer zu minimieren und Durchsatz für Hintergrund-Jobs zu maximieren.


# 1. Einführung & Architektur

Die Logik der Zeitscheiben.

Der Scheduler unterteilt die Zeit in winzige Fragmente. Er versucht, jedem Prozess die versprochene Rechenzeit zu geben, ohne dass das System “ruckelt”.

# Die Scheduling-Klassen (Mermaid)

graph TD
    A[Linux Scheduler] --> B[Normal: CFS]
    A --> C[Real-Time: FIFO / RR]
    A --> D[Idle: Batch Processing]
    B --> B1[Priority: Nice Values -20 to 19]
    C --> C1[Priority: 1 to 99]
    subgraph "Core Concepts"
        E[Context Switch]
        F[Preemption]
        G[Time Slice]
    end

# 2. Priorisierung mit Nice-Werten

Wer ist wichtiger?

Jeder Prozess hat einen Nice-Wert. Je “netter” ein Prozess ist (hoher Wert), desto mehr CPU-Zeit tritt er an andere ab.

  • Range: -20 (Höchste Prio) bis 19 (Niedrigste Prio). Standard ist 0.

# Befehle

# Einen neuen Prozess mit niedriger Prio starten
nice -n 15 ./backup_script.sh

# Einem laufenden Prozess mehr Prio geben (erfordert sudo)
sudo renice -n -5 -p <PID>

# 3. Real-Time Scheduling (RT)

Garantierte Antwortzeiten.

Für Dienste, die niemals unterbrochen werden dürfen (z.B. Audio-Processing oder High-Frequency Trading), nutzen wir die RT-Klasse.

# Nutzung von chrt

# Setze Prozess auf FIFO (First-In-First-Out) mit Prio 10
sudo chrt -f -p 10 <PID>

Gefahr: Ein fehlerhafter RT-Prozess in der FIFO Klasse kann das gesamte System einfrieren, da er die CPU niemals freiwillig abgibt!


# 4. Day-2 Operations: CPU Affinität (Pinning)

Ortsgebundene Prozesse.

In Multi-Socket Systemen (NUMA) oder High-Core CPUs wollen wir verhindern, dass Prozesse zwischen Kernen springen (Cache Misses).

# taskset: Den Kern festlegen

# Starte Prozess nur auf CPU-Kern 0 und 1
taskset -c 0,1 ./my_app

# Ändere Affinität für laufenden Prozess
sudo taskset -cp 2,3 <PID>

# 5. Troubleshooting & “War Stories”

Wenn der Scheduler kämpft.

# Story 1: “Der hängende Desktop durch Compile-Jobs”

Symptom: Ein Admin kompiliert einen Kernel (make -j32), und plötzlich reagiert die Maus nicht mehr flüssig. Ursache: Der Build-Prozess belegt alle Kerne mit der gleichen Priorität wie die grafische Oberfläche. Der Scheduler versucht “fair” zu sein, was für das UI zu wenig ist. Lösung: Starten Sie massiv parallele Jobs immer mit nice -n 19. So bleibt das System interaktiv bedienbar.

# Story 2: “CPU Steal Time durch RT-Tasks”

Symptom: In einer VM-Umgebung steigt die Load massiv an, obwohl scheinbar nichts passiert. Ursache: Ein Gast nutzt Real-Time Scheduling. Der Hypervisor muss den gesamten physischen Kern reservieren, was andere VMs blockiert. Lösung: Deaktivieren Sie RT-Schedules in virtuellen Umgebungen oder pinnen Sie die betroffene VM fest auf dedizierte physische Kerne.


# 6. Fazit & Empfehlung

  • Routine: Nutzen Sie nice für Backups und Datei-Indizierungen.
  • Performance: Nutzen Sie taskset, um Datenbanken fest an CPU-Kerne zu binden.
  • Sicherheit: Überwachen Sie Prozesse mit negativen Nice-Werten. Oft nutzen Rootkits hohe Prioritäten, um ungestört zu arbeiten.

# Anhang: Cheatsheet

Aufgabe Befehl
Nice Wert prüfen top oder ps -o ni,comm
Prio live ändern htop -> F7/F8
RT Status prüfen chrt -p <pid>
CPU Affinität sehen taskset -p <pid>
Interrupts prüfen cat /proc/interrupts
Soft-IRQs überwachen watch -n 1 cat /proc/softirqs
Scheduler Latenz perf sched latency