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);
L’appel système spu_create() est utilisé sur les PowerPC disposant de
l’architecture du processeur Cell 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 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 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 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
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 du SPU.
Le paramètre 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 fichiers 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.
En cas d’erreur, il renvoie -1 et errno contient l’un des codes
d’erreur listés ci-dessous.
ERREURS
EACCES L’utilisateur en cours n’a pas accès au 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 Le processus a atteint sa limite du nombre de fichiers ouverts.
ENAMETOOLONG
pathname est trop long.
ENFILE Le système a atteint la limite globale du nombre de fichiers
ouverts.
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 par 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.
FICHIERS
pathname doit pointer vers un emplacement du point de montage du spufs,
qui est monté par convention dans /spu.
VERSIONS
L’appel système spu_create() est apparu dans Linux 2.6.16.
CONFORMITÉ
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.
NOTES
La glibc ne fournit pas de fonction pour cet appel système : utilisez
syscall(2) pour l’appeler. Notez cependant que 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.
EXEMPLE
Voir spu_run(2) pour un exemple d’utilisation de spu_create()
VOIR AUSSI
close(2), spu_run(2), capabilities(7), spufs(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et est maintenue par Julien Cristau
<julien.cristau@ens-lyon.org> et l’équipe francophone de traduction de
Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».