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

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/iostat.h>
#include <sys/devinfo.h>
int iostadd ( devtype,  devstatp)
int devtype;
union {
       struct ttystat *ttystp;
       struct dkstat  *dkstp;
       } devstatp;

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.
Wenn ein Platteneinheitentreiber MPIO unterstützt, muss er die folgenden Tasks ausführen:
  • Ordnen Sie eine Dkstat -Struktur während der Einheiteninitialisierung zu und fixieren Sie sie.
  • Aktualisieren Sie das Feld dkstat.diskname mit dem logischen Namen des Geräts.
  • Aktualisieren Sie das Feld dkstat.dk_bsize mit der Anzahl Byte in einem Block auf der Einheit.
  • Setzen Sie den Wert von dkstat.dk_version auf dk_qd_mpio_magic.
  • Setzen Sie den Wert von dkstat.dk_mpio_anchor auf 0, wenn die hinzugefügte Struktur dkstat die Platte ist.
  • Setzen Sie den Wert von dkstat.dk_mpio_anchor auf die Adresse der dkstat -Ankerstruktur (Platte) des Pfads und setzen Sie dkstat.dk_mpio_path_id auf 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 .

Anmerkung: Dieselbe Dkstat Struktur darf nur einmal registriert werden.
Neben grundlegenden Tasks muss ein Plattentreiber die folgenden Tasks ausführen, bevor er den Iostadd -Kernel-Service aufruft, wenn der Treiber die Option -D des Befehls Iostat unterstützt:
  • Setzen Sie den Wert von dkstat.dk_version auf dk_qd_service2_magic.
  • Setzen Sie das Feld dkstat.ident.adapter auf den Adapternamen, wenn der Treiber MPEA nicht unterstützt.
Während E/A-Operationen muss der Treiber die folgenden Tasks ausführen:
  • Erhöhen Sie den Wert im Feld dkstat.__dk_rxfers für jede Leseübertragung.
  • Aktualisieren Sie das Feld dkstat.dk_q_depth mit 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_rserv um 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_rserv mit der Mindestservicezeit für eine Leseanforderung.
  • Aktualisieren Sie das Feld dkstat.dk_max_rserv mit der maximalen Servicezeit für eine Leseanforderung.
  • Erhöhen Sie den Wert im Feld dkstat.dk_wserv um 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_wserv mit der Mindestservicezeit für eine Schreibanforderung.
  • Aktualisieren Sie das Feld dkstat.dk_max_wserv mit 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_time um 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_time mit der Mindestwartezeit.
  • Aktualisieren Sie das Feld dkstat.dk_wq_max_time mit 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:
DD-PLATTE
Für Platten
CD-ROM
Für CD-ROMs
DD_TTY (TTY)
Für TTY-Einheiten
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.