schedo, Befehl
Die Optimierung erfolgt über zwei Optionen des Befehls schedo : sched_R und sched_D.
Jede Option gibt einen Parameter an, der eine ganze Zahl von 0 bis 32 ist. Die Parameter werden angewendet, indem sie mit dem Wert des Parameters multipliziert und anschließend durch 32 dividiert werden. Die Standardwerte für R und D sind 16, was dasselbe Verhalten wie der ursprüngliche Algorithmus [(D=R=16)/32 =0.5] ergibt. Der neue Wertebereich ermöglicht ein weit größeres Spektrum an Verhaltensweisen. Beispiel:
# schedo -o sched_R=0[(R=0)/32 = 0, (D=16)/32 =0.5] würde bedeuten, dass die CPU-Belastung immer 0 war, sodass die Priorität nur eine Funktion des Prioritätswerts ist. Kein Hintergrundprozess würde CPU-Zeit erhalten, es sei denn, es gäbe überhaupt keine zuteilbaren Vordergrundprozesse. Die Prioritätswerte der Threads wären effektiv konstant, obwohl sie technisch gesehen keine Threads mit fester Priorität wären.
# schedo -o sched_R=5[(R=5)/32 =0.15625, (D=16) /32 =0.5] würde bedeuten, dass ein Vordergrundprozess nie mit einem Hintergrundprozess konkurrieren muss, der mit dem Befehl nice -n 10gestartet wurde. Der Grenzwert von 120 aufgelaufenen CPU-Zeitscheiben würde bedeuten, dass die maximale CPU-Belastung für den Vordergrundprozess 18 beträgt.
# schedo -o sched_R=6 -o sched_D=16[(R=6)/32 =0.1875, (D=16) /32 =0.5] würde bedeuten, dass, wenn der Hintergrundprozess mit dem Befehl nice -n 10gestartet wurde, es mindestens eine Sekunde dauert, bevor der Hintergrundprozess begonnen hat, CPU-Zeit zu empfangen. Vordergrundprozesse wären jedoch nach wie vor anhand der CPU-Auslastung unterscheidbar. Vordergrundprozesse mit langer Laufzeit, die sich wahrscheinlich im Hintergrund befinden sollten, würden letztendlich eine ausreichende CPU-Belastung anhäufen, damit sie den echten Vordergrund nicht beeinträchtigen.
# schedo -o sched_R=32 -o sched_D=32[(R=32)/32 = 1, (D=32) /32 = 1] würde bedeuten, dass Threads mit langer Laufzeit einen C-Wert von 120 erreichen würden und dort bleiben würden, was auf der Basis ihrer nice -Werte konkurrieren würde. Neue Threads hätten unabhängig von ihrem Wert für nice Priorität, bis sie genügend Zeitscheiben aufgelaufen wären, um sie in den Prioritätswertbereich der vorhandenen Threads zu bringen.
Hier sind einige Richtlinien für R und D:
- Kleinere Werte von R schränken den Prioritätsbereich ein und bewirken, dass sich der Wert
nicestärker auf die Priorität auswirkt. - Größere Werte von R erweitern den Prioritätsbereich und bewirken, dass sich der Wert
niceweniger auf die Priorität auswirkt. - Kleinere Werte von D verringern die CPU-Belastung schneller und können dazu führen, dass CPU-intensive Threads früher geplant werden.
- Größere Werte von D führen zu einer langsameren Abnahme der CPU-Belastung und zu einer größeren Penalisierung der CPU-intensiven Threads (wodurch interaktive Threads bevorzugt werden).