spu_create - Créer un nouveau contexte spu
Bibliothèque C standard (
libc,
-lc)
#include <sys/spu.h> /* Définition des constantes SPU_* */
#include <sys/syscall.h> /* Définition des constantes SYS_* */
#include <unistd.h>
int syscall(SYS_spu_create, const char *pathname, unsigned int flags,
mode_t mode, int neighbor_fd);
Remarque : la glibc ne fournit pas d'enveloppe pour
spu_create(), imposant l'utilisation de
syscall(2).
L'appel système
spu_create() est utilisé sur les PowerPC
disposant de l'architecture du processeur Cell (Cell Broadband Engine
Architecture) dans le but d'accéder aux SPU (Synergistic Processor
Units). Il crée un nouveau contexte logique pour un SPU dans
pathname et renvoie le descripteur de fichier qui lui est
associé.
pathname doit pointer vers un répertoire qui
n'existe pas sur le point de montage du système de fichiers SPU (
spufs). Si
spu_create() réussit, un répertoire est
créé dans
pathname et est rempli par les fichiers
décrits dans
spufs(7).
Lorsqu'un contexte est créé, le descripteur de fichier
renvoyé ne peut qu'être passé à
spu_run(2),
utilisé comme paramètre
dirfd pour les appels
système de la famille
*at (par exemple,
openat(2)), ou
fermé ; d'autres opérations ne sont pas définies.
Un contexte logique SPU est détruit (avec tous les fichiers
créés dans le répertoire
pathname du contexte)
lorsque la dernière référence au contexte a
disparu ; cela survient généralement lorsque le
descripteur de fichier renvoyé par
spu_create() est
fermé.
Le paramètre
mode (sauf les bits positionnés dans
l'
umask(2) du processus) indique les permissions utilisées pour
créer le nouveau répertoire sur le système de fichiers
spufs. Consultez
stat(2) pour une liste complète des
valeurs de
mode.
L'argument
neighbor_fd est utilisé seulement quand l'attribut
SPU_CREATE_AFFINITY_SPU est spécifié ; voir plus
bas.
Le paramètre
flags vaut zéro ou une combinaison par un OU
bit à bit des options suivantes :
- SPU_CREATE_EVENTS_ENABLED
- Plutôt que d'utiliser des signaux pour signaler des
erreurs DMA, utiliser l'argument event de spu_run(2).
- SPU_CREATE_GANG
- Créer un gang SPU plutôt qu'un contexte. (Un
gang est un groupe de contextes SPU qui sont en relation fonctionnelle
entre eux et qui partagent des paramètres d'ordonnancement communs
— priorité et politique. Dans le futur,
l'ordonnancement de gangs pourra être implémenté
faisant que le groupe soit mis en œuvre ou non comme une
unité simple.)
- Un nouveau répertoire sera créé
à l'endroit indiqué par l'argument pathname. Le gang
peut être utilisé pour détenir d'autres contextes SPU
en fournissant un nom de chemin qui soit à l'intérieur du
répertoire du gang pour des appels ultérieurs à
spu_create().
- SPU_CREATE_NOSCHED
- Créer un contexte qui ne soit pas affecté par
l'ordonnanceur SPU. Une fois que le contexte est lancé, il ne sera
pas déplanifié jusqu'à ce qu'il soit détruit
par le processus créateur.
- Parce que le contexte ne peut pas être
supprimé de la SPU, certaines fonctionnalités sont
désactivées des contextes SPU_CREATE_NOSCHED. Seul un
sous-ensemble de fichiers sera disponible dans le répertoire du
contexte sur le système de fichiers spufs. De plus, les
contextes SPU_CREATE_NOSCHED ne peuvent pas créer de fichier
de vidage lors d'un plantage.
- La création de contextes SPU_CREATE_NOSCHED
nécessite la capacité CAP_SYS_NICE.
- SPU_CREATE_ISOLATE
- Créer un contexte SPU isolé. Les contextes
isolés sont protégés de certaines opérations
PPE (PowerPC Processing Element), comme l'accès au stockage local
de la SPU ou au registre NPC.
- La création de contextes SPU_CREATE_ISOLATE
nécessite également l'attribut
SPU_CREATE_NOSCHED.
-
SPU_CREATE_AFFINITY_SPU (depuis Linux 2.6.23)
- Créer un contexte avec une affinité pour un
autre contexte SPU. Cette information d'affinité est
utilisée dans l'algorithme d'ordonnancement du SPU. L'utilisation
de cet attribut nécessite que le descripteur de fichier
référençant l'autre contexte SPU soit passé
dans l'argument neighbor_fd.
-
SPU_CREATE_AFFINITY_MEM (depuis Linux 2.6.23)
- Créer un contexte avec une affinité pour la
mémoire système. Cette information d'affinité est
utilisée dans l'algorithme d'ordonnancement du SPU.
S'il réussit,
spu_create() renvoie un nouveau descripteur de
fichier. En cas d'échec, il renvoie
-1 et
errno est
défini pour indiquer l'erreur.
- EACCES
- L'utilisateur en cours n'a pas accès en
écriture sur le point de montage du spufs(7).
- EEXIST
- Un contexte SPU existe déjà dans le chemin
fourni.
- EFAULT
-
pathname n'est pas un pointeur de chaîne
valable dans l'espace d'adresses du processus appelant.
- EINVAL
-
pathname n'est pas un répertoire du point de
montage du spufs(7), ou des options non valables ont
été fournies.
- ELOOP
- Trop de liens symboliques trouvés lors de la
résolution de pathname.
- EMFILE
- La limite du nombre de descripteurs de fichiers par
processus a été atteinte.
- ENAMETOOLONG
-
nom_chemin est trop long.
- ENFILE
- La limite du nombre total de fichiers ouverts pour le
système entier a été atteinte.
- ENODEV
- Un contexte isolé a été
demandé, mais le matériel ne prend pas en charge l'isolation
SPU.
- ENOENT
- Une partie de pathname n'a pas pu être
résolue.
- ENOMEM
- Le noyau n'a pas pu allouer toutes les ressources
nécessaires.
- ENOSPC
- Il n'y a pas suffisamment de ressources SPU disponibles
pour créer un nouveau contexte ou la limite spécifique
à l'utilisateur du nombre de contextes SPU a été
atteinte.
- ENOSYS
- La fonctionnalité n'est pas fournie par le
système actuel parce que le matériel ne fournit pas de SPU
ou parce que le module spufs n'est pas chargé.
- ENOTDIR
- Un élément du chemin d'accès
pathname n'est pas un répertoire.
- EPERM
- L'attribut SPU_CREATE_NOSCHED a été
fourni, mais l'utilisateur n'a pas la capacité
CAP_SYS_NICE.
pathname doit pointer vers un emplacement du point de montage du
spufs, qui est monté par convention dans
/spu.
L'appel système
spu_create() est apparu dans Linux 2.6.16.
Cet appel système est spécifique à Linux et
implémenté uniquement sur l'architecture PowerPC. Les programmes
qui l'utilisent ne sont pas portables.
spu_create() est conçu pour être appelé depuis des
bibliothèques qui implémentent une interface plus abstraite pour
les SPU, pas pour être appelé directement par les applications
normales. Consultez
http://www.bsc.es/projects/deepcomputing/linuxoncell/
pour les bibliothèques recommandées.
Avant l'ajout dans Linux 2.6.23 de l'attribut
SPU_CREATE_AFFINITY_SPU, l'appel système
spu_create() ne
prenait que trois arguments (c'est-à-dire que l'argument
neighbor_fd n'existait pas).
Consultez
spu_run(2) pour un exemple d'utilisation de
spu_create()
close(2),
spu_run(2),
capabilities(7),
spufs(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Pierre Giraud <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]