iostadd-Kernel-Service
Zweck
Registriert eine E/A-Statistikstruktur, die zum Aktualisieren von E/A-Statistiken verwendet wird, die von der Subroutine Iostat gemeldet werden.
Syntax
Beschreibung
Der Iostadd -Kernel-Service wird verwendet, um die E/A-Statistikstruktur zu registrieren, die für die Verwaltung von Statistiken auf einer Einheit erforderlich ist. Der Iostadd -Service wird normalerweise von einem TTY-, Platten-oder CD-ROM-Einheitentreiber aufgerufen, um die statistischen Informationen bereitzustellen, die von der Subroutine Iostat verwendet werden. Die Subroutine Iostat zeigt Statistikinformationen für TTY-und Platteneinheiten auf dem System an. Der Service Iostadd muss für jede konfigurierte Einheit einmal verwendet werden.
Der Iostadd -Kernel-Service und die Dkstat -Struktur unterstützen MPIO (Multi-Path I/O). Bei einer MPIO-Einheit ist der Anker die Dkstat -Struktur der Platte. Dieser Anker muss die erste Dkstat -Struktur sein, die mit dem Kernel-Service Iostadd registriert wird. Alle dkstat -Pfadstrukturen, die später registriert werden, müssen auf die Adresse der dkstat -Ankerstruktur (Plattenstruktur) im Feld dkstat.dk_mpio_anchor verweisen.
Bei TTY-Einheiten hat der Parameter Einheitentyp den Wert TT_TTY. In diesem Fall verwendet der Service Iostadd den Parameter Devstatp , um einen Zeiger auf eine Ttystat -Struktur zurückzugeben.
Bei Platten-oder CD-ROM-Einheiten mit dem Einheitentyp -Wert DD-PLATTE oder CD-ROMmuss der Aufrufende eine fixierte und initialisierte Dkstat -Struktur als Eingabeparameter bereitstellen. Auf diese Struktur wird durch den Parameter Devstatp beim Eintrag im Iostadd -Kernel-Service verwiesen.
Wenn die Einheitentreiberunterstützung für eine Einheit beendet wird, muss die Registrierung der Struktur Dkstat oder Ttystat , die beim Iostadd -Kernel-Service registriert ist, durch Aufrufen des Iostdel -Kernel-Service zurückgenommen werden.
E/A-Statistikstrukturen
Der Kernel-Service iostadd verwendet zwei Strukturen, die sich in der Datei usr/include/sys/iostat.h befinden: die Struktur ttystat und die Struktur dkstat .
Die Struktur Ttystat enthält die folgenden Felder:
| Feld | Beschreibung |
|---|---|
| rawinch | Die Anzahl der Rohzeichen, die von der TTY-Einheit empfangen werden. |
| caninch | Anzahl der kanonischen Zeichen, die von der kanonischen Verarbeitung generiert werden |
| outch | Anzahl der Zeichen, die an eine TTY-Einheit ausgegeben werden |
Die zweite Struktur, die vom Iostadd -Kernel-Service verwendet wird, ist die Struktur Dkstat , die Informationen zu Platteneinheiten enthält. Diese Struktur enthält die folgenden Felder:
| Feld | Beschreibung |
|---|---|
| diskname | 32-stelliger Zeichenfolgename für die logische Einheit der Platte |
| dknextp | Zeiger auf die nächste Dkstat -Struktur in der Kette |
| dk_status | Platteneintragsstatusmarkierungen |
| dk_time | Zeit, zu der die Platte aktiv ist |
| dk_bsize | Anzahl der Bytes in einem Block |
| dk_xfers | Anzahl der Übertragungen auf die Platte oder von der Platte |
| dk_rblks | Anzahl der Blöcke, die von der Platte gelesen werden |
| dk_wblks | Anzahl der Blöcke, die auf die Platte geschrieben werden |
| dk_seeks | Anzahl der Suchoperationen für Platten |
| dk_version | Version der Dkstat -Struktur |
| dk_q_depth | Größe der Warteschlange |
| dk_mpio_anchor | Zeiger auf die Pfaddatenanker (Platte) |
| dk_mpio_next_path | Zeiger auf die Dkstat -Struktur des nächsten Pfads in der Kette |
| dk_mpio_path_id | Pfad-ID |
Unterstützung für TTY-Einheitentreiber
DerrawinchDas Feld in der Ttystat -Struktur muss um die Anzahl der Zeichen erhöht werden, die von der TTY-Einheit empfangen werden. DercaninchFeld in der Struktur Ttystat muss um die Anzahl der Eingabezeichen erhöht werden, die von der kanonischen Verarbeitung generiert werden. Deroutchwird um die Anzahl der an TTY-Einheiten ausgegebenen Zeichen erhöht. Diese Felder müssen vom Einheitentreiber erhöht, aber nie gelöscht werden.
Unterstützung für Platteneinheitentreiber
Ein Platteneinheitentreiber muss die folgenden vier Tasks ausführen:
- Zuweisung und Pin einer dkstat-Struktur während der Initialisierung des Geräts.
- Aktualisieren Sie diedkstat.disknamemit dem logischen Namen der Einheit.
- Aktualisieren Sie diedkstat.dk_bsizemit der Anzahl der Bytes in einem Block auf der Einheit.
- Alle anderen Felder der Struktur werden auf 0 gesetzt.
- Ordnen Sie eine Dkstat -Struktur während der Einheiteninitialisierung zu und fixieren Sie sie.
- Aktualisieren Sie das Feld
dkstat.disknamemit dem logischen Namen des Geräts. - Aktualisieren Sie das Feld
dkstat.dk_bsizemit der Anzahl Byte in einem Block auf der Einheit. - Setzen Sie den Wert von
dkstat.dk_versionauf dk_qd_mpio_magic. - Setzen Sie den Wert von
dkstat.dk_mpio_anchorauf 0, wenn die hinzugefügte Struktur dkstat die Platte ist. - Setzen Sie den Wert von
dkstat.dk_mpio_anchorauf die Adresse der dkstat -Ankerstruktur (Platte) des Pfads und setzen Siedkstat.dk_mpio_path_idauf die ID des Pfads, wenn die hinzugefügte dkstat -Struktur ein Pfad ist. - Setzen Sie alle anderen Felder auf 0.
Wenn die Einheit diskrete Suchbefehle unterstützt,dkstat.dk_xratein der Struktur muss auf die Übertragungsgeschwindigkeit des Geräts (KB/sec) eingestellt werden. Die dkstat-Struktur des Geräts muss dann mit dem Kernel-Dienst iostadd registriert werden.
Während der Aktualisierung der Laufwerkoperationdkstat.dk_statusFeld muss den Besetztstatus oder den Nicht-Besetztstatus der Einheit anzeigen. Dazu kann das Flag IOST_DK_BUS gesetzt und zurückgesetzt werden. Derdkstat.dk_xfersmuss für jede Übertragung, die zum oder vom Gerät eingeleitet wird, erhöht werden. Derdkstat.dk_rblksunddkstat.dk_wblksFelder müssen um die Anzahl der Blöcke erhöht werden, die gelesen oder geschrieben werden.
Wenn die Einheit diskrete Suchbefehle unterstützt,dkstat.dk_seekmuss um die Anzahl der Suchbefehle erhöht werden, die an die Einheit gesendet werden. Wenn das Gerät diskrete Suchbefehle nicht unterstützt, werden sowohl diedkstat.dk_seekunddkstat.dk_xratemüssen mit einem Wert von 0 belassen werden.
Der Basiskernel aktualisiert diedkstat.dk_nextpunddkstat.dk_timeFelder. Sie dürfen vom Gerätetreiber nach der Initialisierung nicht mehr verändert werden. Für MPIO-Einheiten aktualisiert der Basiskernel auch das Feld dkstat.dk_mpio_next_path .
- Setzen Sie den Wert von
dkstat.dk_versionauf dk_qd_service2_magic. - Setzen Sie das Feld
dkstat.ident.adapterauf den Adapternamen, wenn der Treiber MPEA nicht unterstützt.
- Erhöhen Sie den Wert im Feld
dkstat.__dk_rxfersfür jede Leseübertragung. - Aktualisieren Sie das Feld
dkstat.dk_q_depthmit der Anzahl der E/A-Anforderungen, die in Bearbeitung sind. - Erhöhen Sie den Wert im Feld
dkstat.dk_q_full, wenn die Anzahl der aktiven E/A-Anforderungen die maximale Warteschlangenlänge erreicht. - Erhöhen Sie den Wert im Feld
dkstat.dk_rservum die Servicezeit. Dies ist der Basiswert für die Deltazeit zwischen dem Zeitpunkt, zu dem der devstrat -Kernel-Service eine Leseanforderung an den Adaptertreiber sendet, und dem Zeitpunkt, zu dem der iodone -Kernel-Service die Anforderung vom Adaptertreiber zurückgibt. - Erhöhen Sie den Wert im Feld
dkstat.dk_rtimeout, wenn der Treiber erneut versucht, eine fehlgeschlagene Leseanforderung auszuführen. - Erhöhen Sie den Wert im Feld
dkstat.dk_rfailed, wenn der Treiber eine fehlgeschlagene Leseanforderung als Fehler zurückgibt. - Aktualisieren Sie das Feld
dkstat.dk_min_rservmit der Mindestservicezeit für eine Leseanforderung. - Aktualisieren Sie das Feld
dkstat.dk_max_rservmit der maximalen Servicezeit für eine Leseanforderung. - Erhöhen Sie den Wert im Feld
dkstat.dk_wservum die Servicezeit. Dies ist der Basiswert für die Deltazeit zwischen dem Zeitpunkt, zu dem der devstrat -Kernel-Service eine Schreibanforderung an den Adaptertreiber sendet, und dem Zeitpunkt, zu dem der iodone -Kernel-Service die Anforderung vom Adaptertreiber zurückgibt. - Erhöhen Sie den Wert im Feld
dkstat.dk_wtimeout, wenn der Treiber erneut versucht, eine fehlgeschlagene Schreibanforderung auszuführen. - Erhöhen Sie den Wert im Feld
dkstat.dk_wfailed, wenn der Treiber eine fehlgeschlagene Schreibanforderung als Fehler zurückgibt. - Aktualisieren Sie das Feld
dkstat.dk_min_wservmit der Mindestservicezeit für eine Schreibanforderung. - Aktualisieren Sie das Feld
dkstat.dk_max_wservmit der maximalen Servicezeit für eine Schreibanforderung. - Erhöhen und verringern Sie den Wert im Feld
dkstat.dk_wq_depth, wenn der Treiber eine E/A-Anforderung in die Warteschlange stellt und aus der Warteschlange entfernt. - Erhöhen Sie den Wert im Feld
dkstat.dk_wq_timeum die Wartezeit. Dies ist der Basiswert für die Deltazeit zwischen dem Zeitpunkt, zu dem der Treiber eine E/A-Anforderung in die Warteschlange stellt und dem Zeitpunkt, zu dem der devstrat -Kernel-Service die Anforderung an den Adaptertreiber sendet. - Aktualisieren Sie das Feld
dkstat.dk_wq_min_timemit der Mindestwartezeit. - Aktualisieren Sie das Feld
dkstat.dk_wq_max_timemit der maximalen Wartezeit.
Parameter
| Element | Beschreibung |
|---|---|
| DEVTYPE | Gibt den Typ der Einheit an, für die E/A-Statistiken aufbewahrt werden. Die verschiedenen Gerätetypen sind in der Datei /usr/include/sys/devinfo.h definiert. Derzeit werden E/A-Statistiken nur für Platten, CD-ROMs und TTY-Einheiten gespeichert. Gültige Werte für diesen Parameter sind:
|
| Devstatp | Verweist auf eine E/A-Statistikstruktur für den mit dem Parameter Einheitentyp angegebenen Einheitentyp. Für den Parameter Einheitentyp von TT_TTYwird die Adresse einer fixierten Ttystat -Struktur zurückgegeben. Für den Parameter Einheitentyp von DD-PLATTE oder CD-ROMist der Parameter ein Eingabeparameter, der auf eine Dkstat -Struktur verweist, die zuvor vom Aufrufenden zugeordnet wurde. Auf einer Plattform, die Speicherschlüssel unterstützt, muss sich der übergebene Parameter Devstatp in der Schutzdomäne KKEY_PUBLIC oder KKEY_BLOCK_DEW befinden. |
Ausführungsumgebung
Der Kernel-Service Iostadd kann nur über Prozessumgebung aufgerufen werden.
Rückgabewerte
| Element | Beschreibung |
|---|---|
| 0 | Zeigt an, dass kein Fehler erkannt wurde |
| EINVAL | Gibt an, dass der Parameter Einheitentyp einen ungültigen Einheitentyp angibt. Gibt bei MPIO-Einheiten an, dass kein Anker für eine Dkstat -Pfadstruktur gefunden wurde. |