fp_dptbl(4) fp_dptbl(4)
NAME
fpdptbl - Parametertabelle für Fixed-Priority-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 Fixed-Priority-Klasse gibt es eine kern-interne Tabelle, in der
für jede Prioritätsstufe ein Eintrag mit den Prioritäten dieser Stufe
enthalten ist. Diese Tabelle wird als Parametertabelle des Fixed-
Priority-Schedulers (fpdptbl) bezeichnet. Die Tabelle fpdptbl
besteht aus einem Array von Parameter-Strukturen (struct fpdpent),
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 (fpdptbl[i]) definiert.
Eine Parameter-Struktur besteht aus den nachfolgend aufgeführten Ele-
menten. Diese Elemente werden auch in der Include-Datei
/usr/include/sys/fixpri.h beschrieben.
fpglobpri Die globale Scheduling-Priorität, die dieser Priori-
tätsstufe zugeordnet ist. Die Zuordnung zwischen den
Fixed-Priority-Prioritätsstufen und den globalen
Scheduling-Prioritäten wird beim Laden des Systems
durch die Systemkonfiguration festgelegt. Die Werte von
fpglobpri können nicht mit dispadmin(1M) geändert wer-
den.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
fp_dptbl(4) fp_dptbl(4)
fpquantum 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
Fixed-Priority-Prozeß zugeteilte Zeitdauer kann durch
den Benutzer mit dem Kommando priocntl(1) oder mit dem
Systemaufruf priocntl(2) geändert werden).
Der Systemverwalter kann das Verhalten des Fixed-Priority-Teils des
Schedulers durch eine Neukonfiguration von fpdptbl ändern. Hierzu
gibt es zwei Möglichkeiten, die nachfolgend beschrieben werden.
KONFIGURATION BEIM BINDEN DES SYSTEMKERNS
Die Tabelle fpdptbl kann beim Binden des Systemkerns neu konfiguriert
werden, indem die gewünschten Werte in der Datei
/etc/conf/pack.d/fp/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 Fixed-Priority-Prioritätsstufen bzw. der globalen, von der
Fixed-Priority-Klasse benutzten Scheduling-Prioritäten dar.
DIE DISPADMIN-KONFIGURATIONSDATEI
Die fpquantum-Werte in der Tabelle fpdptbl können auf einem laufen-
den System mit dem Kommando dispadmin(1M) überprüft und geändert wer-
den. Wenn dispadmin für die Fixed-Priority-Klasse aufgerufen wird,
kann der Systemverwalter die aktuelle fpdptbl-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
1.000.000.000 einschließlich; als Einheit wird dann der Kehrwert von
res in Sekunden benutzt. So steht beispielsweise RES=1000 für die
Zeiteinheit Millisekunden. Es kann mit sehr hohen Auflösungen (Nanose-
kunden) gearbeitet werden; allerdings werden die für die Zeitdauer
angegebenen Werte auf das nächste ganzzahlige Vielfache der Auflösung
der Systemuhr aufgerundet.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
fp_dptbl(4) fp_dptbl(4)
In den übrigen Zeilen der Datei werden die fpquantum-Werte für jede
der Fixed-Priority-Prioritätsstufen angegeben. In der ersten Zeile
steht die Zeitdauer für die Fixed-Priority-Stufe 0, in der zweiten
Zeile die Zeitdauer für die Fixed-Priority-Stufe 1 usw. Für jede kon-
figurierte Fixed-Priority-Prioritätsstufe muß exakt eine Zeile enthal-
ten sein. Jeder fpquantum-Eintrag muß eine positive Ganzzahl zur
Angabe der gewünschten Zeitdauer (in der durch res angegebenen Auflö-
sung) enthalten.
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 Fixed-
Priority-Klasse an; die Zuordnung dieser Fixed-Priority-Prioritäten zu
den entsprechenden globalen Scheduling-Prioritäten wird anhand der
Konfigurationsdatei fp/space.c festgelegt. Die Stufennummern werden
lediglich 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 Prio-
ritätsstufen (von Null bis zur konfigurations-spezifischen maximalen
Fixed-Priority-Priorität) angeordnet sind. Die Stufennummern in den
Kommentaren sollten diese Reihenfolge im Normalfall ebenfalls einhal-
ten; eine andere Reihenfolge hat allerdings keinerlei Auswirkungen auf
die Funktionsweise von dispadmin.
# Konfiguration des Fixed-Priority-Schedulers
RES=1000
# ZEITDAUER PRIORITÄTS-
# (fpquantum) STUFE
50 # 0
50 # 1
50 # 2
50 # 3
50 # 4
50 # 5
50 # 6
50 # 7
50 # 8
50 # 9
50 # 10
50 # 11
. . .
. . .
. . .
50 # 73
50 # 74
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
fp_dptbl(4) fp_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)]. Der
Affinitäts-Mechanismus ist für die Fixed-Priority-Klasse standardmäßig
auf on gestellt.
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/fixpri.h
/etc/conf/pack.d/fp/space.c
SIEHE AUCH
priocntl(1), dispadmin(1M), idbuild(1M), priocntl(2), mpcntl(3X).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98