ts_dptbl(4) ts_dptbl(4)
NAME
tsdptbl - Parametertabelle für Time-Sharing-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
jeweiligen 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 durchgängig nume-
riert sein (dies hängt von der jeweiligen Konfiguration ab).
Das Scheduling der Prozesse in der Time-Sharing-Klasse, die im
Benutzer-Modus (bzw. im Kern-Modus, bevor sie in den Wartezustand
übergehen) ablaufen, erfolgt anhand der Parametertabelle für Time-
Sharing-Scheduler (tsdptbl). (Die Prozesse der Time-Sharing-Klasse,
die nach dem Verlassen des Wartezustands im Kern-Modus ablaufen, lau-
fen mit Prioritäten in einem bestimmten Bereich ab, die speziell für
derartige Prozesse reserviert wurden; auf derartige Prozesse wirken
sich die Parameter in tsdptbl erst nach ihrer Rückkehr in den
Benutzer-Modus aus. tsdptbl besteht aus einem Array von Parameter-
Strukturen (struct tsdpent), wobei jeder der n Prioritätsstufen der
im Benutzer-Modus ablaufenden Time-Sharing-Prozesse eine Parameter-
Struktur zugeordnet ist. Die Eigenschaften einer bestimmten Priori-
tätsstufe i werden durch die ite Parameter-Struktur in diesem Array
(tsdptbl[i]) definiert.
Eine Parameter-Struktur besteht aus den nachfolgend aufgeführten Ele-
menten. Diese Elemente werden auch in der Include-Datei
/usr/include/sys/ts.h beschrieben.
tsglobpri Die globale Scheduling-Priorität, die dieser Priori-
tätsstufe zugeordnet ist. Die Zuordnung zwischen den
Time-Sharing-Prioritätsstufen und den globalen
Scheduling-Prioritäten wird beim Laden des Systems
durch die Systemkonfiguration festgelegt. tsglobpri
kann als einziges Element von tsdptbl nicht mit
dispadmin(1M) geändert werden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
ts_dptbl(4) ts_dptbl(4)
tsquantum Die Zeitdauer in CPU-Takten (HZ), die den Prozessen auf
dieser Stufe zugeordnet ist.
tstqexp Die Prioritätsstufe der neuen Warteschlange, in die ein
Prozeß auf der aktuellen Stufe gesetzt werden soll,
wenn er die ihm zugeteilte Zeitdauer überschritten hat.
Im Normalfall wird von diesem Feld ein Verweis auf eine
niedrigere Prioritätsstufe der Klasse Time-Sharing mit
einer längeren Zeitdauer hergestellt.
tsslpret Die Prioritätsstufe der neuen Warteschlange, in die der
Prozeß, der zuvor auf dieser Stufe im Benutzer-Modus
abgelaufen ist, nach seiner Rückkehr aus dem Wartezu-
stand in den Benutzermodus gesetzt werden soll. Im Nor-
malfall wird von diesem Feld aus ein Verweis auf eine
höhere Prioritätsstufe mit einer kürzeren Zeitdauer
hergestellt.
tsmaxwait Der prozeßbezogene Zähler tsdispwait wird jedesmal mit
dem Wert Null initialisiert, wenn ein Time-Sharing-
Prozeß wieder in die Scheduling-Warteschlange gesetzt
wird, nachdem seine Zeitdauer abgelaufen ist oder er
aus dem Wartezustand zurückgekehrt ist (tsdispwait
wird nicht auf Null zurückgesetzt, wenn ein Prozeß
durch einen Prozeß höherer Priorität verdrängt wird).
Der Zähler wird für jeden in der Scheduler-
Warteschlange enthaltenen Prozeß einmal pro Sekunde
hochgezählt. Wenn der tsdispwait-Wert eines Prozesses
den Maximalwert (tsmaxwait) für seine Stufe über-
steigt, wird die Priorität des Prozesses auf den Wert
von tslwait zurückgesetzt. Mit diesem Feld soll ein
Prozeßstillstand verhindert werden.
tslwait Ein Prozeß soll auf diese neue Prioritätsstufe gesetzt
werden, wenn tsdispwait größer ist als tsmaxwait.
Der Systemverwalter kann das Verhalten des Time-Sharing-Anteils des
Schedulers durch eine Neukonfiguration von tsdptbl ändern. Hierzu
gibt es zwei Möglichkeiten, die nachfolgend beschrieben werden.
KONFIGURATION BEIM BINDEN DES SYSTEMKERNS
Die Tabelle tsdptbl kann beim Binden des Systemkerns neu konfiguriert
werden, indem die gewünschten Werte in der Datei
/etc/conf/pack.d/ts/space.c angegeben werden, 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 Time-Sharing-Prioritätsstufen bzw. der globalen, von der
Time-Sharing-Klasse benutzten Scheduling-Prioritäten dar.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
ts_dptbl(4) ts_dptbl(4)
DIE DISPADMIN-KONFIGURATIONSDATEI
Mit Ausnahme von tsglobpri können alle Elemente der Tabelle tsdptbl
auf einem laufenden System mit dem Kommando dispadmin(1M) überprüft
und geändert werden. Wenn dispadmin für die Time-Sharing-Klasse aufge-
rufen wird, kann der Systemverwalter die aktuelle tsdptbl-
Konfiguration aus der kern-internen Tabelle laden oder die kern-
interne Tabelle mit Werten aus einer Konfigurationsdatei überschrei-
ben. 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 bei tsquantum angegebenen Werte interpretiert werden sol-
len. Die Auflösung wird im Format
RES=res
angegeben. res ist 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 Zeiteinheit Millise-
kunden. 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 Systemuhr aufge-
rundet.
In den übrigen Zeilen der Datei werden die Parameterwerte für jede der
Time-Sharing-Prioritätsstufen angegeben. In der ersten Zeile steht die
Zeitdauer für die Time-Sharing-Stufe 0, in der zweiten Zeile die Zeit-
dauer für die Time-Sharing-Stufe 1 usw. Für jede konfigurierte Time-
Sharing-Prioritätsstufe muß exakt eine Zeile enthalten sein.
BEISPIEL
Das folgende Beispiel zeigt einen Auszug aus einer dispadmin-
Konfigurationsdatei. In jeder Zeile mit Parametern gibt es einen Kom-
mentar zur Angabe der entsprechenden Prioritätsstufe. Die Stufennum-
mern geben die Prioritäten innerhalb der Time-Sharing-Klasse an; die
Zuordnung dieser Time-Sharing-Prioritäten zu den zugehörigen globalen
Scheduling-Prioritäten wird anhand der Konfigurationsdatei ts/space.c
festgelegt. Die Stufennummern werden lediglich zur einfacheren Lesbar-
keit 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 Prioritätsstufen (von Null bis zur
konfigurationsspezifischen maximalen Time-Sharing-Priorität) angeord-
net sind. Die Stufennummern in den Kommentaren sollten diese Reihen-
folge im Normalfall ebenfalls einhalten; eine andere Reihenfolge hat
allerdings keinerlei Auswirkungen auf die Funktionsweise von dispad-
min.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
ts_dptbl(4) ts_dptbl(4)
# Konfiguration des Time-Sharing-Schedulers
RES=1000
# tsquantum tstqexp tsslpret tsmaxwait tslwait PRIORITÄTSSTUFE
1000 0 10 5 10 # 0
1000 0 11 5 11 # 1
1000 1 12 5 12 # 2
1000 1 13 5 13 # 3
1000 2 14 5 14 # 4
1000 2 15 5 15 # 5
1000 3 16 5 16 # 6
1000 3 17 5 17 # 7
1000 4 18 5 18 # 8
1000 4 19 5 19 # 9
800 5 20 5 20 # 10
800 5 21 5 21 # 11
. . . . . . .
100 48 59 5 59 # 58
100 49 59 5 59 # 59
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 TS-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 keinem Prozessor aus seiner Gruppe mehr ein Prozeß
mit höherer Priorität 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ß).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
ts_dptbl(4) ts_dptbl(4)
HINWEISE
dispadmin überprüft die in der Konfigurationsdatei enthaltenen Werte
im begrenzten Umfang auf Plausibilität. Durch die Plausibilitätsprü-
fung soll sichergestellt werden, daß die neuen tsdptbl-Werte nicht zu
Panic-Meldungen des Systems führen. Es ist nicht das Ziel der Plausi-
bilitätsprüfung, die Auswirkungen der neuen Werte auf die Systemlei-
stung zu überprüfen. Durch ungewöhnliche tsdptbl-Konfigurationen kann
die Systemleistung drastisch verringert werden.
Die Plausiblität der tsdptbl-Werte in der Datei ts/space.c wird nicht
überprüft. Wenn die Werte in der Datei ts/space.c inkonsistent sind
oder keinen Sinn machen, kann dies zu einer drastischen Verringerng
der Systemleistung und/oder zu Panic-Meldungen des Systems führen.
DATEIEN
/usr/include/sys/ts.h
/etc/conf/pack.d/ts/space.c
SIEHE AUCH
priocntl(1), dispadmin(1M), idbuild(1M), mpcntl(1M), priocntl(2),
mpcntl(3X).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98