Wie ist es schön zu arbeiten?

20

sched_setscheduler sagt:

Die gesamte Zeitplanung ist preemptiv: Wenn ein Prozess mit einer höheren statischen Priorität zur Ausführung bereit ist, wird der aktuell ausgeführte Prozess preemptiviert und auf die Warteliste für seine statische Prioritätsstufe zurückgesetzt.

während setpriority sagt

Dies führt dazu, dass sehr niedrige Nizza-Werte (+19) einem Prozess immer dann wirklich wenig CPU zur Verfügung stellen, wenn das System mit höherer Priorität ausgelastet ist, und dass hohe Nizza-Werte (-20) den größten Teil der CPU für Anwendungen bereitstellen, die dies erfordern

Wie wird sich die Änderung des netten Werts auf die Ausführung von Programmen auswirken? Ist es ähnlich wie bei der RT-Planung (wo ein Programm mit einem höheren Nizza-Wert ein Programm mit einem niedrigeren Nizza-Wert unterbricht)?


Alle Informationen im Internet beziehen sich auf die Verwendung niceund die Änderung der Priorität eines Prozesses. Kein Link erklärt, wie genau das mit unterschiedlicher Priorität funktioniert. Ich konnte nicht einmal den Quellcode finden.

BЈовић
quelle

Antworten:

24

Der Anteil der Prozessorzeit, die ein bestimmter Prozess erhält, wird durch den relativen Unterschied in der Feinheit zwischen ihm und anderen ausführbaren Prozessen bestimmt.

Der Linux Completely Fair Scheduler (CFS) berechnet ein Gewicht basierend auf der Nizza. Das Gewicht entspricht in etwa 1024 / (1.25 ^ nice_value). Mit abnehmendem Nizza-Wert steigt das Gewicht exponentiell an. Die für den Prozess zugewiesene Zeitscheibe ist proportional zum Gewicht des Prozesses geteilt durch das Gesamtgewicht aller ausführbaren Prozesse. Die Umsetzung des CFS ist in kernel/sched/fair.c.

Das CFS hat eine Zielwartezeit für die Planungsdauer. Kleinere Ziellatenzen führen zu einer besseren Interaktivität. Mit abnehmender Ziellatenz steigt jedoch der Switching-Overhead, wodurch der Gesamtdurchsatz verringert wird.

Wenn beispielsweise eine Zielwartezeit von 20 Millisekunden und zwei ausführbare Prozesse mit gleicher Genauigkeit vorgegeben sind, werden beide Prozesse jeweils 10 Millisekunden lang ausgeführt, bevor sie zu Gunsten des anderen Prozesses ausgeführt werden. Wenn es 10 Prozesse mit gleicher Genauigkeit gibt, läuft jeder für jeweils 2 Millisekunden.

Betrachten Sie nun zwei Prozesse, einen mit einer Genauigkeit von 0 (Standardeinstellung) und einen mit einer Genauigkeit von 5. Die proportionale Differenz zwischen den entsprechenden Gewichten beträgt ungefähr 1/3. Dies bedeutet, dass der Prozess mit der höheren Priorität eine Zeitscheibe von ungefähr 15 Millisekunden erhält während der Prozess mit der niedrigeren Priorität eine Zeitscheibe von 5 Millisekunden empfängt.

Als letztes betrachten wir zwei Prozesse mit den Feinheitswerten 5 bzw. 10. Während in diesem Fall die absolute Feinheit größer ist, sind die relativen Unterschiede zwischen den Feinheitswerten die gleichen wie im vorherigen Beispiel, was zu einer identischen Zeitscheibenteilung führt.

Thomas Nyman
quelle
Genau das, wonach ich gesucht habe. Vielen Dank! Später fand ich diesen Artikel, der alles im Detail erklärt, aber nicht das, was Sie gerade geschrieben haben.
BЈови13
Es gibt etwas, das ich nicht verstehe. Was ist die Rolle von vruntime?
Surfer am
@Surferonthefall vruntime ist der interne CFS-Mechanismus, der die Zuordnung vieler CPU-Zeitprozesse nachverfolgt. Bei dieser Frage geht es um den für den Benutzer sichtbaren netten Wert. Wenn Sie eine Frage zu CFS-Interna haben und an anderer Stelle keine Antwort finden können , stellen Sie eine neue Frage
Thomas Nyman