spufs(7) Miscellaneous Information Manual spufs(7) NOM spufs - Systeme de fichiers SPU DESCRIPTION Le systeme de fichiers SPU est utilise sur les machines PowerPC qui utilisent l'architecture Cell Broadband Engine Architecture pour acceder aux SPU (<< Synergistic Processor Units >>). Le systeme de fichiers fournit un espace de noms similaire a la memoire partagee ou aux queues de messages POSIX. Les utilisateurs qui ont la permission d'ecrire sur le systeme de fichiers peuvent utiliser spu_create(2) pour etablir des contextes SPU dans le repertoire racine du spufs. Chaque contexte SPU est represente par un repertoire contenant un jeu de fichiers predefinis. Ces fichiers peuvent etre utilises pour manipuler l'etat du SPU logique. Les utilisateurs peuvent changer les permissions des fichiers, mais ne peuvent ni en ajouter ni en supprimer. Options de montage uid= Definit l'utilisateur proprietaire du point de montage ; 0 par defaut (root). gid= Definit le groupe proprietaire du point de montage ; 0 par defaut (root). mode= Definir le mode du repertoire de plus haut niveau du spufs sous la forme d'une chaine de valeur octale. La valeur par defaut est 0775. Fichiers Les fichiers du spufs se comportent majoritairement de facon standard pour les appels systeme comme read(2) ou write(2), mais ne gerent souvent qu'une fraction des operations permises par les systemes de fichiers normaux. Cette liste detaille les operations gerees et les derogations par rapport aux comportements standards qui sont decrits dans les differentes pages de manuel. Tous les fichiers qui gerent l'operation read(2) gerent egalement readv(2) et tous les fichiers qui gerent l'operation write(2) gerent aussi writev(2). Tous les fichiers gerent les familles d'operations access(2) stat(2), mais pour cette derniere famille, les seuls champs de la structure stat renvoyee qui contiennent des informations fiables sont st_mode, st_nlink, st_uid et st_gid. All files support the chmod(2)/ fchmod(2) and chown(2)/ fchown(2) operations, but will not be able to grant permissions that contradict the possible operations (e.g., read access on the wbox file). Le jeux actuel de fichiers est : /capabilities Contient une chaine representant les capacites, separees par des virgules, de ce contexte SPU. Les capacites possibles sont : sched Ce contexte peut etre ordonnance. step Ce contexte peut etre execute en mode pas-a-pas, pour debogage. De nouveaux attributs de capacites pourront etre ajoutes dans le futur. /mem Le contenu de la memoire de stockage locale du SPU. On peut y acceder comme a un fichier de memoire partage standard et il contient a la fois le code et les donnees de l'espace d'adressage du SPU. Les operations possibles sur un fichier mem ouvert sont : read(2) pread(2) write(2) pwrite(2) lseek(2) Elles operent normalement, a l'exception de lseek(2), write(2) et pwrite(2) qui ne sont pas gerees en dehors des limites du fichier. La taille du fichier est la taille de l'espace de stockage local du SPU, qui est normalement de 256 kilooctets. mmap(2) La projection de mem dans l'espace d'adressage du processus donne acces a l'espace de stockage local du SPU depuis l'espace d'adressage du processus. Seules les projections MAP_SHARED sont autorisees. /regs Contient la sauvegarde des registres a vocation generale du contexte SPU. Ce fichier contient les valeurs 128 bits de chaque registre, du registre 0 au registre 127, dans l'ordre. Cela permet de consulter le contenu de ces registres a vocation generale a des fins de debogage. La lecture ou l'ecriture dans ce fichier necessite que le contexte ne soit pas ordonnance, aussi, l'utilisation de ce fichier n'est pas recommande lors de l'execution normale d'un programme. Le fichier regs n'existe pas pour les contextes crees avec l'attribut SPU_CREATE_NOSCHED. /mbox La premiere boite aux lettres pour la communication entre SPU et CPU. Ce fichier est en lecture seule et peut etre lu par unites de 4 octets. Le fichier peut uniquement etre utilise en mode non bloquant - meme poll(2) ne peut pas etre utuilise pour se bloquer sur ce fichier. La seule operation possible sur un fichier mbox ouvert est : read(2) Si count est plus petit que quatre, read(2) renvoie -1 et positionne errno a EINVAL. S'il n'y a pas de donnee disponible dans la boite aux lettres (c'est-a-dire si le SPU n'a pas envoye de message dans la boite aux lettres), la valeur de retour est -1 et errno est positionnee a EAGAIN. Quand des donnees ont ete lues avec succes, quatre octets sont places dans le tampon de donnees et la valeur renvoyee est quatre. /ibox La deuxieme boite aux lettres pour la communication entre SPU et CPU. Ce fichier est similaire au premier fichier de boite aux lettres, mais peut etre lu en mode bloquant, ainsi appeler read(2) sur un fichier ibox ouvert bloquera tant que le SPU n'a pas ecrit dans son canal boite a lettres (a moins que le fichier n'ait ete ouvert avec O_NONBLOCK, voir ci-dessous). Egalement, poll(2) et des appels systeme similaires peuvent etre utilises pour surveiller la presence de donnees dans la boite a lettres. Les operations possibles sur un fichier ibox ouvert sont : read(2) Si count est plus petit que quatre, read(2) renvoie -1 et positionne errno a EINVAL. S'il n'y a pas de donnee disponible dans la boite aux lettres et que le fichier a ete ouvert avec O_NONBLOCK, la valeur renvoyee est -1 et errno est positionnee a EAGAIN. S'il n'y a pas de donnee disponible dans la boite aux lettres et que le fichier a ete ouvert sans l'attribut O_NONBLOCK, l'appel bloquera jusqu'a ce que le SPU ecrive dans son canal d'interruption de la boite aux lettres. Quand des donnees ont ete lues avec succes, quatre octets sont places dans le tampon de donnees et la valeur quatre est renvoyee. poll(2) L'appel de poll(2) sur le fichier ibox renvoie (POLLIN | POLLRDNORM) quand des donnees sont disponibles en lecture. /wbox La boite aux lettres pour la communication entre CPU et SPU. Elle est en ecriture seulement et on peut y ecrire des donnees de 32 bits. Si la boite aux lettres est pleine, write(2) bloque et poll(2) peut etre utilise pour bloquer jusqu'a ce qu'il soit possible d'ecrire dans la boite aux lettres. Les operations possibles sur un fichier wbox ouvert sont : write(2) Si count est plus petit que quatre, write(2) renvoie -1 et positionne errno a EINVAL. S'il n'y a pas d'espace disponible dans la boite aux lettres et que le fichier a ete ouvert avec O_NONBLOCK, la valeur renvoyee est -1 et errno est positionnee a EAGAIN. S'il n'y a pas d'espace disponible dans la boite aux lettres et que le fichier a ete ouvert sans l'attribut O_NONBLOCK, l'appel bloque jusqu'a ce que le SPU lise dans le canal de sa boite aux lettres PPE (PowerPC Processing Element). Quand des donnees ont ete ecrites avec succes, l'appel systeme renvoie 4 comme resultat de la fonction. poll(2) Un appel a poll(2) sur le fichier wbox renvoie (POLLOUT | POLLWRNORM) quand de l'espace est disponible en ecriture. /mbox_stat /ibox_stat /wbox_stat These are read-only files that contain the length of the current queue of each mailbox--that is, how many words can be read from mbox or ibox or how many words can be written to wbox without blocking. The files can be read only in four-byte units and return a big-endian binary integer number. The only possible operation on an open *box_stat file is: read(2) Si count est plus petit que quatre, read(2) renvoie -1 et positionne errno a EINVAL. Sinon, une valeur de quatre octets est placee dans le tampon de donnees. Cette valeur est le nombre d'elements qui peuvent etre lus (pour mbox_stat et ibox_stat) ou ecrits (pour wbox_stat) dans les boites aux lettres respectives sans bloquer ou renvoyer une erreur EAGAIN. /npc /decr /decr_status /spu_tag_mask /event_mask /event_status /srr0 /lslr Les registres internes du SPU. Ces fichiers contiennent une chaine de caractere ASCII representant la valeur hexadecimale du registre indique. Lire et ecrire dans ces fichiers (hormis npc, voir ci-dessous) necessite que le contexte du SPU ne soit pas ordonnance, aussi, les acces frequents a ces fichiers ne sont pas recommandes lors de l'execution normale d'un programme. Le contenu des fichiers est : npc Compteur programme suivant - Valide uniquement lorsque le SPU est dans un etat arrete. decr Decrementeur SPU decr_status Etat du decrementeur spu_tag_mask Masque de attributs MFC pour le DMA SPU event_mask Masque d'evenements pour les interruptions SPU event_status Nombre d'evenements SPU en attente (lecture seule) srr0 Registre contenant l'adresse de retour d'interruption lslr Registre de limite de stokage local Les operations possibles sur ces fichiers sont : read(2) Lit la valeur actuelle du registre. Si la valeur du registre est plus grande que le tampon passe a read(2), les lectures suivantes continueront a lire a partir du meme tampon jusqu'a ce que la fin du tampon soit atteinte. Lorsqu'une chaine complete a ete lue, toutes les operations de lecture suivantes renverront zero octet et il faudra ouvrir un nouveau descripteur de fichier pour lire une nouvelle valeur. write(2) Un appel a write(2) sur le fichier definit le registre a la valeur fournie dans la chaine. La chaine est analysee du debut jusqu'au premier caractere non numerique ou jusqu'a la fin du tampon. Les ecritures suivantes sur le meme descripteur de fichier remplaceront les precedentes ecritures. Excepte pour le fichier npc, ces fichiers n'existent pas dans les contextes crees avec l'attribut SPU_CREATE_NOSCHED. /fpcr Ce fichier donne acces au registre d'etat et de controle pour la virgule flottante (Floating Point Status and Control Register, fcpr) comme un fichier binaire de quatre octets. Les operations pour le fichier fpcr sont : read(2) Si count est plus petit que quatre, read(2) renvoie -1 et positionne errno a EINVAL. Sinon, une valeur de quatre octets est placee dans le tampon de donnees ; c'est la valeur actuelle du registre fpcr. write(2) Si count est plus petit que quatre, write(2) renvoie -1 et positionne errno a EINVAL. Sinon, une valeur de quatre octets est copiee depuis le tampon de donnees, mettant a jour la valeur du registre fpcr. /signal1 /signal2 Le fichier donne acces aux deux canaux de notification de signal d'un SPU. Ce sont des fichiers en lecture et ecriture qui utilisent des mots de quatre octets. Ecrire dans un de ces fichiers declenche une interruption sur le SPU. La valeur ecrite dans le fichier de signalisation peut etre lue depuis le SPU au travers d'un canal de lecture ou par l'espace utilisateur sur l'hote grace au fichier. Les operations possibles sur un fichier signal1 ou signal2 ouvert sont : read(2) Si count est plus petit que quatre, read(2) renvoie -1 et positionne errno a EINVAL. Sinon, une valeur de quatre octets est placee dans le tampon de donnees ; c'est la valeur actuelle du registre de notification du signal indique. write(2) Si count est plus petit que quatre, write(2) renvoie -1 et positionne errno a EINVAL. Sinon, une valeur de quatre octets est copiee depuis le tampon de donnees et met a jour la valeur du registre de notification du signal indique. Le registre de notification du signal sera soit remplace par les donnees fournies en entree ou sera mis a jour par un OU bit a bit de l'ancienne valeur et des donnees fournies en entree, en fonction du contenu des fichiers signal1_type ou signal2_type respectivement. /signal1_type /signal2_type Ces deux fichiers changent le comportement des fichiers de notification signal1 et signal2. Ils contiennent une chaine ASCII numerique qui est lue comme "1" ou "0". Dans le mode 0 (remplacement), le materiel remplace le contenu du canal du signal avec la donnee qu'on y ecrit. Dans le mode 1 (OU logique), le materiel accumule les bits qui y sont ecrits au fur et a mesure. Les operations possibles sur un fichier signal1_type ou signal2_type sont : read(2) Quand le parametre count fourni a l'appel read(2) est plus petit que la longueur necessaire pour la valeur du chiffre (plus un caractere de fin de ligne), les lectures suivantes sur le meme descripteur de fichier completeront la chaine. Quand une chaine complete a ete lue, les lectures qui suivent ne renvoient aucun octet et un nouveau descripteur de fichier doit etre ouvert pour lire une nouvelle valeur. write(2) Un appel a write(2) sur le fichier definit le registre a la valeur fournie dans la chaine. La chaine est analysee du debut jusqu'au premier caractere non numerique ou jusqu'a la fin du tampon. Les ecritures suivantes sur le meme descripteur de fichier remplaceront les precedentes ecritures. /mbox_info /ibox_info /wbox_info /dma_into /proxydma_info Read-only files that contain the saved state of the SPU mailboxes and DMA queues. This allows the SPU status to be inspected, mainly for debugging. The mbox_info and ibox_info files each contain the four-byte mailbox message that has been written by the SPU. If no message has been written to these mailboxes, then contents of these files is undefined. The mbox_stat, ibox_stat, and wbox_stat files contain the available message count. Le fichier wbox_info contient un tableau de messages de 4 octets qui ont ete envoyes a le SPU. Sur les machines CBEA actuelles, le tableau a une longueur de 4 elements, ainsi, on peut lire jusqu'a 4 * 4 = 16 octets. Si une entree de file de boite a lettres est vide, les octets lus dans l'emplacement correspondant sont indetermines. Le fichier dma_info contient le contenu de la file DMA du MFC du SPU, represente par la structure suivante : struct spu_dma_info { uint64_t dma_info_type; uint64_t dma_info_mask; uint64_t dma_info_status; uint64_t dma_info_stall_and_notify; uint64_t dma_info_atomic_command_status; struct mfc_cq_sr dma_info_command_data[16]; }; Le dernier membre de cette structure de donnees est la file DMA reelle contenant 16 entrees. La structure mfc_cq_sr est definie ainsi : struct mfc_cq_sr { uint64_t mfc_cq_data0_RW; uint64_t mfc_cq_data1_RW; uint64_t mfc_cq_data2_RW; uint64_t mfc_cq_data3_RW; }; Le fichier proxydma_info contient des informations similaires mais decrit la file DMA proxy (c'est-a-dire, les DMA inities par des entites exterieures au SPU). Le fichier a le format suivant : struct spu_proxydma_info { uint64_t proxydma_info_type; uint64_t proxydma_info_mask; uint64_t proxydma_info_status; struct mfc_cq_sr proxydma_info_command_data[8]; }; L'acces a ces fichiers necessite que le contexte SPU ne soit pas ordonnance ; une utilisation frequente serait inefficace. Ces fichiers ne doivent pas etre utilises dans l'execution normale d'un programme. Ces fichiers n'existent pas dans les contextes crees avec l'attribut SPU_CREATE_NOSCHED. /cntl Ce fichier fournit un acces aux registres de controle d'execution et d'etat du SPU sous forme d'une chaine ASCII. Les operations suivantes sont prises en charge : read(2) La lecture du fichier cntl renverra une chaine ASCCI contenant la valeur hexadecimale du registre d'etat du SPU. write(2) L'ecriture dans le fichier cntl definira le registre de controle d'execution du contexte du SPU. /mfc Fournit un acces au controleur de flux memoire (MFC) du SPU. Une lecture de ce fichier renvoie le contenu du registre d'etat de balise MFC du SPU et une ecriture dans le fichier initie un DMA du MFC. Les operations suivantes sont prises en charge : write(2) L'ecriture dans ce fichier necessite d'etre dans le format d'une commande DMA du MFC defini ainsi : struct mfc_dma_command { int32_t pad; /* reserve */ uint32_t lsa; /* adresse de stockage local */ uint64_t ea; /* adresse effective */ uint16_t size; /* taille de transfert */ uint16_t tag; /* attribut de commande */ uint16_t class; /* identifiant de la classe */ uint16_t cmd; /* opcode de la commande */ }; Les ecritures doivent avoir une taille d'exactement sizeof(struct mfc_dma_command) octets. La commande sera envoyee a la file proxy MFC du SPU et l'attribut enregistre dans le noyau (voir ci-dessous). read(2) Lire le contenu du registre d'etat de l'attribut. Si le fichier est ouvert en mode bloquant (c'est-a-dire, sans O_NONBLOCK), la lecture bloquera jusqu'a ce qu'une balise DMA (comme effectue par une ecriture precedente) soit achevee. En mode non bloquant, le registre d'etat de l'attribut MFC sera renvoye sans attente. poll(2) Appeler poll(2) sur le fichier mfc bloquera jusqu'a ce qu'un nouveau DMA puisse etre demarre (en verifiant POLLOUT) ou jusqu'a ce qu'un DMA demarre precedemment (en verifiant POLLIN) se soit acheve. /mss Fournit un acces a la fonctionnalite de synchronisation multisource (MSS) MFC. En effectuant un mmap(2) sur ce fichier, les processus peuvent acceder a la zone MSS du SPU. Les operations suivantes sont gerees : mmap(2) La projection de mss dans l'espace d'adressage du processus donne acces a la zone MSS du SPU depuis l'espace d'adressage du processus. Seules les projections MAP_SHARED sont autorisees. /psmap Fournit un acces a l'ensemble de la projection d'etat de problemes du SPU. Les applications peuvent utiliser cette zone pour interfacer le SPU plutot que d'ecrire dans les fichiers individuels des registres sur le systeme de fichiers spufs. Les operations suivantes sont gerees : mmap(2) La projection de psmap donne un acces direct a un processus vers la zone d'etat des problemes du SPU. Seules les projections MAP_SHARED sont autorisees. /phys-id Fichier en lecture seule contenant le nombre de SPU physiques sur lesquelles s'executent le contexte SPU. Lorsque le contexte n'est pas en cours d'execution, ce fichier contient la chaine << -1 >>. Le nombre de SPU physiques est fourni sous forme d'une chaine ASCII hexadecimale. /object-id Permet aux applications de stocker (ou recuperer) un idendifiant 64 bits dans le contexte. Cet identifiant est utilise plus tard par les outils de profilage pour identifier de maniere unique le contexte. write(2) En ecrivant une valeur hexadecimale ASCII dans ce fichier, les applications peuvent definir l'identifiant d'objet du contexte SPU. Toute valeur precedente de l'identifiant d'objet est ecrasee. read(2) La lecture de ce fichier fournit une chaine hexadecimale ASCII representant l'identifiant d'objet de ce contexte SPU. EXEMPLES To automatically mount(8) the SPU filesystem when booting, at the location /spu chosen by the user, put this line into the fstab(5) configuration file: none /spu spufs gid=spu 0 0 VOIR AUSSI close(2), spu_create(2), spu_run(2), capabilities(7) The Cell Broadband Engine Architecture (CBEA) specification TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier et David Prevot Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 spufs(7)