rs_setpartition, Subroutine

Zweck

Legt die Partitionsressourcengruppe eines Prozesses fest.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/rset.h>
int rs_setpartition(pid, rset, flags)
pid_t pid;
rsethandle_t rset;
unsigned int flags;

Beschreibung

Die Unterroutine rs_setpartition setzt die Partitionsressourcen eines Prozesses. Mit der Subroutine kann auch die Partitionsressourcengruppe eines Prozesses entfernt werden.

Die Partitionsressourcengruppe begrenzt die Threads in einem Prozess auf die Ausführung auf den Prozessoren, die in der Partitionsressourcengruppe enthalten sind.

Die Arbeitskomponente ist ein bestehender Prozess, der durch die Prozess-ID identifiziert wird. Ein Prozess-ID-Wert von RS_MYSELF zeigt an, dass sich die Anlage auf den aktuellen Prozess bezieht.

Die folgenden Bedingungen müssen erfüllt sein, um die Partitionsressourcengruppe eines Prozesses festzulegen:
  • Der aufrufende Prozess muss Rootberechtigung haben.
  • Die Ressourcengruppe muss Prozessoren enthalten, die im System verfügbar sind.
  • Die neue Partitionsressourcengruppe muss gleich oder ein Superset der effektiven Ressourcengruppe des Zielprozesses sein.
  • Der Zielprozess darf keine Threads mit bindprocessor-Bindungen an einen Prozessor enthalten.
  • Die Ressourcenmenge muss eine Obermenge aller Threads des Zielprozesses sein.
Der Parameter flags kann gesetzt werden, um die Richtlinie für die Verwendung der Ressourcen anzugeben, die in der mit dem Parameter rset angegebenen Ressourcengruppe enthalten sind. Die einzige unterstützte Scheduling-Policy ist R_ATTACH_STRSET, die nur sinnvoll ist, wenn die Prozessoren des Systems im simultanen Multithreading-Modus laufen. Prozessoren wie der POWER5 unterstützen simultanes Multithreading, wobei jeder physische Prozessor über zwei Ausführungsengines, so genannte Hardware-Threads, verfügt. Jeder Hardware-Thread entspricht im Wesentlichen einem einzelnen Prozessor, und jeder wird in einem Ressourcensatz als separater Prozessor identifiziert. Das Flag R_ATTACH_STRSET gibt an, dass der Prozess mit einer Einzelthread-Richtlinie terminiert werden muss, d. h. dass er nur in einem Hardware-Thread pro physischem Prozessor terminiert werden sollte. Wenn das Kennzeichen R_ATTACH_STRSET angegeben ist, müssen alle in der Ressourcengruppe angegebenen verfügbaren Prozessoren exklusiv genutzt werden (der Prozessor muss zu einer Ressourcengruppe mit exklusiver Nutzung gehören). Aus dem angegebenen Ressourcensatz wird ein neuer Ressourcensatz, ein so genannter ST-Ressourcensatz, konstruiert und dem Prozess gemäß den folgenden Regeln zugeordnet:
  • Alle Offlineprozessoren werden ignoriert.
  • Wenn alle Hardware-Threads (Prozessoren) eines physischen Prozessors (im Simultanes Multithreading -Modus sind mehrere aktive Hardware-Threads pro physischem Prozessor vorhanden) nicht in der angegebenen Ressourcengruppe enthalten sind, werden die anderen Prozessoren des Prozessors beim Erstellen der ST-Ressourcengruppe ignoriert.
  • Nur eine Prozessorressource (Hardware-Thread) pro physischem Prozessor ist in der ST-Ressourcengruppe enthalten.

Parameter

Element Beschreibung
pid Gibt die Prozess-ID des Prozesses an, dessen Partitionsressourcengruppe festgelegt werden soll Der Wert RS_MICH gibt an, dass die Partitionsressourcengruppe des aktuellen Prozesses festgelegt werden soll.
rset Gibt die Partitionsressourcengruppe an, die festgelegt werden soll Der Wert RS_DEFAULT gibt an, dass die Partitionsressourcengruppe des Prozesses entfernt werden soll.
Flags Gibt die für den Prozess zu verwendende Richtlinie an Der Wert R_ATTACH_STRSET gibt an, dass der Prozess mit einer Einzelthreadrichtlinie terminiert werden soll (nur auf einem Hardware-Thread pro physischem Prozessor).

Rückgabewerte

Bei erfolgreicher Ausführung wird der Wert 0 zurückgegeben. Ist dies nicht der Fall, wird der Wert -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Das Unterprogramm rs_setpartition ist nicht erfolgreich, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:
Element Beschreibung
EINVAL Der Parameter R_ATTACH_STRSET flags ist angegeben und ein oder mehrere Prozessoren im Parameter rset sind nicht zur ausschließlichen Verwendung zugewiesen.
ENODEV Die mit dem Parameter RSet angegebene Ressourcengruppe enthält keine verfügbaren Prozessoren, oder der Parameter R_ATTACH_STRSET Flags wurde angegeben, und die erstellte ST-Ressourcengruppe enthält keine verfügbaren Prozessoren.
ESRCH Der durch den Parameter pid identifizierte Prozess existiert nicht.
EFAULT Ungültige Adresse.
ENOMEM Speicher nicht verfügbar.
EPERM Eine der folgenden Bedingungen ist aufgetreten:
  • Der aufrufende Prozess hat keine Rootberechtigung.
  • Der durch den Parameter pid identifizierte Prozess hat einen oder mehrere Threads mit einer bindprocessor-Prozessorbindung.
  • Der durch den pid-Parameter identifizierte Prozess hat einen effektiven Ressourcensatz und der durch den rset-Parameter identifizierte neue Partitionsressourcensatz enthält nicht alle Ressourcen des effektiven Ressourcensatzes.
  • Einer der Threads in dem durch den pid-Parameter identifizierten Prozess verfügt über einen Ressourcensatz auf Thread-Ebene, und der neue Partitionsressourcensatz, der durch den rset-Parameter identifiziert wird, enthält nicht alle Ressourcen des Ressourcensatzes auf Thread-Ebene.