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
nicefü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 |