Wie erkennt man die Zeitscheibe des Linux-Schedulers?

Lesezeit: 4 Minuten

Benutzeravatar von Backlash
Rückschlag

Ich suche den Wert der Zeitscheibe (oder des Quantums) meines Linux-Kernels.

Spezifische Fragen:

  • Gibt es eine /proc Datei, die solche Informationen aussetzen?
  • (Oder) Ist es im Linux-Header meiner Distributionen gut definiert?
  • (Oder) Gibt es eine C-Funktion der Linux-API (vielleicht sysinfo), die diesen Wert verfügbar macht?

Benutzeravatar von Vilhelm Gray
Wilhelm Grau

Das für einen bestimmten Prozess zugewiesene Quantum variieren:

Sie können “Slice” durch Einstellen stimmen sched_latency_ns und
sched_min_granularity_ns, aber beachten Sie, dass “Slice” kein festes Quantum ist. Beachten Sie auch, dass CFS-Präemptionsentscheidungen auf dem momentanen Status basieren. Eine Aufgabe hat möglicherweise ein volles (variables) “Slice” der CPU-Zeit erhalten, aber die Präemption wird nur ausgelöst, wenn eine verdientere Aufgabe verfügbar ist, sodass ein “Slice” nicht die “maximale ununterbrochene CPU-Zeit” ist, die Sie erwarten können zu sein.. aber es ist etwas ähnlich.

Dies liegt daran, dass die Völlig fairer Schedulerder standardmäßige Linux-Scheduler, weist einen Teil des Prozessors zu zu einem Prozess und nicht zu einer festen Zeitscheibe. Das heißt, die Zeitscheibe für jeden Prozess ist proportional zur aktuellen Last und gewichtet mit dem Prioritätswert des Prozesses.

Für spezielle Echtzeitprozesse, die SCHED_RR verwenden, ist die Standardzeitscheibe im Linux-Kernel definiert als RR_TIMESLICE in include/linux/sched/rt.h.

/*
 * default timeslice is 100 msecs (used only for SCHED_RR tasks).
 * Timeslices get refilled after they expire.
 */
#define RR_TIMESLICE            (100 * HZ / 1000)

Sie können verwenden sched_rr_get_interval() um das SCHED_RR-Intervall für einen bestimmten SCHED_RR-Prozess abzurufen.

  • Allerdings scheint es so rt.h erschien mit Linux-Kernel 3.9.

    – Rückschlag

    6. Mai 2013 um 20:39 Uhr

  • Vor Linux-Kernel v3.9Die Definition von RR_TIMESLICE befand sich in include/linux/sched.h. Vor Linux-Kernel v3.4wurde die Definition genannt DEF_TIMESLICE und befand sich in Kernel/sched/sched.h.

    – Wilhelm Grau

    6. Mai 2013 um 20:45 Uhr


  • Beachten Sie, dass diese Antwort nur Threads betrifft, die mit der Echtzeitpriorität RR geplant sind

    – Manuel Selva

    7. August 2014 um 13:11 Uhr

  • Verzeihung. Ist nicht 100 * 100 = 10000 und 10.000/1000 = 10? Wie sind das also 100 ms?

    – Fülle

    5. Mai 2015 um 2:57 Uhr

  • @Abundance Der Kommentar default timeslice is 100 msecs bezieht sich möglicherweise auf einen Kernel, der mit konfiguriert ist CONFIG_HZ=1000; in diesem Fall (100 * (1000) / 1000) ist gleich 100.

    – Wilhelm Grau

    5. Mai 2015 um 18:02 Uhr

Benutzeravatar von Alexey Shmalko
Alexej Schmalko

CFS (der Standard-Scheduler für Prozesse) hat keine feste Zeitscheibe, es wird zur Laufzeit in Abhängigkeit von der angestrebten Latenzzeit berechnet (sysctl_sched_latency) und Anzahl der laufenden Prozesse. Timeslice konnte nie kleiner als die minimale Granularität sein (sysctl_sched_min_granularity).

