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

NOM

       sched_setaffinity,  sched_getaffinity - Définir et récupérer le masque d'affinité CPU d'un
       thread

SYNOPSIS

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

       int sched_setaffinity(pid_t pid, size_t cpusetsize,
                             cpu_set_t *mask);

       int sched_getaffinity(pid_t pid, size_t cpusetsize,
                             cpu_set_t *mask);

DESCRIPTION

       Le masque d'affinité CPU d'un thread détermine l'ensemble de processeurs sur  lesquels  il
       est  susceptible  de  s'exécuter.  Sur  un  système  multiprocesseur,  définir  le  masque
       d'affinité CPU permet d'obtenir une meilleure performance. Par exemple, en dédiant un  CPU
       à  un  thread  particulier  (c'est-à-dire  définir  le masque d'affinité de ce thread pour
       indiquer un seul CPU, et définir le masque d'affinité de  tous  les  autres  threads  pour
       exclure  ce  CPU),  il  est  possible  d'assurer  une vitesse d'exécution maximale pour ce
       thread. Restreindre un processus pour qu'il ne s'exécute que sur un  seul  CPU  réduit  le
       coût lié à l'invalidation du cache qui se produit lorsqu'un thread cesse de s'exécuter sur
       un CPU puis est relancé sur un autre CPU.

       Un masque d'affinité CPU est représenté par la structure cpu_set_t,  un  ensemble  de  CPU
       (« CPU  set »),  pointé  par  mask.  Des  macros  pour manipuler des ensembles de CPU sont
       décrites dans CPU_SET(3).

       sched_setaffinity() définit le masque d'affinité CPU du thread dont l'identifiant est  pid
       à  la  valeur  donnée  par  mask. Si pid est 0, le thread appelant est utilisé. L'argument
       cpusetsize est la taille (en octets) de la structure pointée par  mask.  Normalement,  cet
       argument doit être spécifié comme sizeof(cpu_set_t).

       Si  le thread indiqué par pid n'est pas actuellement en cours d'exécution sur l'un des CPU
       spécifiés dans mask, alors ce thread est migré vers l'un des CPU spécifiés dans mask.

       La fonction sched_getaffinity() écrit dans la structure  cpu_set_t  pointée  par  mask  le
       masque  de  préférences du thread pid. L'argument cpusetsize indique la taille (en octets)
       de mask. Si pid vaut zéro, le masque du thread en cours est renvoyé.

VALEUR RENVOYÉE

       sched_setaffinity() et sched_getaffinity() renvoient 0 s'ils réussissent. En cas  d'échec,
       -1 est renvoyé, et errno contient le code d'erreur.

ERREURS

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

       EINVAL 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 (sched_getaffinity()  et,  pour les noyaux antérieurs à 2.6.9, sched_setaffinity())
              cpusetsize est plus petit que la taille du masque d'affinité utilisé par le noyau.

       EPERM  (sched_setaffinity())  Le  thread  appelant  n'a  pas  les  privilèges  appropriés.
              L'appelant  doit  avoir  un  UID  effectif  égal à l'UID effectif ou réel du thread
              identifié par pid, ou avoir la capacité CAP_SYS_NICE.

       ESRCH  Le thread numéro pid n'existe pas.

VERSIONS

       Les appels  système  d'affinité  ont  été  introduits  dans  Linux  2.5.8.  Les  fonctions
       enveloppes  pour  ces appels système ont été introduites dans la glibc 2.3. Au départ, les
       interfaces de la glibc avaient un paramètre cpusetsize de type unsigned  int.  Dans  glibc
       2.3.3,  ce paramètre a été supprimé, mais il a été réintroduit dans glibc 2.3.4, avec pour
       type size_t.

CONFORMITÉ

       Ces appels système sont spécifiques à Linux.

NOTES

       Après un appel à sched_setaffinity(), l'ensemble de CPU sur lesquels le thread s'exécutera
       est  l'intersection  de  l'ensemble  spécifié dans le paramètre mask 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  thread  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
       thread peut tourner sont imposées sans avertissement par le noyau.

       sched_setscheduler(2) décrit les politiques d'ordonnancement sous Linux.

       Le  masque d'affinité est un attribut de thread, qui peut être modifié indépendamment pour
       chacun des threads d'un groupe de threads. La valeur  renvoyée  par  gettid(2)  peut  être
       passée  dans  l'argument  pid.  Spécifier  un  pid de 0 définira l'attribut pour le thread
       appelant, et une valeur égale à celle renvoyée par getpid(2) définira l'attribut  pour  le
       thread  principal  du  groupe  de thread. (Si vous utilisez l'API POSIX des threads, alors
       utilisez pthread_setaffinity_np(3) au lieu de sched_setaffinity().)

       Un processus fils créé par fork(2) hérite du masque d'affinité CPU de son père. Le  masque
       d'affinité est conservé au travers d'un execve(2).

       Cette page de manuel décrit l'interface de la glibc pour les appels liés à l'affinité CPU.
       L'interface des appels système est légèrement différente,  mask  ayant  le  type  unsigned
       long *,  montrant  le  fait  que  l'implémentation  des ensembles de CPU est en réalité un
       simple masque de bits. En cas de succès, l'appel système sched_getaffinity() brut  renvoie
       la  taille  (en octets) du type cpumask_t utilisé en interne par le noyau pour représenter
       le masque d'ensemble de CPU.

VOIR AUSSI

       taskset(1), clone(2), getcpu(2), getpriority(2), gettid(2), nice(2),
       sched_get_priority_max(2), sched_get_priority_min(2), sched_getscheduler(2),
       sched_setscheduler(2), setpriority(2), CPU_SET(3), pthread_setaffinity_np(3),
       sched_getcpu(3), capabilities(7), cpuset(7)

COLOPHON

       Cette page fait partie de la publication 3.65 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/>.

       Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
       <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau 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> ».