SPU_CREATE
Section : Manuel du programmeur Linux (
2)
Mise à jour de la version anglaise : 20 décembre 2007
Index
Menu principal
NOM
spu_create - Créer un nouveau contexte spu
SYNOPSIS
#include <sys/types.h>
#include <sys/spu.h>
int spu_create(const char *pathname, int flags, mode_t mode);
int spu_create(const char *pathname, int flags, mode_t mode,
int neighbor_fd);
DESCRIPTION
L'appel système
spu_create()
est utilisé sur les machines PowerPC à base de processeur
« Cell Broadband Engine » afin d'accéder aux unités synergiques SPU
(Synergistic Processor Units).
Il crée un nouveau contexte logique pour une SPU dans le répertoire
pathname
et renvoie un descripteur de fichier associé à ce répertoire.
pathname
doit faire référence à un réportoire 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 avec 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 l'argument
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é.
L'argument
flags
peut être nul ou tout combinaison de OU bit à bit
des constantes 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 commuté comme une unité simple.)
Un nouveau répertoire sera créé à l'endroit spécifié par l'argument
pathname.
Le gang peut être utilisé pour tenir d'autres contextes 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ée 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ée 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
-
Crée un contexte avec l'affinité d'un autre contexte SPU.
Cette information d'affinité est utilisée dans l'algorithme
d'ordonnancement de la SPU.
L'utilisation de cet attribut nécessite que le descripteur de fichier
référencant l'autre contexte SPU soit passé dans l'argument
neighbor_fd.
- SPU_CREATE_AFFINITY_MEM
-
Crée un contexte avec l'affinité de la mémoire système.
Cette information d'affinité est utilisée dans l'algorithme
d'ordonnancement de la SPU.
L'argument
mode
(moins les bits positionnés dans
l'umask(2)
du processus) spécifie les permissions utilisées pour créer le nouveau
répertoire sur le système de fichier
spufs.
Voir
stat(2)
pour une liste complète des valeurs de
mode.
VALEUR RENVOYÉE
S'il réussit,
spu_create()
renvoie un nouveau descripteur de fichier.
S'il échoue, -1 est renvoyé et
errno
contient l'un des codes d'erreur indiqués ci-dessous.
ERREURS
- EACCES
-
L'utilisateur actuel n'a pas l'accès en écriture sur le point
de montage du système de fichiers
spufs(7).
- EEXIST
-
Un contexte SPU existe déjà pour le chemin fourni.
- EFAULT
-
pathname
n'est pas un pointeur de chaîne valide sur l'espace d'adressage
du processus appelant.
- EINVAL
-
pathname
n'est pas un répertoire du point de montage du système de fichiers
spufs(7),
ou des attributs invalides on été fournis.
- ELOOP
-
Trop de liens symboliques ont été rencontrés en parcourant
pathname.
- EMFILE
-
La limite maximale du nombre de fichiers ouverts
pour le processus a été atteinte.
- ENAMETOOLONG
-
pathname
est trop long.
- ENFILE
-
La limite du nombre total de fichiers ouverts
sur le système a été atteinte.
- ENODEV
-
Un contexte isolé a été demandé mais le matériel ne prend pas en charge
l'isolation de SPU.
- ENOENT
-
Un élément du chemin d'accès
pathname
n'a pu être résolu.
- 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 bien 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, soit parce que
le matériel ne fournit pas de SPU, soit 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.
FICHIERS
pathname
doit pointer vers un emplacement du point de montage
du système de fichiers
spufs(7).
Par convention, il est monté dans
/spu.
VERSIONS
L'appel système
spu_create()
a été introduit dans la version 2.6.16 du noyau Linux.
CONFORMITÉ
Cet appel est spécifique à Linux et n'est implémenté
que sur l'architecture PowerPC.
Les programmes qui utilisent cet appel système ne sont pas portables.
NOTES
La glibc ne fournit pas d'enveloppe pour cet appel système ;
utilisez
syscall(2)
pour l'appeler
Veuillez noter toutefois que
spu_create()
est conçu pour être utilisé par des bibliothèques qui implémentent
une interface plus abstraite pour les SPU, pas pour être utilisé
directement par des applications normales.
Voir
http://www.bsc.es/projects/deepcomputing/linuxoncell/
pour les bibliothèques recommandées.
EXEMPLE
Voir
spu_run(2)
pour un exemple d'utilisation de
spu_create()
VOIR AUSSI
close(2),
spu_run(2),
capabilities(7),
spufs(7)
TRADUCTION
Ce document est une traduction réalisée par Alain Portal
<aportal AT univ-montp2 DOT fr> le 18 décembre 2007
et révisée le 23 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 2 spu_create ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- FICHIERS
-
- VERSIONS
-
- CONFORMITÉ
-
- NOTES
-
- EXEMPLE
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 23 juin 2008