Loading

NOM

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

SYNOPSIS

       #define _GNU_SOURCE
       #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);

       Le  masque  d’affinité  CPU  d’un  processus  détermine  l’ensemble  de
       processeurs  sur  lesquels  il  est  susceptible  de s’exécuter. Sur un
       système  multiprocesseur,  fixer  le  masque  d’affinité   CPU   permet
       d’obtenir  une  meilleure performance. Par exemple, en dédiant un CPU à
       un processus particulier (c’est-à-dire fixer le masque d’affinité de ce
       processus  pour  indiquer un seul CPU, et fixer le masque d’affinité de
       tous les autres  processus  pour  exclure  ce  CPU),  il  est  possible
       d’assurer   une   vitesse   d’exécution  maximale  pour  ce  processus.
       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
       processus 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()  fixe  le  masque  d’affinité CPU du processus dont
       l’identifiant est pid à la valeur donnée par mask. Si  pid  est  0,  le
       processus 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  processus  indiqué  par  pid  n’est  pas  actuellement en cours
       d’exécution sur l’un des CPU spécifiés dans mask,  alors  ce  processus
       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 processus pid.  L’argument
       cpusetsize  indique la taille (en octets) de mask. Si pid vaut zéro, le
       masque du processus 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 processus  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   processus   appelant  n’a  pas  les
              privilèges appropriés. L’appelant doit  avoir  un  UID  effectif
              égal à l’UID effectif ou réel du processus identifié par pid, ou
              avoir la capacité CAP_SYS_NICE.

       ESRCH  Le processus numéro pid n’existe pas.

VERSIONS

       Les appels système d’affinité ont été introduit 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
       processus 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  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.

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

       Le  masque  d’affinité  est  en réalité 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 fixera l’attribut pour le  thread
       appelant,  et  une  valeur  égale à celle renvoyée par getpid(2) fixera
       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

       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),              sched_getcpu(3),              capabilities(7),
       pthread_setaffinity_np(3), cpuset(7)

COLOPHON

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

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

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