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

NOM

       mbind - Fixer la politique memoire pour une zone de memoire

SYNOPSIS

       #include <numaif.h>

       int mbind(void *addr, unsigned long len, int mode,
                 unsigned long *nodemask, unsigned long maxnode,
                 unsigned flags);

       Effectuez l'edition des liens avec l'option -lnuma.

DESCRIPTION

       mbind() configure la politique memoire NUMA, qui consiste en un mode de
       politique et  zero  ou  plusieurs  noeuds,  pour  l'intervalle  memoire
       demarrant  a  addr  et  s'etalant  sur len octets. La politique memoire
       definit a partir de quel noeud la memoire sera allouee.

       Si la plage memoire specifiee par les parametres addr et len inclut une
       region  << anonyme >>  de  memoire  (c'est-a-dire une region de memoire
       creee avec l'appel systeme mmap(2) et l'attribut MAP_ANONYMOUS)  ou  un
       fichier  de  memoire  projetee,  projection  creee en utilisant l'appel
       systeme mmap(2) et l'attribut MAP_PRIVATE, les pages  seront  seulement
       allouees  conformement  a  la politique specifiee lorsque l'application
       ecrit [stocke] dans la  page.  Pour  les  regions  anonymes,  un  acces
       initial  en  lecture utilisera une page partagee du noyau contenant des
       zeros. Pour un fichier projete avec MAP_PRIVATE, un  acces  initial  en
       lecture  allouera des pages conformement a la politique de processus du
       processus qui a fait que cette page ait ete allouee. Cela peut  ne  pas
       etre le processus qui a appele mbind().

       La  politique  specifiee  sera ignoree pour toute projection MAP_SHARED
       dans la plage memoire specifiee.  Plutot,  les  pages  seront  allouees
       conformement a la politique de processus du processus qui a fait que la
       page ait ete allouee. Cela peut ne pas etre le processus qui  a  appele
       mbind().

       Si  la plage de memoire specifiee inclut une region de memoire partagee
       creee avec l'appel systeme shmget(2) et attachee avec  l'appel  systeme
       shmat(2),  les  pages  allouees  pour  la  region de memoire anonyme ou
       partagee seront allouees conformement a la politique specifiee, sans se
       soucier  de  quel  processus  attache  au  segment de memoire partage a
       provoque l'allocation. Si toutefois la region de memoire partagee a ete
       creee  avec  l'attribut  SHM_HUGETLB, les grosses pages seront allouees
       conformement a la politique  specifiee  seulement  si  l'allocation  de
       pages  est  provoquee  par le processus qui a appele mbind() pour cette
       region.

       Par defaut, mbind() n'a d'effet que sur les nouvelles allocations ;  si
       des  pages  dans l'intervalle ont deja ete accedees avant de configurer
       la politique, alors la politique n'a pas d'effet. Ce  comportement  par
       defaut   peut   etre   ecrase   par   les   attributs  MPOL_MF_MOVE  et
       MPOL_MF_MOVE_ALL decrits plus loin.

       Le parametre mode doit specifier l'un des attributs parmi MPOL_DEFAULT,
       MPOL_BIND,  MPOL_INTERLEAVE  et  MPOL_PREFERRED.  Toutes  les  modes de
       politique excepte MPOL_DEFAULT  necessitent  que  l'appelant  specifie,
       dans le parametre nodemask, les noeuds auxquels s'appliquent le mode.

       Le  parametre mode peut aussi inclure un drapeau de mode optionnel. Les
       drapeaux de mode pris en charges sont :

       MPOL_F_STATIC_NODES (depuis Linux 2.6.26)
              Un parametre nodemask non  vide  indique  des  identifiants  des
              noeuds  physiques.  Linux  ne  reassocie  pas  nodemask quand le
              processus change de contexte d'ensemble de processeurs ou  apres
              une  modifications  de  l'ensemble  de  noeuds autorises pour le
              contexte  de  l'ensemble  de  processeurs  en  cours   pour   le
              processus.

       MPOL_F_RELATIVE_NODES (depuis Linux 2.6.26)
              Un  parametre  nodemask  non  vide  indique des identifiants des
              noeuds  relatifs  a  l'ensemble  des  identifiants   de   noeuds
              autorises pour le contexte de l'ensemble de processeurs en cours
              pour le processus.

       nodemask pointe sur un masque de  bits  qui  contient  jusqu'a  maxnode
       bits.  La taille du masque de bits est arrondi au multiple superieur de
       sizeof(unsigned long), mais le noyau n'utilisera  que  jusqu'a  maxnode
       bits.  Une  valeur  NULL  pour  nodemask  ou une valeur maxnode de zero
       indique un ensemble vide de noeuds. Si la valeur de maxnode  est  zero,
       l'argument  nodemask  est  ignore. Quand un nodemask est exige, il doit
       contenir au moins un noeud de connecte, autorises dans le  contexte  de
       l'ensemble de processeurs du processus appelant (a moins que le drapeau
       MPOL_F_STATIC_NODES ne soit fourni) et doit contenir de la memoire.

       Le mode MPOL_DEFAULT demande a ce que toute politique n'etant  pas  une
       politique  par defaut soit retiree, ce qui restaure le comportement par
       defaut. Lorsqu'il est applique a une plage memoire  via  mbind(),  cela
       signifie  d'utiliser  la  politique du processus qui peut etre modifiee
       avec set_mempolicy(2). Si le mode de  la  politique  de  processus  est
       egalement  MPOL_DEFAULT,  la  politique  par  defaut  du  systeme  sera
       utilisee. La politique par defaut du systeme alloue des  pages  sur  le
       noeud  de  la  CPU qui a declenche l'allocation. Pour MPOL_DEFAULT, les
       parametres nodemask et maxnode doivent  specifier  l'ensemble  vide  de
       noeuds.

       Le   mode  MPOL_BIND  specifie  une  politique  stricte  qui  restreint
       l'allocation memoire aux noeuds indiques  dans  nodemask.  Si  nodemask
       indique  plus  d'un noeud, les allocations de pages se feront d'abord a
       partir du noeud dont l'identifiant numerique est le plus petit  jusqu'a
       ce  que ce noeud ne contienne plus de memoire libre. Les allocations se
       feront ensuite a partir du node dont l'identifiant est le prochain plus
       grand  specifie  dans nodemask et ainsi de suite jusqu'a ce que plus un
       seul noeud indique ne contienne de  memoire  libre.  Il  n'y  aura  pas
       d'allocation de pages a partir de noeuds non indiques dans nodemask.

       Le  mode  MPOL_INTERLEAVE  specifie  que  les allocations de pages sont
       entrelacees a travers l'ensemble de  noeuds  specifies  dans  nodemask.
       Cela  optimise  la  bande passante au lieu de la latence en etalant les
       pages et l'acces memoires a ces pages a travers plusieurs noeuds.  Pour
       etre  efficace, la zone memoire doit etre relativement grande, au moins
       1 Mo ou plus avec un modele d'acces assez uniforme.  Les  acces  a  une
       unique page de la zone seront toujours limites a la bande passante d'un
       seul noeud.

       MPOL_PREFERRED fixe le noeud prefere pour  les  allocations.  Le  noyau
       essaiera  d'abord  d'allouer  sur  ce  noeud,  avant de ce rabattre sur
       d'autres noeuds si  celui-ci  n'a  plus  assez  de  memoire  libre.  Si
       nodemask  precise  plus  d'un identifiant de noeud, le premier noeud du
       masque sera choisi comme le noeud prefere. Si les  parametres  nodemask
       et  maxnode  indique  un  ensemble  vide, la memoire est allouee sur le
       noeud du CPU  qui  a  declenche  l'allocation.  C'est  la  seule  facon
       d'indiquer  une  << allocation  locale >>  pour  une plage memoire avec
       mbind().

       Si l'option MPOL_MF_STRICT est passee dans flags et si policy n'est pas
       MPOL_DEFAULT,  l'appel echoue avec l'erreur EIO si les pages existantes
       dans la projection ne suivent pas la politique.

       Si MPOL_MF_MOVE est passe dans flags, le  noyau  essaiera  de  deplacer
       toutes  les  pages de la projection pour qu'elles suivent la politique.
       Les pages partagees avec d'autres processus ne sont pas  deplacees.  Si
       MPOL_MF_STRICT  est  egalement  indique, l'appel echouera avec l'erreur
       EIO si certaines pages ne peuvent pas etre deplacees.

       Si MPOL_MF_MOVE_ALL est indique dans flags, alors le noyau essaiera  de
       deplacer  toutes les pages de la projection, meme si d'autres processus
       les utilisent. Le processus appelant doit  etre  privilegie  (avoir  la
       capacite  CAP_SYS_NICE)  pour  utiliser cette option. Si MPOL_MF_STRICT
       est egalement utilise, l'appel renverra l'erreur EIO si certaines pages
       ne peuvent pas etre deplacees.

