pthread_setaffinity_np

PTHREAD_SETAFFINITY_NP(3)  Manuel du programmeur Linux PTHREAD_SETAFFINITY_NP(3)



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

       ┌──────────────────────────┬──────────────────────┬─────────┐
       │Interface                 Attribut             Valeur  │
       ├──────────────────────────┼──────────────────────┼─────────┤
       │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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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)