Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       pthread_setaffinity_np,  pthread_getaffinity_np  -  Definir  et obtenir
       l'affinite 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'edition des liens avec l'option -pthread.

DESCRIPTION

       La fonction pthread_setaffinity_np() definit le masque  d'affinite  CPU
       du  thread  thread  comme etant l'ensemble de CPU pointe par cpuset. Si
       l'appel reussit et que le thread n'est pas en cours d'execution sur  un
       des CPU de cpuset, alors il est deplace sur un de ces CPU.

       La fonction pthread_getaffinity_np() renvoie, dans le tampon pointe par
       cpuset, le masque d'affinite CPU du thread thread.

       Pour  plus  de  details  sur  les  masques  d'affinite  CPU,  consultez
       sched_setaffinity(2).  Pour  une  description  d'un  jeu  de macros qui
       peuvent etre utilisees pour manipuler et  inspecter  des  ensembles  de
       CPU, consultez CPU_SET(3).

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

VALEUR RENVOY'EE

       En cas de reussite, ces fonctions renvoient 0 ; en cas  d'erreur  elles
       renvoient un numero d'erreur non nul.

ERREURS

       EFAULT Une adresse memoire fournie n'est pas correcte.

       EINVAL (pthread_setaffinity_np())  Le masque de bits d'affinite mask ne
              contient pas de processeurs qui soit  actuellement  physiquement
              sur   le   systeme  et  autorise  pour  le  thread  d'apres  les
              restrictions imposees par le mecanisme d'ensembles de CPU decrit
              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 definie l'intervalle de
              l'ensemble pris en charge  par  le  type  de  donnees  du  noyau
              utilise pour representer les ensembles de CPU).

       EINVAL (pthread_getaffinity_np())  cpusetsize  est  plus  petit  que le
              taille du masque d'affinite utilise par le noyau.

       ESRCH  Aucun thread avec pour identifiant thread n'a pu etre trouve.

VERSIONS

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

CONFORMIT'E

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

NOTES

       Apres  un  appel  a  pthread_setaffinity_np(),  l'ensemble  de  CPU sur
       lesquels le processus  s'executera  est  l'intersection  de  l'ensemble
       specifie  dans  le  parametre cpuset et l'ensemble des CPU actuellement
       presents sur le  systeme.  Le  systeme  peut  restreindre  encore  plus
       l'ensemble  des  CPU  sur  lesquels  le  processus  peut  tourner si le
       mecanisme  << cpuset >>,  decrit  dans  cpuset(7),  est  utilise.   Ces
       restrictions sur le veritable ensemble de CPU sur lesquels le processus
       peut tourner sont imposees sans avertissement par le noyau.

       Ces  fonctions  sont  implementees  en  utilisant  les  appels  systeme
       sched_setaffinity(2) et sched_getaffinity(2).

       Dans  la  glibc  2.3.3,  uniquement,  les  versions  de  ces  fonctions
       n'avaient pas de  parametre  cpusetsize.  A  la  place,  la  taille  de
       l'ensemble  de  CPU fourni a l'appel systeme sous-jacent etait toujours
       sizeof(cpu_set_t).

       Un nouveau thread cree avec  pthread_create()  herite  d'une  copie  du
       masque d'affinite CPU de son createur.

EXEMPLE

       Dans    le    programme    suivant,   le   thread   principal   utilise
       pthread_setaffinity_np()  pour  definir  son  masque   d'affinite   CPU
       incluant  les  CPU  0 a 7 (qui peuvent ne pas etre tous presents sur le
       systeme), puis appelle pthread_getaffinity_np() pour verifier le masque
       d'affinite CPU finalement utilise 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_getcpu(3),      sched_setaffinity(2),      sched_setscheduler(2),
       pthread_attr_setaffinity_np(3), pthread_self(3), cpuset(7), pthreads(7)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

       Nicolas   Francois   et   l'equipe   francophone   de   traduction   de
       Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.