SPUFS(7)

NOM
spufs - Le système de fichiers SPU

DESCRIPTION
Le système de fichiers SPU est utilisé sur les machines PowerPC à base de processeur « Cell Broadband Engine » afin d'accéder aux unités synergiques SPU (Synergistic Processor Units). Le système de fichiers fournit un espace de nom similaire à la mémoire partagée ou aux files de messages POSIX. Les utilisateurs qui ont les permissions d'écriture sur le système de fichiers peuvent utiliser spu_create(2) pour créer des contextes SPU dans le répertoire racine du système de fichiers SPU (spufs). Chaque contexte SPU est représenté par un répertoire contenant un ensemble prédéfini de fichiers. Ces fichiers peuvent être utilisés pour manipuler l'état de la SPU logique. Les utilisateurs peuvent modifier les permissions de ces fichiers, mais ne peuvent pas ajouter ou supprimer des fichiers.

  Options de montage

uid=<uid>
    Définir l'utilisateur propriétaire du point de montage ; la valeur par défaut est 0 (superutilisateur).

gid=<gid>
    Définir le groupe propriétaire du point de montage ; la valeur par défaut est 0 (superutilisateur).

  Fichiers
Les fichiers dans spufs suivent principalement le comportement standard pour les appels système comme read(2) ou write(2), mais ne supportent souvent qu'un sous-ensemble d'opérations supportées par les systèmes de fichiers normaux. La liste suivante détaille les opérations prises en charge ainsi que les déviations du comportement normal décrit dans leurs pages respectives. Tous les fichiers qui supportent les opérations de read(2) supportent également les opérations de readv(2), et tous les fichiers qui supportent les opérations de write(2) supportent également les opérations de writev(2). Tous les fichiers supportent les opérations des familles access(2) et stat(2), mais pour le dernier appel, les seuls champs de la structure stat renvoyée contenant une information fiable sont st_mode, st_nlink, st_uid et st_gid. Tous les fichiers supportent les opérations de chmod(2)/fchmod(2) et chown(2)/fchown(2), mais ne pourront pas accorder les permissions qui iraient en contradiction avec les opérations possibles (par exemple, l'accès en lecture du fichier wbox). L'ensemble actuel de fichiers est :

/mem
    le contenu de la mémoire de stockage locale de la SPU. On peut y accéder comme pour un fichier de mémoire partagée normal et il contient le code et les données de l'espace d'adressage de la SPU. Les opérations possibles sur un fichier mem ouvert sont :

    read(2), pread(2), write(2), pwrite(2), lseek(2)
        Ces appels fonctionnent comme d'habitude, hormis le fait que lseek(2), write(2) et pwrite(2) ne sont pas supportés au-delà de la fin de fichier. La taille du fichier est la taille du stockage local de la SPU, qui est normalement de 256 Ko.

    mmap(2)
        La projection de mem dans l'espace d'adressage du processus fournit un accès au stockage local de la SPU à l'intérieur de l'espace d'adressage du processus. Seules les projections MAP_SHARED sont autorisées.

/mbox
    La première boite à lettres de la communication entre SPU et CPU. Ce fichier est en lecture seule et peut être lu en éléments de 32 bits. Ce fichier ne peut être utilisé qu'en mode non bloquant et jamais avec poll(2) qui bloquerait sur lui. La seule opération possible sur un fichier mbox ouvert est :

    read(2)
        Si count est inférieur à 4, read(2) renvoie -1 et écrit EINVAL dans errno. Si aucune donnée n'est disponible dans la boite à lettres, la valeur de retour vaut -1 et errno vaut EAGAIN. Lorsque des données ont été lues avec succès, quatre octets sont placés dans le tampon de données et la valeur 4 est renvoyée.

/ibox
    La seconde boite à lettres de la communication entre SPU et CPU. Ce fichier est similaire au fichier de la première boite à lettres, mais il peut être lu en mode d'entrées-sorties bloquantes, ainsi, on peut utiliser poll(2) et des appels système similaires pour surveiller ce fichier. Les opérations possibles sur un fichier ibox ouvert sont :

    read(2)
        Si count est inférieur à 4, read(2) renvoie -1 et écrit EINVAL dans errno. Si aucune donnée n'est disponible dans la boite à lettres et que le descripteur de fichier a été ouvert avec O_NONBLOCK, la valeur de retour est -1 et errno vaut EAGAIN. Si aucune donnée n'est disponible dans la boite à lettres et que le descripteur de fichier a été ouvert sans O_NONBLOCK, l'appel bloquera jusqu'à ce que la SPU écrive dans son canal de boite à lettres. Lorsque une donnée a été lue avec succès, quatre octets sont placés dans le tampon de données et la valeur 4 est renvoyée.

    poll(2)
        Sonder le fichier ibox renvoie (POLLIN | POLLRDNORM) même si une donnée est disponible en lecture.

/wbox
    La boite à lettres de la communication entre CPU et SPU. Il est en écriture seule et peut être écrit en éléments de 32 bits. Si la boite à lettres est pleine, write(2) bloquera et poll(2) peut être utilisé pour attendre qu'elle se vide. Les opérations possibles sur un fichier wbox ouvert sont :

    write(2)
        Si count est inférieur à 4, write(2) renvoie -1 et écrit EINVAL dans errno. S'il n'y a pas d'espace disponible dans la boite à lettres et que le descripteur de fichier a été ouvert avec O_NONBLOCK, la valeur de retour vaut -1 et errno vaut EAGAIN. S'il n'y a pas d'espace disponible dans la boite à lettres et que le descripteur de fichier a été ouvert sans O_NONBLOCK, l'appel bloquera jusqu'à ce que la SPU lise son canal boite à lettres PPE. Lorsqu'une donnée a été écrite avec succès, l'appel système renvoie 4 comme résultat de fonction.

    poll(2)
        Un sondage du fichier wbox renvoie (POLLOUT | POLLWRNORM) même s'il y avait de la place disponible pour écrire.

/mbox_stat, /ibox_stat, /wbox_stat
    Ces fichiers en lecture seule contiennent la longueur de la file actuelle de chaque boite à lettres, c'est-à-dire combien de mots peuvent être lus dans mbox ou ibox ou combien de mots peuvent être écrits dans wbox sans bloquer. Ces fichiers ne peuvent être lus que par éléments de 4 octets et renvoient un nombre entier binaire gros boutiste (big-endian). Les opérations possibles sur un fichier *box_stat ouvert sont :

    read(2)
        Si count est inférieur à 4, read(2) renvoie -1 et écrit EINVAL dans errno. Autrement, une valeur sur 4 octets est placée dans le tampon de données. Cette valeur est le nombre d'éléments qui peuvent être lus dans (pour mbox_stat et ibox_stat) ou écrits dans (pour wbox_stat) la boite à lettres respective sans bloquer ou provoquer une erreur EAGAIN.

/npc, /decr, /decr_status, /spu_tag_mask, /event_mask, /srr0
    Ces fichiers exposent les registres internes de la SPU. Les valeurs sont représentées sous forme de chaînes de caractères ASCII contenant la valeur numérique de chaque registre. Ils peuvent être utilisés en mode lecture-écriture à des fins de débogage, mais les opérations normales des programmes ne devraient pas faire confiance à ces fichiers car les accès à chacun d'eux, hormis npc, nécessitent la sauvegarde du contexte de la PU, ce qui est très inefficace.

    Les contenus de ces fichiers sont :

    npc Compteur programme suivant

    decr
        Décrémenteur SPU

    decr_status
        État du décrémenteur

    spu_tag_mask
        Masque de la balise MFC pour la DMA de la SPU

    event_mask
        Masque d'événements pour les interruptions de la SPU

    srr0
        Registre d'adresse de retour de l'interruption

    Les opérations possibles sur ces fichiers sont :

    read(2)
        Lorsque la valeur count fournie à l'appel read(2) est plus courte que la longueur nécessaire à la valeur du registre plus le caractère « nouvelle ligne », les lectures suivantes à partir du même descripteur de fichier complèteront la chaîne, quelles que puissent être les modifications du registre effectuées par une tâche en cours d'exécution sur la SPU. Lorsqu'une chaîne complète a été lue, toutes les opérations de lecture suivantes renverront zéro octet et il faudra ouvrir un nouveau descripteur de fichier pour lire une nouvelle valeur.

    write(2)
        Une opération d'écriture write(2) dans le fichier écrit le registre avec la valeur fournie dans la chaîne. La chaîne est analysée du début jusqu'au premier caractère non numérique ou la fin du tampon. Les écritures suivantes sur le même descripteur de fichier écraseront les écritures précédentes.

/fpcr
    Ce fichier fournit un accès à l'état « virgule flottante » et au registre de contrôle sous forme d'un fichier de 4 octets. Les opérations possibles sur le fichier fpcr sont :

    read(2)
        Si count est inférieur à 4, read(2) renvoie -1 et écrit EINVAL dans errno. Autrement, une valeur sur 4 octets est placée dans le tampon de données ; c'est la valeur actuelle du registre fpcr.

    write(2)
        Si count est inférieur à 4, write(2) renvoie -1 et écrit EINVAL dans errno. Autrement, une valeur sur 4 octets est copiée du tampon de données, mettant à jour la valeur du registre fpcr.

/signal1, /signal2
    Ces fichiers fournissent un accès aux deux canaux de notification de signal d'une SPU. Ces fichiers en lecture-écriture travaillent avec des mots de 32 bits. L'écriture dans l'un de ces fichiers déclenche une interruption sur la SPU. La valeur écrite dans ces fichiers peut être lue par la SPU à travers une lecture du canal ou par l'espace utilisateur hôte à travers le fichier. Après que la valeur ait été lue par la SPU, le fichier est réinitialisé à zéro. Les opérations possibles sur un fichier signal1 ou signal2 ouvert sont :

    read(2)
        Si count est inférieur à 4, read(2) renvoie -1 et écrit EINVAL dans errno. Autrement, une valeur sur 4 octets est placée dans le tampon de données ; c'est la valeur actuelle du registre de notification de signal spécifié.

    write(2)
        Si count est inférieur à 4, write(2) renvoie -1 et écrit EINVAL dans errno. Une valeur sur 4 octets est copiée du tampon de données, mettant à jour la valeur actuelle du registre de notification de signal spécifié. Le registre de notification de signal sera soit remplacé par la donnée en entrée, soit mis à jour par un OU bit à bit entre l'ancienne valeur et la donnée en entrée, suivant, respectivement, le contenu des fichiers signal1_type ou signal2_type.

/signal1_type, /signal2_type
    Ces deux fichiers modifient le comportement des fichiers de notification signal1 et signal2. Ils contiennent une chaîne de caractères numériques ASCII qui peut être lue comme un « 1 » ou un « 0 ». Dans le mode 0 (écrasement), le matériel remplace le contenu du canal de signal par la donnée qui a été écrite dedans. Dans le mode 1 (OU logique), le matériel accumule les bits qui ont été écrits à la suite dedans. Les opérations possibles sur un fichier signal1_type ou signal2_type ouvert sont :

    read(2)
        Lorsque le compteur fourni à l'appel read(2) est plus court que la longueur nécessaire pour le nombre plus un caractère « nouvelle ligne », les lectures suivantes à partir du même descripteur de fichier complèteront la chaîne. Lorsqu'une chaîne complète est lue, toutes les opérations de lecture suivantes renverront zéro octet et il faudra ouvrir un nouveau descripteur de fichier pour lire à nouveau la valeur.

    write(2)
        Une opération write(2) sur le fichier écrit le registre avec la valeur donnée dans la chaîne. La chaîne est analysée du début jusqu'au premier caractère non numérique ou la fin du tampon. Les écritures suivantes sur le même descripteur de fichier écraseront les écritures précédentes.

EXEMPLE

/etc/fstab  entry
    none      /spu      spufs      gid=spu      0    0

VOIR AUSSI
close(2), spu_create(2), spu_run(2)

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 22 décembre 2007.

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 7 spufs ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.