VALEUR RENVOY'EE

       S'il  reussit,  mbind() renvoie zero. En cas d'erreur, il renvoie -1 et
       remplit errno avec la valeur d'erreur.

ERREURS

       EFAULT Une partie ou toute la plage memoire specifiee par  nodemask  et
              maxnode pointe en dehors de votre espace d'adressage accessible.
              Ou il  y  a  un  trou  non  projete  dans  l'intervalle  memoire
              specifie.

       EINVAL Une  valeur  non valable a ete specifiee pour flags ou mode ; ou
              addr + len est plus petite que  addr ;  ou  addr  n'est  pas  un
              multiple de la taille de page systeme. Ou, mode est MPOL_DEFAULT
              et nodemask specifiait un ensemble  non  vide ;  ou  mode  etait
              MPOL_BIND ou MPOL_INTERLEAVE et le masque de noeuds nodemask est
              vide. Ou, maxnode depasse une limite imposee par le  noyau.  Ou,
              nodemask specifie un ou plusieurs identifiants de noeud qui sont
              plus grands que l'identifiant maximum de noeud pris  en  charge.
              Ou  aucun  des  identifiants de noeuds specifies par nodemask ne
              sont connectes et autorises dans le contexte  de  l'ensemble  de
              processeurs du processus appelant, ou aucun des noeuds specifies
              ne contient de memoire. Ou le parametre mode indiquait a la fois
              MPOL_F_STATIC_NODES et MPOL_F_RELATIVE_NODES.

       EIO    MPOL_MF_STRICT  a  ete  utilise et une page existante etait deja
              sur un noeud ne suivant pas la politique ; ou soit  MPOL_MF_MOVE
              soit  MPOL_MF_MOVE_ALL  a  ete  specifie et le noyau n'a pas ete
              capable de deplacer toutes les pages existantes dans la plage.

       ENOMEM Pas assez de memoire pour le noyau.

       EPERM  Le  parametre  flags  inclus  l'attribut   MPOL_MF_MOVE_ALL   et
              l'appelant n'a pas le privilege CAP_SYS_NICE.

