Completely Fair Scheduler
Completely Fair Scheduler (CFS) ist ein für Linux konzipierter und dort als Standard vorgesehener Prozess-Scheduler. Solche Scheduler werden verwendet, um die Priorität von Programmabläufen auf Kernelebene von Betriebssystemen zu verwalten. Eine frühere Version des CFS wurde zuerst von Ingo Molnár entwickelt und ersetzte mit Kernelversion 2.6.23 im Oktober 2007 den zuvor verwendeten O(1)-Scheduler.
Der CFS garantiert eine faire Aufteilung der Prozessorzeit. Er verzichtet im Gegensatz zum O(1)-Scheduler dabei auf Heuristiken und Statistiken. Im Idealfall läuft beim CFS jeder Prozess quasiparallel in gleicher Geschwindigkeit. Der CFS benötigt keine Runqueue, keine Timeslices und kein Array-Switching. Stattdessen ist jedem Prozess ein vruntime genannter Wert zugeordnet (virtual runtime), der seine tatsächliche Laufzeit auf Nanosekunden bestimmt abstrahiert und eine Bewertung darüber erlaubt, wie lange der Prozess schon gelaufen ist. Derjenige Prozess mit der jeweils geringsten vruntime wird gewählt. Als Struktur wird dafür ein nach der vruntime sortierter Rot-Schwarz-Baum verwendet.[1][2]
Erweiterungen im 2.6.24er-Kernel
Mit dem 2.6.24er-Kernel unterstützt der CFS Task Groups. Dies bedeutet, dass mehrere Prozesse zu Gruppen zusammengefasst werden und dadurch eine faire Aufteilung zwischen den Gruppen stattfindet. Das kann sinnvoll sein, wenn mehrere User an einem System arbeiten.
Folgendes Szenario verdeutlicht den Sachverhalt: Benutzer A lässt zwei Prozesse laufen, Benutzer B dagegen einen. Alle drei Prozesse haben die gleiche Priorität. Der alte O(1)-Scheduler würde dem Benutzer A zwei Drittel und Benutzer B ein Drittel der CPU-Laufzeit zuteilen. Der CFS teilt dagegen beiden Usern 50 % der Rechenzeit zu.[1]
Siehe auch
Weblinks
- Ingo Molnár: This is the CFS scheduler.
- CFS Scheduler – Linux Kernel Documentation
- M. Tim Jones: Inside the Linux 2.6 Completely Fair Scheduler. In: IBM developerWorks, 15. Dezember 2009.
Einzelnachweise
- ↑ a b Ingo Molnár: This is the CFS scheduler., Stand 13. März 2008
- ↑ Robert Love: Linux Kernel Development. 3. Auflage, Addison-Wesley 2010, ISBN 978-0-672-32946-3. S. 41–67