dscr_ctl, Subroutine

Zweck

Ermöglicht Anwendungen, die aktuellen Einstellungen des Hardware-Datenstrommechanismus zu lesen und die systemweiten oder prozessspezifischen Werte für das Steuerregister für Datenströme (Data Streams Control Register, DSCR) festzulegen
Hinweis: Das DSCR ist privilegiert. Sie kann nur vom Betriebssystem gelesen oder geschrieben werden. Ab POWER8ist der Zugriff auf den Problemstatus pro Thread (Benutzer) auf das DSCR über SPR 3 (Special Purpose Register) zulässig, wie in PowerISAdefiniert.

Syntax

#include <sys/machine.h>
int dscr_ctl(int operation, void * buf_p, int size);

Beschreibung

Das DSCR-Register besteht aus mehreren Bitfeldern:
Bitposition Ihren Namen Beschreibung
39 SWTE (Software-Transienten-Freigabe) Wendet das transiente Attribut auf softwaredefinierte Datenströme an.
40 HWTE (Hardware-Transienten-Freigabe) Wendet das transiente Attribut auf von der Hardware erkannte Datenströme an.
41 STE (Store Transient Enable) Wendet das transiente Attribut zum Speichern von Datenströmen an.
42 LTE (Lasttransienten-Freigabe) Wendet das transiente Attribut auf Ladedatenströme an.
43 SWUE (Software Unit Count Enable) Wendet die Einheitenanzahl auf softwaredefinierte Datenströme an.
44 HWUE (Anzahl der Hardwareeinheiten aktiviert) Wendet die Einheitenanzahl auf hardwaredefinierte Datenströme an.
45-54 UNITCNT (Einheitenzähler) Die Anzahl der Einheiten in einem Datenstrom.
55-57 URG (Tiefe Erfüllung Dringlichkeit) Gibt die Zeit für die Vorablesezugriffstiefe an, die für die von der Hardware erkannten Datenströme erreicht werden kann.
58 LSD (Datenstrom laden inaktivieren) Inaktiviert die Hardwareerkennung und die Initialisierung von Ladedatenströmen.
59 SNSE (Stride-N Datenstrom aktivieren) Aktiviert die Hardwareerkennung und Initialisierung von Lade-und Speicherdatenströmen, die einen Schritt größer als ein einzelner Cacheblock aufweisen. Die Ladedatenströme werden nur erkannt, wenn das LSD -Bit null ist. Die Speicherdatenströme werden nur erkannt, wenn das SSE -Bit eins ist.
60 SSE (Store Stream Enable) Aktiviert die Hardwareerkennung und die Initialisierung von Speicherdatenströmen.
61-63 DPFD (Standardlänge für Vorablesezugriff) Wendet den Tiefenwert für die von der Hardware erkannten Datenströme und softwaredefinierten Datenströme an, für die keine Anweisung dcbt mit dem TH-Wert 1010 verwendet wird.

Die Firmware stellt einen Plattformstandardwert für das DSCR-Register bereit. Wenn die Vorablesezugriffstiefe im DSCR-Register auf 0 gesetzt ist, verwendet der Prozessor diesen Standardwert implizit.

Der Systemaufruf dscr_ctl ermöglicht einer privilegierten Anwendung, einen Betriebssystemstandardwert für das DSCR festzulegen, der den Plattformstandardwert überschreibt.

Mit dem Systemaufruf dscr_ctl kann jede Anwendung einen prozessspezifischen Wert für das DSCR-Register festlegen, der den Standardwert des Betriebssystems für diesen Prozess überschreibt.

Wenn ein Thread den Systemaufruf dscr_ctl ausgibt, um die Vorablesezugriffstiefe für den Prozess zu ändern, wird der neue Wert in den AIX® -Prozesskontext und in das DSCR des Threads geschrieben, der den Systemaufruf ausführt. Wenn ein anderer Thread im Prozess gleichzeitig auf einem anderen Prozessor ausgeführt wird, wird er erst mit dem neuen DSCR-Wert gestartet, nachdem der neue Wert erneut aus dem Prozesskontext geladen wurde.

Wenn die Ausführung eines Threads auf einem Prozessor gestartet wird, wird der Wert des DSCR für den Eignerprozess in das DSCR-Register geschrieben. Wenn der Prozess seinen DSCR-Wert nicht mit dem Systemaufruf dscr_ctl festgelegt hat, wird der Standardwert des Betriebssystems verwendet.

Wenn die Subroutine fork aufgerufen wird, übernimmt der neue Prozess den DSCR-Wert von seinem übergeordneten Prozess. Dieser Wert wird auf den Systemstandardwert zurückgesetzt, wenn die Subroutine exec aufgerufen wird.

Auf Systemen, die die programmgesteuerte Einstellung des DSCR über den Fehlerstatuszugriff (Benutzerzugriff) unterstützen, wie z. B. POWER8, ist der durch diesen Zugriff festgelegte Wert threadspezifisch und überschreibt alle anderen Werte, auch die Werte, die durch diesen Service geschrieben werden. Mit anderen Worten: Die Bearbeitung des Problemstatus des DSCR ermöglicht die feinste Granularität des Zugriffs (pro Thread) auf die Funktionalität der Hardwaredatenströme.

Die folgenden symbolischen Werte für die verschiedenen Felder sind in der Datei <sys/machine.h> definiert:
DPFD_DEFAULT            0
DPFD_NONE               1
DPFD_SHALLOWEST         2
DPFD_SHALLOW            3
DPFD_MEDIUM             4
DPFD_DEEP               5
DPFD_DEEPER             6
DPFD_DEEPEST            7