VERSIONS

       L'appel  systeme  mbind()  a  ete ajoute au noyau Linux dans la version
       2.6.7.

CONFORMIT'E

       Cet appel systeme est specifique a Linux.

NOTES

       Pour des informations sur la prise en  charge  par  des  bibliotheques,
       consultez numa(7).

       La  politique  NUMA  n'est  pas supportee sur les plages de fichiers de
       memoire projetee qui ont ete projetees avec l'attribut MAP_SHARED.

       Le mode MPOL_DEFAULT peut avoir des effets differents  sur  mbind()  et
       sur   set_mempolicy(2).   Lorsque   MPOL_DEFAULT   est   specifie  pour
       set_mempolicy(2), la politique du processus est remise a  la  politique
       par  defaut du systeme ou l'allocation locale. Lorsque MPOL_DEFAULT est
       specifie pour une plage de memoire utilisant mbind(), toutes les  pages
       allouees  par  la  suite  pour  cette plage utiliseront la politique du
       processus telle  qu'elle  a  ete  definie  par  set_mempolicy(2).  Cela
       supprime  de  maniere  effective  la  politique  explicite  de la plage
       specifiee, ce qui peut eventuellement remettre une politique autre  que
       celle   par   defaut.  Pour  choisir  explicitement  une  << allocation
       locale >> pour une plage memoire, specifiez  mode  avec  MPOL_PREFERRED
       avec  un ensemble vide de noeuds. Cette methode fonctionnera aussi avec
       set_mempolicy(2).

       La gestion de politique pour les pages immenses a ete ajoutee  dans  le
       noyau  2.6.16.  Pour que la politique d'entrelacement soit efficace sur
       les projections de pages immenses, la taille de la  zone  memoire  doit
       etre au moins de dizaines de megaoctets.

       MPOL_MF_STRICT est ignore sur les projections de pages immenses.

       MPOL_MF_MOVE  et  MPOL_MF_MOVE_ALL  ne  sont disponibles qu'a partir de
       Linux 2.6.16.

VOIR AUSSI

       get_mempolicy(2),  getcpu(2),  mmap(2),   set_mempolicy(2),   shmat(2),
       shmget(2), numa(3), cpuset(7), numa(7), numactl(8)

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

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

Linux                            15 aout 2008                         MBIND(2)