dscr_ctl, Subroutine
Zweck
Syntax
Beschreibung
| 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.
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.
#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:
|
| 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. |