Provided by: manpages-fr-dev_4.13-4_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);

       Compiler et éditer les liens avec -pthreads.

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 succès, ces fonctions renvoient 0 ; en cas d'erreur, elles renvoient un code 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 fil d’exécution avec pour identifiant thread n'a pu être trouvé.

VERSIONS

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

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌───────────────────────────┬──────────────────────┬─────────┐
       │ InterfaceAttributValeur  │
       ├───────────────────────────┼──────────────────────┼─────────┤
       │ pthread_setaffinity_np(), │ Sécurité des threads │ MT-Safe │
       │ pthread_getaffinity_np()  │                      │         │
       └───────────────────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       Ces  fonctions  sont  des  extensions GNU non standard ; d'où le 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.

EXEMPLES

       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;
           cpu_set_t cpuset;
           pthread_t thread;

           thread = pthread_self();

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

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

           s = pthread_setaffinity_np(thread, sizeof(cpuset), &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(cpuset), &cpuset);
           if (s != 0)
               handle_error_en(s, "pthread_getaffinity_np");

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

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

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

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org> et Frédéric Hantrais <fhantrais@gmail.com>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       debian-l10n-french@lists.debian.org.

Linux                                            1 novembre 2020                       PTHREAD_SETAFFINITY_NP(3)