Linux Scheduling Übersicht

Eine kompakte, praxisorientierte Referenz der wichtigsten Scheduling‑Konzepte, Werkzeuge und Diagnose‑Befehle in Linux.


Glossar (wichtigste Begriffe)

BegriffKurzerklärung
CFS (Completely Fair Scheduler)Standard‑Scheduler für alle Time‑Sharing‑Tasks (Policy SCHED_OTHER). Verteilt CPU‑Zeit proportional zum Nice‑Wert.
CFS‑TunablesKernel‑Parameter, mit denen sich das Zeit‑Budget (Latency, Granularity) des CFS feinjustieren lässt.
CPU AffinityBindung 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‑KlasseAlgorithmus, nach dem der Kernel einen Task plant, z. B. CFS, FIFO, Round‑Robin.

Scheduling‑Klassen

KlasseKürzelBeschreibung
Time‑SharingSCHED_OTHERStandard‑CFS‑Scheduler (faire Verteilung nach Nice‑Werten)
BatchSCHED_BATCHFür nicht‑interaktive Batch‑Jobs, ähnlich TS, aber niedrigere Priorität
IdleSCHED_IDLELäuft nur, wenn sonst keine Aufgaben anstehen
FIFOSCHED_FIFOEchtzeit‑First‑In‑First‑Out. Läuft bis Block oder Yield, verdrängt TS/Batch‑Jobs
Round‑RobinSCHED_RREchtzeit‑Round‑Robin: wie FIFO, aber mit Zeitscheiben‑Rotation unter gleicher RT‑Priorität
DeadlineSCHED_DEADLINEEchtzeit 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

ZweckBefehlBeispiel
Prozess startennice -n <Wert> <Kommando>nice -n +10 gzip Datei
Nice ändernrenice -n <Wert> -p <PID>sudo renice -n -5 -p 1234
Aktuelle Werte sehenps -eo pid,comm,cls,ni,prio

Befehle für Echtzeit (RT)

ZweckBefehlBeispiel
Policy/Priority anzeigenchrt -p <PID>chrt -p 1234
Neuen RT‑RR‑Prozess startensudo chrt -r <Priority> <Kommando>sudo chrt -r 50 my_app
Bestehenden Prozess anpassensudo 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

ZweckBefehlBeispiel / Hinweis
Alle Prozesse mit Klasse & Priorität listenps -eo pid,comm,cls,policy,rtprio,ni,prio --sort=clsZeigt TS, FF, RR, B, I, DL usw. im Feld CLS/POLICY
Einzelnen Prozess prüfenchrt -p <PID>chrt -p 1234 zeigt aktuelle Policy & RT‑Priorität
Scheduler‑Daten direkt im Proc‑FS lesen`grep -E ’^(policyprio
Interaktiv filternhtopF2 SetupColumnsSchedClass / Pri aktivierenIn der Prozessliste wird dann die Scheduling‑Klasse angezeigt
Tool für ältere Systeme / erweiterte Optionenschedtool -a ALLListet 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.

ZweckBefehlBeispiel
Affinity anzeigentaskset -pc <PID>taskset -pc 1234
Neuen Prozess bindentaskset -c <Kerne> <Kommando>taskset -c 0,1 myprogram
Bestehenden Prozess umsetzentaskset -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).

ParameterPfad/SysctlWirkung
sched_latency_ns/proc/sys/kernel/sched_latency_nsZiel‑Latenz, in der alle TS‑Tasks CPU‑Zeit erhalten
sched_min_granularity_ns/proc/sys/kernel/sched_min_granularity_nsKleinste ungeteilte Zeitscheibe
sched_wakeup_granularity_ns/proc/sys/kernel/sched_wakeup_granularity_nsAufschub bis Preempt

Ändern (live):

sudo sysctl -w kernel.sched_latency_ns=30000000
echo 15000000 | sudo tee /proc/sys/kernel/sched_min_granularity_ns

cgroups 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.

ControllerPfadZweck
CPU Weight/sys/fs/cgroup/<grp>/cpu.weightRelativer CPU‑Anteil (Default 100)
CPU Quota/sys/fs/cgroup/<grp>/cpu.maxHarte Quota (ms CPU pro Zeitfenster)

Typische Werkzeuge

ToolZweckBeispiel
systemd-cglsBaum der aktuellen cgroups anzeigensystemd-cgls --no-pager
systemd-cgtopLive‑Ressourcenverbrauch pro cgroupsystemd-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_margin

Energy‑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_aware

Schnellreferenz: CAS und EAS‑Parameter mit Beispielen

KonzeptKernel‑ParameterAnzeigenSetzen
CASsched_capacity_margincat /proc/sys/kernel/sched_capacity_margin`echo
EASsched_energy_awarecat /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

Linux-Blog-Overview