DSCR_SSE                1<<3
DSCR_SNSE               1<<4
DSCR_LSD                1<<5

URG_DEFAULT             0<<6
URG_NOT_URGENT          1<<6
URG_LEAST_URGENT        2<<6
URG_LEAST_URGENT        3<<6
URG_LESS_URGENT         4<<6
URG_MEDIUM              5<<6
URG_MORE_URGENT         6<<6
URG_MOST_URGENT         7<<6
DSCR_HWUE (1<<19)
DSCR_SWUE (1<<20)
DSCR_LTE  (1<<21)
DSCR_STE  (1<<22)
DSCR_HWTE (1<<23)
DSCR_SWTE (1<<24)

Im Folgenden wird die Struktur dscr_properties in der Datei <sys/machine.h> beschrieben:


struct dscr_properties {
      uint        version;             /* Properties struct version                   */
      uint        number_of_streams;   /* Number of hardware streams                  */
      long long   platform_default_pd; /* PFW default DSCR value                      */
      long long   os_default_pd;       /* AIX default DSCR value                      */
      int         dscr_version;        /* Architecture version, such as PowerISA 2.07 */
      uint        dscr_control;        /* System-wide DSCR control (read only)        */
      long long   dscr_smt[5];         /* DSCR/SMT Matrix                             */
      long long   dscr_mask;           /* Mask of valid bits per architecture version */
};

Abhängig von der Version von Instruction Set Architecture (ISA) für Power Systems-Server, die von einer bestimmten AIX -Version auf einer angegebenen Hardwareplattform unterstützt wird, wird möglicherweise nur eine Untergruppe der zuvor angezeigten Bits unterstützt.

In der Headerdatei <sys/machine.h> finden Sie die Definitionen für das Feld dscr_version und die entsprechenden Bits, die für jede Version unterstützt werden.

Im Folgenden sehen Sie die Beispielcodeeinstellung des DSCR-Werts des Prozesses:
#include <sys/machine.h>
int rc;
long long dscr = DSCR_SSE | DPFD_DEEPER;
rc = dscr_ctl(DSCR_WRITE, &dscr);

Parameter

Parameter Beschreibung
Operation Gibt die auszuführende Operation an Sie hat die folgenden Flags:
DSCR_WRITE (DSCR_WRITE
Speichert den neuen Wert aus dem Eingabepuffer im Prozesskontext und im DSCR.
DSCR_READ (BESCHREIBUNG)
Liest den aktuellen Wert des DSCR und gibt ihn an den Ausgabepuffer zurück.
DSCR_GET_XX_ENCODE_CASE_ONE eigenschaften
Liest die Anzahl der von der Plattform unterstützten Hardwaredatenströme, die Standardvorabzugriffstiefe der Plattform, die von der Firmware verwendet wird, die Standardvorabzugriffstiefe des Betriebssystems und die unterstützte Version von ISA für Power Systems-Server aus dem Kernelspeicher. Sie gibt Werte im Ausgabepuffer zurück (Struktur dscr_properties , die in der Datei sys/machine.h definiert ist).
DSCR_SET_STANDARD
Legt den 64-Bit-DSCR-Wert in dem Puffer, auf den der Parameter buf_p verweist, als Betriebssystemstandard fest. Gibt den vorherigen Standardwert in dem Puffer zurück, auf den der Parameter buf_p verweist. Sie erfordert die Rootberechtigung.

Der neue Standardwert wird von allen Prozessen verwendet, die mit dem Flag DSCR_WRITE keinen DSCR-Wert explizit festlegen.

Der neue Standardwert ist bei Warmstartoperationen nicht permanent. Verwenden Sie den Befehl dscrtl , um die Standardvorabzugriffstiefe für ein Betriebssystem nach Warmstartoperationen permanent festzulegen.

buf_p

Wenn dieser Parameter mit den Werten DSCR_WRITE, DSCR_READ und DSCR_GET_PROPERTIES verwendet wird, gibt der Parameter buf_p den Zeiger auf einen Speicherbereich an, d. h. den Eingabepuffer, aus dem die Werte kopiert werden, oder den Ausgabepuffer, in den die Daten kopiert werden.

Der Parameter buf_p muss ein Zeiger auf einen 64-Bit-Datenbereich für die Operationen DSCR_WRITE, DSCR_READ und DSCR_SET_DEFAULT sein.

Der Parameter buf_p muss ein Zeiger auf eine Struktur dscr_properties sein, die in der Datei sys/machine.h für die Operation DSCR_GET_PROPERTIES definiert ist.

Größe Gibt die Größe (in Byte) des Bereichs an, auf den der Parameter buf_p verweist.

Rückgabewerte

Wert Beschreibung
0 Gibt 0 zurück, wenn die Subroutine dscr_ctl erfolgreich ist.
-1 Gibt -1 zurück, wenn ein Fehler festgestellt wird. In diesem Fall wird errno gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Wenn die Subroutine dscr_ctl fehlschlägt, wird errno auf einen der folgenden Werte gesetzt:

Wert von errno Beschreibung
EFAULT Die an die Funktion übergebene Adresse ist ungültig.
EINVAL Die Operation ist DSCR_WRITE oder DSCR_SET_DEFAULT und der für DSCR übergebene Wert ist ungültig.
ENOTSUP (ENOTSUP) Datenströme werden von Plattformhardware nicht unterstützt.
EPERM Operation ist nicht zulässig. Die Operation DSCR_SET_DEFAULT wird von einem Benutzer ohne Rootberechtigung verwendet.