rt_dptbl(4) rt_dptbl(4)
NAME
rtdptbl - Parametertabelle für Echtzeit-Scheduler
BESCHREIBUNG
Der Prozeß-Scheduler ist der Teil des Systemkerns, der die Aufteilung
der CPU unter den Prozessen steuert. Es wird zwischen verschiedenen
Scheduling-Klassen unterschieden, wobei jede Klasse eine Scheduling-
Strategie definiert, die die Zuteilung der Zeitscheiben für die CPU an
die Prozesse innerhalb dieser Klasse steuert. Jeder Scheduling-Klasse
sind verschiedene Prioritäts-Warteschlangen zugeordnet, auf die von
den ablaufbereiten Prozessen Verweise hergestellt werden. Diese
Prioritäts-Warteschlangen werden durch die Systemkonfiguration auf
eine Reihe von globalen Scheduling-Prioritäten abgebildet, die den
Prozessen innerhalb der Klasse zugeteilt sind. (Der Scheduler wählt
zur Ausführung in jedem Fall den Prozeß mit der höchsten globalen
Scheduling-Priorität, der auf einer bestimmten CPU ablaufen darf
(siehe PROZESSOR-AFFINITÄT UND BINDUNGS-BETRACHTUNGEN, unten). Die
jeder Klasse zugeordneten Prioritäts-Warteschlangen werden von der
betreffenden Klasse als unmittelbar aufeinanderfolgende Gruppen von
Prioritätsstufen betrachtet; die Prioritätsstufen sind von 0 (niedrig-
ste Priorität) bis n (höchste Priorität) durchnumeriert, wobei n
abhängig von der Konfiguration ist. Die globalen Scheduling-
Prioritäten, auf die die Warteschlangen für eine bestimmte Klasse
abgebildet werden, müssen nicht unbedingt bei Null beginnen und durch-
gängig numeriert sein (dies hängt von der jeweiligen Konfiguration
ab).
In der Echtzeit-Klasse gibt es eine kern-interne Tabelle, in der für
jede Prioritätsstufe ein Eintrag mit den Prioritäten dieser Stufe ent-
halten ist. Diese Tabelle wird als Parametertabelle des Echtzeit-
Schedulers (rtdptbl) bezeichnet. Die Tabelle rtdptbl besteht aus
einem Array von Parameter-Strukturen (struct rtdpent), wobei jeder
der n Prioritätsstufen eine Parameter-Struktur zugeordnet ist. Die
Eigenschaften einer bestimmten Prioritätsstufe i werden durch die ite
Parameter-Struktur in diesem Array (rtdptbl[i]) definiert.
Eine Parameter-Struktur besteht aus den nachfolgend aufgeführten Ele-
menten. Diese Elemente werden auch in der Include-Datei
/usr/include/sys/rt.h beschrieben.
rtglobpri Die globale Scheduling-Priorität, die dieser Priori-
tätsstufe zugeordnet ist. Die Zuordnung zwischen den
Echtzeit-Prioritätsstufen und den globalen Scheduling-
Prioritäten wird beim Laden des Systems durch die
Systemkonfiguration festgelegt. Die Werte von
rtglobpri können nicht mit dispadmin(1M) geändert wer-
den.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
rt_dptbl(4) rt_dptbl(4)
rtquantum Die Zeitdauer in CPU-Takten (HZ), die den Prozessen auf
dieser Stufe zugeordnet ist. Der Wert für die Zeitdauer
stellt lediglich einen Standard- bzw. Anfangswert für
die Prozesse auf einer bestimmten Stufe dar (die einem
Echtzeit-Prozeß zugeteilte Zeitdauer kann durch den
Benutzer mit dem Kommando priocntl oder mit dem Syste-
maufruf priocntl geändert werden).
Der Systemverwalter kann das Verhalten des Echtzeit-Teils des Schedu-
lers durch eine Neukonfiguration von rtdptbl ändern. Hierzu gibt es
zwei Möglichkeiten, die nachfolgend beschrieben werden.
KONFIGURATION BEIM BINDEN DES SYSTEMKERNS
Die Tabelle rtdptbl kann beim Binden des Systemkerns neu konfiguriert
werden, indem die gewünschten Werte in der Datei
/etc/conf/pack.d/rt/space.c angegeben und dann das System mit der
automatischen Konfigurationsprozedur neu konfiguriert wird [siehe
idbuild(1M)]. Dies stellt die einzige Möglichkeit zum Ändern der
Anzahl der Echtzeit-Prioritätsstufen bzw. der globalen, von der
Echtzeit-Klasse benutzten Scheduling-Prioritäten dar.
DIE DISPADMIN-KONFIGURATIONSDATEI
Die rtquantum-Werte in der Tabelle rtdptbl können auf einem laufen-
den System mit dem Kommando dispadmin(1M) überprüft und geändert wer-
den. Wenn dispadmin für die Echtzeit-Klasse aufgerufen wird, kann der
Systemverwalter die aktuelle rtdptbl-Konfiguration aus der kern-
internen Tabelle laden oder die kern-interne Tabelle mit Werten aus
einer Konfigurationsdatei überschreiben. Die Konfigurationsdatei, die
als Eingabe für dispadmin benutzt wird, muß das unten beschriebene
Format haben.
Leerzeilen werden ignoriert. Alle Zeichen zur Rechten eines Nummern-
Zeichens (#) werden als Kommentar betrachtet. In der ersten Zeile, bei
der es sich weder um eine Leer- noch um eine Kommentarzeile handelt,
muß die Auflösung enthalten sein. Die Auflösung gibt die Einheit an,
in der die für die Zeitdauer angegebenen Werte interpretiert werden
sollen. Die Auflösung wird im Format
RES=res
angegeben. res ist dabei eine positive Ganzzahl im Bereich 1 bis
1000000000 einschließlich; als Einheit wird dann der Kehrwert von res
in Sekunden benutzt. So steht beispielsweise RES=1000 für die Zeitein-
heit Millisekunden. Es kann mit sehr hohen Auflösungen (Nanosekunden)
gearbeitet werden; allerdings werden die für die Zeitdauer angegebenen
Werte auf das nächste ganzzahlige Vielfache der Auflösung der Syste-
muhr aufgerundet.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
rt_dptbl(4) rt_dptbl(4)
In den übrigen Zeilen der Datei werden die rtquantum-Werte für jede
der Echtzeit-Prioritätsstufen angegeben. In der ersten Zeile steht die
Zeitdauer für die Echtzeitstufe 0, in der zweiten Zeile die Zeitdauer
für die Echtzeitstufe 1 usw. Für jede konfigurierte Echtzeit-
Prioritätsstufe muß exakt eine Zeile enthalten sein. Jeder
rtquantum-Eintrag muß entweder eine positive Ganzzahl zur Angabe der
gewünschten Zeitdauer (in der durch res angegebenen Auflösung) oder
das Symbol RTTQINF enthalten, durch das dieser Stufe eine unendlich
lange Zeitdauer zugeordnet wird.
BEISPIEL
Das folgende Beispiel zeigt einen Auszug aus einer dispadmin-
Konfigurationsdatei. In jeder Zeile, in der eine Zeitdauer angegeben
wird, gibt es einen Kommentar zur Angabe der zugehörigen Prioritäts-
stufe. Die Stufennummern geben die Prioritäten innerhalb der
Echtzeit-Klasse an; die Zuordnung dieser Echtzeit-Prioritäten zu den
entsprechenden globalen Scheduling-Prioritäten wird anhand der Konfi-
gurationsdatei rt/space.c festgelegt. Die Stufennummern werden ledig-
lich zur einfacheren Lesbarkeit der Datei angegeben und werden wie
jeder Kommentar von dispadmin ignoriert. dispadmin geht davon aus, daß
die Zeilen innerhalb der Datei in aufsteigender Folge ihrer Priori-
tätsstufen (von Null bis zur konfigurations-spezifischen maximalen
Echtzeit-Priorität) angeordnet sind. Die Stufennummern in den Kommen-
taren sollten diese Reihenfolge im Normalfall ebenfalls einhalten;
eine andere Reihenfolge hat allerdings keinerlei Auswirkungen auf die
Funktionsweise von dispadmin.
# Konfiguration des Echtzeit-Schedulers
RES=1000
# ZEITDAUER PRIORITÄTS-
# (rtquantum) STUFE
1000 # 0
1000 # 1
1000 # 2
1000 # 3
1000 # 4
1000 # 5
1000 # 6
1000 # 7
1000 # 8
1000 # 9
800 # 10
800 # 11
. . .
. . .
. . .
100 # 58
100 # 59
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
rt_dptbl(4) rt_dptbl(4)
PROZESSOR-AFFINITÄT UND BINDUNGS-BETRACHTUNGEN
Um die Trefferquoten eines Multiprozessor-Systems im Cache-Speicher zu
erhöhen, sollte ein Prozeß im Normalfall auf einem bestimmten Prozes-
sor ablaufen. Diese Affinität zu einem bestimmten Prozessor kann die
erforderliche Speicherbandbreite des Prozesses (und für das System als
Ganzes) verringern. Wenn ein Prozeß nicht erst "vor kurzem" abgelaufen
ist, befinden sich für jeden der Prozessoren mit hoher Wahrscheinlich-
keit nur noch wenige Daten im Cache-Speicher - und dadurch sollte er
seine Affinität für einen bestimmten Prozessor verlieren.
Dieser Affinitäts-Mechanismus kann vom Systemverwalter prozeßweise
aktiviert und deaktiviert werden [siehe mpcntl(1M), mpcntl(3X)]. Da
Echtzeit-Funktionen zeitkritisch sind, ist der Affinitäts-Mechanismus
standardmäßig auf off gestellt - dadurch wird die Echtzeit-Funktion
auf dem ersten verfügbaren Prozessor ablaufen (vorausgesetzt, es gibt
keinen Prozeß mit einer höheren Priorität).
Ein Prozeß kann auch an zwei oder mehr Prozessoren gebunden werden.
Dies bewirkt, daß der Prozeß ausschließlich auf einem Prozessor aus
dieser Gruppe abläuft. Wenn es einen aktuell verfügbaren Prozessor
gibt, an den der Prozeß jedoch nicht gebunden ist, wartet der Prozeß
so lange, bis auf einem Prozessor aus seiner Gruppe kein Prozeß mit
höherer Priorität mehr läuft.
Die Bindung an einen bestimmten Prozessor bzw. eine bestimmte
Prozessor-Gruppe kann vom Prozeß [siehe mpcntl(3X)] oder vorübergehend
vom Systemkern hergestellt werden (im letzteren Fall muß der System-
kern gerade einen Treiber-Code ausführen, der auf einer bestimmten CPU
ablaufen muß).
DATEIEN
/usr/include/sys/rt.h
/etc/conf/pack.d/rt/space.c
SIEHE AUCH
priocntl(1), dispadmin(1M), idbuild(1M), priocntl(2), mpcntl(3X).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98