Timeslice wird immer zwischen sein sysctl_sched_min_granularity und sysctl_sched_latencydie standardmäßig auf 0,75 ms bzw. 6 ms eingestellt und in definiert sind kernel/sched/fair.c.

Die tatsächliche Zeitscheibe wird jedoch nicht in den Benutzerbereich exportiert.

  • Gilt das auch für Batch-Prozesse?

    – Benutzer239558

    9. April 2014 um 9:11 Uhr

  • Dies gilt für jeden Prozess, der unter dem CFS-Scheduler läuft (kein Echtzeitprozess).

    – Alexej Schmalko

    11. April 2014 um 23:29 Uhr

  • @ user239558 ausgezeichneter Punkt. Die SCHED_BATCH-Zeitscheibe ist länger – 1,5 Sekunden. stackoverflow.com/a/31286586/799204

    – Quellejedi

    2. September 2018 um 13:40 Uhr

Es gibt einige Verwirrung in der akzeptierten Antwort zwischen SCHED_OTHER Prozesse (dh diejenigen, die unter der (Standard-)Nicht-Echtzeit-Round-Robin-Timesharing-Richtlinie arbeiten) und SCHED_RR Prozesse.

Das sched_latency_ns und sched_min_granularity_ns Dateien (die für Debugging-Zwecke gedacht sind und nur sichtbar sind, wenn der Kernel mit konfiguriert ist CONFIG_SCHED_DEBUG) beeinflussen die Planung von SCHED_OTHER Prozesse. Wie in der Antwort von Alexey Shmalko erwähnt, ist die Zeitscheibe unter CFS nicht festgelegt (und nicht in den Benutzerbereich exportiert) und hängt von Kernelparametern und Faktoren wie dem netten Wert des Prozesses ab.

sched_rr_get_interval() gibt einen festen Wert zurück, der das Quantum ist, das a SCHED_RR Prozess ist garantiert zu bekommen, es sei denn, es ist präemptiv oder blockiert. Unter herkömmlichem Linux ist die SCHED_RR Quantum beträgt 0,1 Sekunden. Seit Linux 3.9 ist das Limit einstellbar über die /proc/sys/kernel/sched_rr_timeslice_ms -Datei, wobei das Quantum als Millisekundenwert ausgedrückt wird, dessen Standardwert 100 ist.

Benutzeravatar von Shiloong
Shiloong

Ich habe versucht, den gleichen Zweifel an der Zeitscheibe dieser Frage zu googeln SCHED_RR in Linux, aber ich habe weder von hier noch vom Quellcode des Kernels eine klare Antwort erhalten.

Nach weiterer Überprüfung fand ich die Kernpunkt ist RR_TIMESLICE ist die Standardzeitscheibe in Jiffies, nicht Millisekunde! Also, die Standardzeitscheibe von SCHED_RR ist immer 100ms, egal was HZ Sie haben konfiguriert.

Gleich wie der Wert von /proc/sys/kernel/sched_rr_timeslice_mswelcher Eingabewert in ist Millisekundenaber es speichert und gibt es aus Augenblicke!

Also, wenn Ihr CONFIG_HZ=100 eingestellt ist, finden Sie Folgendes:

# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
# cat /proc/sys/kernel/sched_rr_timeslice_ms
10

Es ist ein bisschen verwirrt, ich hoffe, das kann Ihnen helfen, es zu verstehen!

Benutzeravatar von Denis
Dennis

sysctl wird zum Lesen und Schreiben von Kernelparametern zur Laufzeit verwendet. Die verfügbaren Parameter sind die unten aufgeführten /proc/sys/ . Außerdem hat Linux 3.9 einen neuen Mechanismus zum Anpassen (und Anzeigen) des SCHED_RR-Quantums hinzugefügt: Die Datei /proc/sys/kernel/sched_rr_timeslice_ms stellt das Quantum als Millisekundenwert bereit, dessen Standardwert 100 ist. Schreiben von 0 in diese Datei setzt das Quantum auf zurück Standardwert. Vielleicht möchten Sie es also versuchen:

sysctl kernel.sched_rr_timeslice_ms

1408110cookie-checkWie erkennt man die Zeitscheibe des Linux-Schedulers?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy