Linux Scheduling Übersicht
Eine kompakte, praxisorientierte Referenz der wichtigsten Scheduling‑Konzepte, Werkzeuge und Diagnose‑Befehle in Linux.
Glossar (wichtigste Begriffe)
| Begriff | Kurzerklärung |
|---|---|
| CFS (Completely Fair Scheduler) | Standard‑Scheduler für alle Time‑Sharing‑Tasks (Policy SCHED_OTHER). Verteilt CPU‑Zeit proportional zum Nice‑Wert. |
| CFS‑Tunables | Kernel‑Parameter, mit denen sich das Zeit‑Budget (Latency, Granularity) des CFS feinjustieren lässt. |
| CPU Affinity | Bindung eines Threads/Prozesses an einen oder mehrere CPU‑Kerne, um Cache‑Lokalität oder Lastverteilung zu steuern. |
| cgroups (control groups) | Hierarchische Kernel‑Ressourcenverwaltung: Limits, Prioritäten, Statistiken pro Prozess‑Gruppe. |
| CAS (Capacity‑Aware Scheduler) | Erweiterung innerhalb von SCHED_OTHER – berücksichtigt die unterschiedliche Rechenkapazität heterogener Kerne (Big/LITTLE). |
| EAS (Energy‑Aware Scheduler) | Baut auf CAS auf, nutzt Energie‑Modelle für energieeffiziente Platzierung. Greift nur bei SCHED_OTHER‑Tasks. |
| Scheduling‑Klasse | Algorithmus, nach dem der Kernel einen Task plant, z. B. CFS, FIFO, Round‑Robin. |
Scheduling‑Klassen
| Klasse | Kürzel | Beschreibung |
|---|---|---|
| Time‑Sharing | SCHED_OTHER | Standard‑CFS‑Scheduler (faire Verteilung nach Nice‑Werten) |
| Batch | SCHED_BATCH | Für nicht‑interaktive Batch‑Jobs, ähnlich TS, aber niedrigere Priorität |
| Idle | SCHED_IDLE | Läuft nur, wenn sonst keine Aufgaben anstehen |
| FIFO | SCHED_FIFO | Echtzeit‑First‑In‑First‑Out. Läuft bis Block oder Yield, verdrängt TS/Batch‑Jobs |
| Round‑Robin | SCHED_RR | Echtzeit‑Round‑Robin: wie FIFO, aber mit Zeitscheiben‑Rotation unter gleicher RT‑Priorität |
| Deadline | SCHED_DEADLINE | Echtzeit mit garantierter Deadline‑Abwicklung (selten genutzt) |
Prioritätsebenen
-
Nice‑Wert (−20 … +19) – Gilt nur für TS/Batch/Idle. Niedriger = höhere Priorität.
-
RT‑Priority (1 … 99) – Gilt nur für FIFO/RR/Deadline. Höher = härtere Echtzeit‑Priorität.
Befehle für Time‑Sharing
| Zweck | Befehl | Beispiel |
|---|---|---|
| Prozess starten | nice -n <Wert> <Kommando> | nice -n +10 gzip Datei |
| Nice ändern | renice -n <Wert> -p <PID> | sudo renice -n -5 -p 1234 |
| Aktuelle Werte sehen | ps -eo pid,comm,cls,ni,prio | — |
Befehle für Echtzeit (RT)
| Zweck | Befehl | Beispiel |
|---|---|---|
| Policy/Priority anzeigen | chrt -p <PID> | chrt -p 1234 |
| Neuen RT‑RR‑Prozess starten | sudo chrt -r <Priority> <Kommando> | sudo chrt -r 50 my_app |
| Bestehenden Prozess anpassen | sudo chrt -f -p <Priority> <PID> | sudo chrt -f -p 30 1234 |
Achtung: RT‑Prozesse verdrängen alle TS‑Jobs und können das System blockieren.
5. Scheduling‑Policy laufender Prozesse anzeigen
| Zweck | Befehl | Beispiel / Hinweis |
|---|---|---|
| Alle Prozesse mit Klasse & Priorität listen | ps -eo pid,comm,cls,policy,rtprio,ni,prio --sort=cls | Zeigt TS, FF, RR, B, I, DL usw. im Feld CLS/POLICY |
| Einzelnen Prozess prüfen | chrt -p <PID> | chrt -p 1234 zeigt aktuelle Policy & RT‑Priorität |
| Scheduler‑Daten direkt im Proc‑FS lesen | `grep -E ’^(policy | prio |
| Interaktiv filtern | htop → F2 Setup → Columns → SchedClass / Pri aktivieren | In der Prozessliste wird dann die Scheduling‑Klasse angezeigt |
| Tool für ältere Systeme / erweiterte Optionen | schedtool -a ALL | Listet Affinity + Policy; kann Policies ändern (schedtool -R -p 50 <PID> für RR/50) |
ps‑Kürzel: TS = CFS, FF = FIFO, RR = Round‑Robin, B = Batch, I = Idle, DL = Deadline
CPU‑Affinity steuern
CPU Affinity (“Prozessor‑Bindung”) legt fest, auf welchen physischen Kernen ein Thread laufen darf. Eine feste Bindung kann Cache‑Warm‑Up verbessern oder Lizenz‑/Realtime‑Vorgaben erfüllen.
| Zweck | Befehl | Beispiel |
|---|---|---|
| Affinity anzeigen | taskset -pc <PID> | taskset -pc 1234 |
| Neuen Prozess binden | taskset -c <Kerne> <Kommando> | taskset -c 0,1 myprogram |
| Bestehenden Prozess umsetzen | taskset -cp <Kerne> <PID> | sudo taskset -cp 2,3 1234 |
CFS‑Tunables
CFS‑Tunables beeinflussen, in welchen Zeitabständen der Completely Fair Scheduler Kontext‑Switches durchführt. Feinabstimmung lohnt sich vor allem auf Latenz‑sensitiven Systemen (Audio‑Workstations, Trading, Embedded).
| Parameter | Pfad/Sysctl | Wirkung |
|---|---|---|
sched_latency_ns | /proc/sys/kernel/sched_latency_ns | Ziel‑Latenz, in der alle TS‑Tasks CPU‑Zeit erhalten |
sched_min_granularity_ns | /proc/sys/kernel/sched_min_granularity_ns | Kleinste ungeteilte Zeitscheibe |
sched_wakeup_granularity_ns | /proc/sys/kernel/sched_wakeup_granularity_ns | Aufschub bis Preempt |
Ändern (live):
sudo sysctl -w kernel.sched_latency_ns=30000000
echo 15000000 | sudo tee /proc/sys/kernel/sched_min_granularity_nscgroups v2 (CPU‑Controller)
Was sind cgroups?
cgroups (“control groups”) fassen Prozesse zu hierarchischen Gruppen zusammen. Für jede Gruppe lassen sich Ressourcengrenzen, Prioritäten und Statistiken festlegen. systemd nutzt cgroups v2 von Haus aus.
| Controller | Pfad | Zweck |
|---|---|---|
| CPU Weight | /sys/fs/cgroup/<grp>/cpu.weight | Relativer CPU‑Anteil (Default 100) |
| CPU Quota | /sys/fs/cgroup/<grp>/cpu.max | Harte Quota (ms CPU pro Zeitfenster) |
Typische Werkzeuge
| Tool | Zweck | Beispiel |
|---|---|---|
systemd-cgls | Baum der aktuellen cgroups anzeigen | systemd-cgls --no-pager |
systemd-cgtop | Live‑Ressourcenverbrauch pro cgroup | systemd-cgtop |
Capacity‑Aware Scheduler (CAS)
Hinweis: CAS ist ein CFS‑Feature für SCHED_OTHER‑Tasks – keine eigene Scheduling‑Klasse.
CAS optimiert Big.LITTLE‑Systeme, indem es die unterschiedliche Rechenkapazität der Kerne berücksichtigt.
# Aktuellen Wert anzeigen
cat /proc/sys/kernel/sched_capacity_margin
# Auf 20 % setzen (wirkt sofort bis zum Reboot)
echo 20 | sudo tee /proc/sys/kernel/sched_capacity_marginEnergy‑Aware Scheduler (EAS)
Hinweis: EAS baut auf CAS auf und erweitert es um Energie‑Modelle; es erscheint nicht als eigene Policy.
# Prüfen, ob aktiv
cat /proc/sys/kernel/sched_energy_aware
# Aktivieren (1 = an, 0 = aus)
echo 1 | sudo tee /proc/sys/kernel/sched_energy_awareSchnellreferenz: CAS und EAS‑Parameter mit Beispielen
| Konzept | Kernel‑Parameter | Anzeigen | Setzen |
|---|---|---|---|
| CAS | sched_capacity_margin | cat /proc/sys/kernel/sched_capacity_margin | `echo |
| EAS | sched_energy_aware | cat /proc/sys/kernel/sched_energy_aware | `echo 1 |
Damit hast du Konfiguration und Diagnose des Linux‑Schedulers kompakt an einem Ort – von CFS‑Feintuning über cgroups bis hin zu modernen Features wie CAS/EAS.
LinuxSchedulingCPUSchedulerCFSRTLinuxSchedulingKlassenCPUAffinityCGroupsCASEASSysAdminSkillsPerformanceTuningKernelTweaks