Provided by: manpages-fr-dev_3.57d1p1-1_all bug

NOM

       pthread_setaffinity_np, pthread_getaffinity_np - Définir et obtenir l'affinité CPU d'un thread

SYNOPSIS

       #define _GNU_SOURCE             /* Consultez feature_test_macros(7) */
       #include <pthread.h>

       int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
                                  const cpu_set_t *cpuset);
       int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize,
                                  cpu_set_t *cpuset);

       Compilez et effectuez l'édition des liens avec l'option -pthread.

DESCRIPTION

       La  fonction  pthread_setaffinity_np()  définit  le  masque  d'affinité  CPU du thread thread comme étant
       l'ensemble de CPU pointé par cpuset. Si l'appel réussit et que le thread n'est pas en  cours  d'exécution
       sur un des CPU de cpuset, alors il est déplacé sur un de ces CPU.

       La  fonction pthread_getaffinity_np() renvoie, dans le tampon pointé par cpuset, le masque d'affinité CPU
       du thread thread.

       Pour plus de détails sur les masques d'affinité CPU, consultez sched_setaffinity(2). Pour une description
       d'un jeu de macros qui peuvent être utilisées pour manipuler et inspecter des ensembles de CPU, consultez
       CPU_SET(3).

       Le paramètre cpusetsize est la longueur  (en  octets)  du  tampon  pointé  par  cpuset.  Typiquement,  ce
       paramètre  sera  sizeof  (cpu_set_t) (il peut prendre d'autres valeurs, si on utilise les macros décrites
       dans CPU_SET(3) pour allouer dynamiquement un ensemble de CPU).

VALEUR RENVOYÉE

       En cas de réussite, ces fonctions renvoient 0 ; en cas d'erreur elles renvoient un  numéro  d'erreur  non
       nul.

ERREURS

       EFAULT Une adresse mémoire fournie n'est pas correcte.

       EINVAL (pthread_setaffinity_np())  Le  masque  de bits d'affinité mask ne contient pas de processeurs qui
              soit actuellement physiquement sur le système et autorisé pour le thread d'après les  restrictions
              imposées par le mécanisme d'ensembles de CPU décrit dans cpuset(7).

       EINVAL (pthread_setaffinity_np())  Le cpuset indique un CPU en dehors de l'ensemble pris en charge par le
              noyau (l'option de configuration du noyau CONFIG_NR_CPUS définie l'intervalle de  l'ensemble  pris
              en charge par le type de données du noyau utilisé pour représenter les ensembles de CPU).

       EINVAL (pthread_getaffinity_np())  cpusetsize  est  plus petit que le taille du masque d'affinité utilisé
              par le noyau.

       ESRCH  Aucun thread avec pour identifiant thread n'a pu être trouvé.

VERSIONS

       Ces fonctions sont fournies par la glibc depuis la version 2.3.4.

CONFORMITÉ

       Ces fonctions sont des extensions non standard GNU ; c'est la raison du suffixe  « _np »  (non  portable)
       dans leur nom.

NOTES

       Après  un  appel  à pthread_setaffinity_np(), l'ensemble de CPU sur lesquels le processus s'exécutera est
       l'intersection de l'ensemble spécifié dans  le  paramètre  cpuset  et  l'ensemble  des  CPU  actuellement
       présents  sur  le  système.  Le  système  peut restreindre encore plus l'ensemble des CPU sur lesquels le
       processus peut tourner si le mécanisme « cpuset », décrit dans cpuset(7), est utilisé.  Ces  restrictions
       sur  le véritable ensemble de CPU sur lesquels le processus peut tourner sont imposées sans avertissement
       par le noyau.

       Ces  fonctions  sont   implémentées   en   utilisant   les   appels   système   sched_setaffinity(2)   et
       sched_getaffinity(2).

       Dans  la  glibc 2.3.3, uniquement, les versions de ces fonctions n'avaient pas de paramètre cpusetsize. À
       la place,  la  taille  de  l'ensemble  de  CPU  fourni  à  l'appel  système  sous-jacent  était  toujours
       sizeof(cpu_set_t).

       Un  nouveau  thread  créé  avec  pthread_create(3)  hérite  d'une  copie  du masque d'affinité CPU de son
       créateur.

EXEMPLE

       Dans le programme suivant, le thread principal utilise pthread_setaffinity_np() pour définir  son  masque
       d'affinité  CPU  incluant  les  CPU  0  à  7 (qui peuvent ne pas être tous présents sur le système), puis
       appelle pthread_getaffinity_np() pour vérifier le  masque  d'affinité  CPU  finalement  utilisé  pour  le
       thread.

       #define _GNU_SOURCE
       #include <pthread.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <errno.h>

       #define handle_error_en(en, msg) \
               do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

       int
       main(int argc, char *argv[])
       {
           int s, j;
           cpu_set_t cpuset;
           pthread_t thread;

           thread = pthread_self();

           /* Set affinity mask to include CPUs 0 to 7 */

           CPU_ZERO(&cpuset);
           for (j = 0; j < 8; j++)
               CPU_SET(j, &cpuset);

           s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
           if (s != 0)
               handle_error_en(s, "pthread_setaffinity_np");

           /* Check the actual affinity mask assigned to the thread */

           s = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
           if (s != 0)
               handle_error_en(s, "pthread_getaffinity_np");

           printf("Set returned by pthread_getaffinity_np() contained:\n");
           for (j = 0; j < CPU_SETSIZE; j++)
               if (CPU_ISSET(j, &cpuset))
                   printf("    CPU %d\n", j);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       sched_setaffinity(2),     sched_setscheduler(2),     pthread_attr_setaffinity_np(3),     pthread_self(3),
       sched_getcpu(3), cpuset(7), pthreads(7)

COLOPHON

       Cette page fait partie de la publication 3.57 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

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Nicolas François et l'équipe francophone de traduction de Debian (2006-2009).

       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> ».