Sous-routine ra_attachrset

Objectif

Associa un composant de travail à un ensemble de ressources.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <sys/rset.h>
int ra_attachrset (rstype, rsid, rset, flags)
rstype_t rstype;
rsid_t rsid;
rsethandle_t rset;
unsigned int flags;

Descriptif

La sous-routine Ra_attachrset associe un composant de travail spécifié par les paramètres Rstype et Rsid à un ensemble de ressources spécifié par le paramètre Rset .

Le composant de travail est un processus existant identifié par l'ID processus ou une unité d'exécution de noyau existante identifiée par l'ID unité d'exécution du noyau (tid). Un ID de processus ou une valeur d'ID d'unité d'exécution de RS_MYSELF indique que la pièce jointe s'applique respectivement au processus en cours ou à l'unité d'exécution de noyau en cours.

Les conditions suivantes doivent être remplies pour associer un processus à un jeu de ressources:
  • L'ensemble de ressources doit contenir des processeurs disponibles dans le système.
  • Le processus appelant doit posséder des droits d'accès root ou avoir la capacité CAP_NUMA_ATTACH.
  • Le processus appelant doit posséder des droits d'accès root ou le même ID utilisateur effectif que le processus cible.
  • Le processus cible ne doit contenir aucune unité d'exécution qui comporte des liaisons de processeur.
  • L'ensemble de ressources doit être contenu dans (être un sous-ensemble de) Le jeu de ressources de partition du processus cible.
  • L'ensemble de ressources doit être une perluète de toutes les unités d'exécution' Rset dans le processus cible.
  • Pour R_FILDES Rstype, le processus appelant doit spécifier un descripteur de fichier ouvert, et il doit avoir un accès en écriture au fichier, ou l'ID utilisateur effectif du processus appelant doit être égal à l'ID utilisateur du propriétaire du fichier.
  • Pour R_SHM Rstype, l'ID utilisateur effectif du processus appelant doit être égal au propriétaire du segment partagé.
Les conditions suivantes doivent être remplies pour associer une unité d'exécution de noyau à un jeu de ressources:
  • L'ensemble de ressources doit contenir des processeurs disponibles dans le système.
  • Le processus appelant doit posséder des droits d'accès root ou avoir la capacité CAP_NUMA_ATTACH.
  • Le processus appelant doit posséder des droits d'accès root ou le même ID utilisateur effectif que le processus cible.
  • L'unité d'exécution cible ne doit pas avoir de liaisons de processeur de processeur sur un processeur.
  • L'ensemble de ressources doit être contenu dans (être un sous-ensemble de) Le processus de l'unité d'exécution cible est efficace et la partition est définie.

Si l'une de ces conditions n'est pas remplie, la pièce jointe échouera.

Une fois qu'un processus est connecté à un ensemble de ressources, les unités d'exécution du processus s'exécutent uniquement sur les processeurs contenus dans l'ensemble de ressources. Une fois qu'une unité d'exécution de noyau est connectée à un jeu de ressources, les unités d'exécution s'exécutent uniquement sur les processeurs contenus dans l'ensemble de ressources.

L'allocation dynamique du processeur et le DLPAR peuvent invalider la pièce jointe du processeur qui est spécifiée. Un programme doit devenir DLPAR Aware pour résoudre ce problème.

Le paramètre Indicateurs peut être défini pour indiquer la règle d'utilisation des ressources contenues dans le jeu de ressources spécifié dans le paramètre Rset . La seule règle de planification prise en charge est R_ATTACH_STRSET, qui n'est utile que lorsque les processeurs du système s'exécutent en mode Multithreading simultané . Les processeurs tels que POWER5 prennent en charge Multithreading simultané, où chaque processeur physique dispose de deux moteurs d'exécution, appelés Unités d'exécution matérielles. Chaque unité d'exécution matérielle est essentiellement équivalente à un processeur unique et chaque unité est identifiée comme un processeur distinct dans un jeu de ressources. L'indicateur R_ATTACH_STRSET indique que le processus doit être planifié avec une règle à unités d'exécution unique, à savoir qu'il doit être planifié sur une seule unité d'exécution matérielle par processeur physique. Si cette option est spécifiée, tous les processeurs disponibles indiqués dans l'ensemble de ressources doivent être d'une utilisation exclusive (le processeur doit appartenir à un ensemble de ressources de processeur d'utilisation exclusif). Un nouvel ensemble de ressources appelé Jeu de ressources STest construit à partir de l'ensemble de ressources spécifié et associé au processus conformément aux règles suivantes:
  • Tous les processeurs hors ligne sont ignorés.
  • Si toutes les unités d'exécution matérielles (processeurs) d'un processeur physique (lors de l'exécution en mode Multithreading simultané , il y aura plus d'une unité d'exécution matérielle active par processeur physique) ne sont pas incluses dans l'ensemble de ressources spécifié, les autres processeurs du processeur sont ignorés lors de la construction de l'ensemble de ressources ST.
  • Une seule ressource de processeur (unité d'exécution matérielle) par processeur physique est incluse dans l'ensemble de ressources ST.

Paramètres

Article Descriptif
Rstype Indique le type de composant de travail à joindre à l'ensemble de ressources spécifié par le paramètre Rset . Le paramètre rstype doit avoir la valeur suivante, définie dans rset.h:
R_PROCESSUS
Processus existant
UNITÉ D'EXÉCUTION R_THREAD
Unité d'exécution de noyau existante
R_FILDES
Fichier identifié par un descripteur de fichier ouvert
R_SHM
Segment de mémoire partagée identifié par l'ID du segment de mémoire partagée
R_SOUS-PLAGE
La pièce jointe implique une sous-plage du composant de travail
Rsid Identifie le composant de travail à joindre à l'ensemble de ressources spécifié par le paramètre Rset . Le paramètre Rsid doit être le suivant:
ID processus (pour Rstype de R_PROCESS)
Définissez la zone Rsid_t at_pid sur l'ID processus du processus souhaité.
ID d'unité d'exécution du noyau (pour Rstype de R_THREAD)
Définissez la zone Rsid_t at_tid sur l'ID unité d'exécution de l'unité d'exécution du noyau souhaité.
Descripteur de fichier ouvert (pour Rstype de R_FILDES)
Définissez la zone Rsid_t at_fd sur le descripteur de fichier souhaité.
ID segment de mémoire partagée (pour Rstype de R_SHM)
Définissez la zone Rsid_t at_shmid sur l'ID de mémoire partagée souhaité.
Pointeur vers une structure subrange_t (pour rstype de R_SUBRANGE)
Définissez les zones subrange_t su_offset, su_length, su_rstypeet su_rsid . Les autres zones de la structure subrange_t sont ignorées. La règle d'allocation de mémoire est prise à partir du paramètre Indicateurs et non du champ Su_policy .
rset Indique le composant de travail (spécifié par les paramètres Rstype et Rsid ) à associer à l'ensemble de ressources.
Flags Indique l'allocation de mémoire ou la règle de planification pour le composant de travail en cours de connexion. Le paramètre Indicateurs doit être le suivant:
P_DEFAULT
Politique de mémoire par défaut
P_FIRST_TOUCH
Première règle de mémoire d'accès
PONDÉRÉÉQUILIBRE
Politique de mémoire équilibrée
R_ATTACH_STRSET
Politique de planification à unités d'exécution uniques

Si la valeur du paramètre rstype est définie sur R_SUBRANGE, la règle d'allocation de mémoire est spécifiée dans la zone subrange_t su_policy plutôt que dans le paramètre flags .

La valeur R_ATTACH_STRSET est applicable uniquement si la valeur du paramètre Rstype est définie sur R_PROCESS. La valeur R_ATTACH_STRSET indique que le processus doit être planifié avec une règle à unités d'exécution unique (uniquement sur une unité d'exécution matérielle par processeur physique).

Valeurs renvoyées

En cas de réussite, la valeur 0 est renvoyée. En cas d'échec, la valeur -1 est renvoyée et la variable globale errno est définie pour indiquer l'erreur.

Codes d'erreur

La sous-routine Ra_attachrset échoue si une ou plusieurs des opérations suivantes sont vraies:

Article Descriptif
EINVAL Les causes possibles sont les suivantes :
  • Le paramètre Indicateurs contient une valeur non valide.
  • Le paramètre Rstype contient un qualificatif de type non valide.
  • Le paramètre R_ATTACH_STRSET Indicateurs est indiqué et un ou plusieurs processeurs du paramètre Rset ne sont pas affectés à une utilisation exclusive.
ENODEV L'ensemble de ressources spécifié par le paramètre Rset ne contient pas de processeurs disponibles, ou le paramètre R_ATTACH_STRSET Indicateurs est spécifié et l'ensemble de ressources ST construit ne dispose pas de processeurs disponibles.
ESRCH L'unité d'exécution de processus ou de noyau identifiée par les paramètres Rstype et Rsid n'existe pas.
EPERM Les causes possibles sont les suivantes :
  • Si Rstype est R_PROCESS, l'ensemble de ressources spécifié par le paramètre Rset n'est pas inclus dans l'ensemble de ressources de partition du processus identifié par les paramètres Rstype et Rsid , ou l'une des unités d'exécution R_THREAD Rset dans ce processus n'est pas un sous-ensemble de l'ensemble de ressources spécifié par le paramètre Rset .
  • Si Rstype est R_THREAD, l'ensemble de ressources indiqué par le paramètre Rset n'est pas inclus dans le processus de l'unité d'exécution cible effective ou de la partition (réelle).
  • Le processus appelant n'a pas de droits d'accès root ni de privilège de connexion CAP_NUMA_ATTACH.
  • Le processus appelant n'a ni l'autorité root ni le même ID utilisateur effectif que le processus identifié par les paramètres Rstype et Rsid .
  • Le processus ou l'unité d'exécution identifié par les paramètres Rstype et Rsid comporte une ou plusieurs unités d'exécution avec une liaison de processeur bindprocessor.