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

NOM

       mbind - Définir la politique mémoire pour une zone de mémoire

SYNOPSIS

       #include <numaif.h>

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

       Effectuez l'édition des liens avec l'option -lnuma.

DESCRIPTION

       mbind()  configure la politique mémoire NUMA, qui consiste en un mode de politique et zéro
       ou plusieurs nœuds, pour l'intervalle mémoire  démarrant  à  addr  et  s'étalant  sur  len
       octets. La politique mémoire définit à partir de quel nœud la mémoire sera allouée.

       Si la plage mémoire spécifiée par les paramètres addr et len inclut une région « anonyme »
       de mémoire (c'est-à-dire une région de mémoire  créée  avec  l'appel  système  mmap(2)  et
       l'attribut MAP_ANONYMOUS) ou un fichier de mémoire projetée, projection créée en utilisant
       l'appel système mmap(2) et l'attribut MAP_PRIVATE, les  pages  seront  seulement  allouées
       conformément  à  la politique spécifiée lorsque l'application écrit [stocke] dans la page.
       Pour les régions anonymes, un accès initial en lecture  utilisera  une  page  partagée  du
       noyau  contenant  des zéros. Pour un fichier projeté avec MAP_PRIVATE, un accès initial en
       lecture allouera des pages conformément à la politique de processus  du  processus  qui  a
       fait  que  cette  page  ait  été  allouée. Cela peut ne pas être le processus qui a appelé
       mbind().

       La politique spécifiée sera ignorée pour toute projection MAP_SHARED dans la plage mémoire
       spécifiée.  Plutôt,  les pages seront allouées conformément à la politique de processus du
       processus qui a fait que la page ait été allouée. Cela peut ne pas être le processus qui a
       appelé mbind().

       Si  la plage de mémoire spécifiée inclut une région de mémoire partagée créée avec l'appel
       système shmget(2) et attachée avec l'appel système shmat(2), les pages  allouées  pour  la
       région  de  mémoire  anonyme  ou  partagée  seront  allouées  conformément  à la politique
       spécifiée, sans se soucier de quel processus attaché  au  segment  de  mémoire  partagé  a
       provoqué  l'allocation.  Si  toutefois  la  région  de  mémoire  partagée a été créée avec
       l'attribut SHM_HUGETLB, les grosses pages seront  allouées  conformément  à  la  politique
       spécifiée  seulement  si l'allocation de pages est provoquée par le processus qui a appelé
       mbind() pour cette région.

       Par défaut, mbind() n'a d'effet que sur les nouvelles  allocations ;  si  des  pages  dans
       l'intervalle  ont  déjà  été accédées avant de configurer la politique, alors la politique
       n'a  pas  d'effet.  Ce  comportement  par  défaut  peut  être  écrasé  par  les  attributs
       MPOL_MF_MOVE et MPOL_MF_MOVE_ALL décrits plus loin.

       Le  paramètre  mode  doit  spécifier  l'un  des  attributs  parmi MPOL_DEFAULT, MPOL_BIND,
       MPOL_INTERLEAVE et MPOL_PREFERRED. Toutes les  modes  de  politique  excepté  MPOL_DEFAULT
       nécessitent  que  l'appelant  spécifie,  dans  le  paramètre  nodemask, les nœuds auxquels
       s'appliquent le mode.

       Le paramètre 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  paramètre nodemask non vide indique des identifiants des nœuds physiques. Linux
              ne réassocie pas nodemask quand le  processus  change  de  contexte  d'ensemble  de
              processeurs  ou  après  une  modifications de l'ensemble de nœuds autorisés pour le
              contexte de l'ensemble de processeurs en cours pour le processus.

       MPOL_F_RELATIVE_NODES (depuis Linux 2.6.26)
              Un paramètre nodemask non vide  indique  des  identifiants  des  nœuds  relatifs  à
              l'ensemble  des  identifiants  de nœuds autorisés pour le contexte de l'ensemble de
              processeurs en cours pour le processus.

       nodemask pointe sur un masque de bits qui contient jusqu'à  maxnode  bits.  La  taille  du
       masque  de  bits est arrondi au multiple supérieur de sizeof(unsigned long), mais le noyau
       n'utilisera que jusqu'à maxnode bits. Une valeur NULL pour nodemask ou une valeur  maxnode
       de  zéro  indique  un ensemble vide de nœuds. Si la valeur de maxnode est zéro, l'argument
       nodemask est ignoré. Quand un nodemask est exigé, il doit contenir au  moins  un  nœud  de
       connecté, autorisés dans le contexte de l'ensemble de processeurs du processus appelant (à
       moins que le drapeau MPOL_F_STATIC_NODES ne soit fourni) et doit contenir de la mémoire.

       Le mode MPOL_DEFAULT demande à ce que toute politique n'étant pas une politique par défaut
       soit  retirée,  ce  qui  restaure le comportement par défaut. Lorsqu'il est appliqué à une
       plage mémoire via mbind(), cela signifie d'utiliser la politique  du  processus  qui  peut
       être modifiée avec set_mempolicy(2). Si le mode de la politique de processus est également
       MPOL_DEFAULT, la politique par défaut du système sera utilisée. La politique par défaut du
       système  alloue  des  pages  sur  le  nœud  de  la  CPU qui a déclenché l'allocation. Pour
       MPOL_DEFAULT, les paramètres nodemask et maxnode  doivent  spécifier  l'ensemble  vide  de
       nœuds.

       Le  mode  MPOL_BIND  spécifie une politique stricte qui restreint l'allocation mémoire aux
       nœuds indiqués dans nodemask. Si nodemask indique plus d'un nœud, les allocations de pages
       se  feront d'abord à partir du nœud dont l'identifiant numérique est le plus petit jusqu'à
       ce que ce nœud ne contienne plus de mémoire libre. Les allocations  se  feront  ensuite  à
       partir  du  node  dont  l'identifiant est le prochain plus grand spécifié dans nodemask et
       ainsi de suite jusqu'à ce que plus un seul nœud indiqué ne contienne de mémoire libre.  Il
       n'y aura pas d'allocation de pages à partir de nœuds non indiqués dans nodemask.

       Le  mode  MPOL_INTERLEAVE spécifie que les allocations de pages sont entrelacées à travers
       l'ensemble de nœuds spécifiés dans nodemask. Cela optimise la bande passante au lieu de la
       latence  en  étalant  les pages et l'accès mémoires à ces pages à travers plusieurs nœuds.
       Pour être efficace, la zone mémoire doit être relativement grande, au moins 1 Mo  ou  plus
       avec  un  modèle  d'accès  assez  uniforme.  Les accès à une unique page de la zone seront
       toujours limités à la bande passante d'un seul nœud.

       MPOL_PREFERRED définit le nœud préféré pour les allocations.  Le  noyau  essaiera  d'abord
       d'allouer  sur ce nœud, avant de ce rabattre sur d'autres nœuds si celui‐ci n'a plus assez
       de mémoire libre. Si nodemask précise plus d'un identifiant de nœud, le  premier  nœud  du
       masque sera choisi comme le nœud préféré. Si les paramètres nodemask et maxnode indique un
       ensemble vide, la mémoire est allouée sur le nœud du CPU  qui  a  déclenché  l'allocation.
       C'est  la  seule  façon  d'indiquer  une « allocation locale » pour une plage mémoire avec
       mbind().

       Si l'option MPOL_MF_STRICT est passée dans  flags  et  si  mode  n'est  pas  MPOL_DEFAULT,
       l'appel échoue avec l'erreur EIO si les pages existantes dans la projection ne suivent pas
       la politique.

       Si MPOL_MF_MOVE est passé dans flags, le noyau essaiera de déplacer toutes les pages de la
       projection pour qu'elles suivent la politique. Les pages partagées avec d'autres processus
       ne sont pas déplacées. Si MPOL_MF_STRICT est  également  indiqué,  l'appel  échouera  avec
       l'erreur EIO si certaines pages ne peuvent pas être déplacées.

       Si MPOL_MF_MOVE_ALL est indiqué dans flags, alors le noyau essaiera de déplacer toutes les
       pages de la projection, même si d'autres processus les utilisent.  Le  processus  appelant
       doit  être  privilégié  (avoir  la  capacité  CAP_SYS_NICE) pour utiliser cette option. Si
       MPOL_MF_STRICT est également utilisé, l'appel renverra l'erreur EIO si certaines pages  ne
       peuvent pas être déplacées.

VALEUR RENVOYÉE

       S'il  réussit,  mbind() renvoie zéro. En cas d'erreur, il renvoie -1 et remplit errno avec
       la valeur d'erreur.

ERREURS

       EFAULT Une partie ou toute la plage mémoire spécifiée par nodemask et  maxnode  pointe  en
              dehors  de  votre espace d'adressage accessible. Ou il y a un trou non projeté dans
              l'intervalle mémoire spécifié.

       EINVAL Une valeur non valable a été spécifiée pour flags ou mode ; ou addr + len est  plus
              petite  que  addr ; ou addr n'est pas un multiple de la taille de page système. Ou,
              mode est MPOL_DEFAULT et nodemask spécifiait un ensemble non vide ; ou  mode  était
              MPOL_BIND  ou  MPOL_INTERLEAVE et le masque de nœuds nodemask est vide. Ou, maxnode
              dépasse une limite imposée par le noyau. Ou,  nodemask  spécifie  un  ou  plusieurs
              identifiants de nœud qui sont plus grands que l'identifiant maximum de nœud pris en
              charge. Ou aucun des identifiants de nœuds spécifiés par nodemask ne sont connectés
              et  autorisés  dans le contexte de l'ensemble de processeurs du processus appelant,
              ou aucun des nœuds spécifiés ne contient de mémoire. Ou le paramètre mode indiquait
              à la fois MPOL_F_STATIC_NODES et MPOL_F_RELATIVE_NODES.

       EIO    MPOL_MF_STRICT  a  été  utilisé  et  une  page  existante était déjà sur un nœud ne
              suivant pas la  politique ;  ou  soit  MPOL_MF_MOVE  soit  MPOL_MF_MOVE_ALL  a  été
              spécifié  et  le  noyau n'a pas été capable de déplacer toutes les pages existantes
              dans la plage.

       ENOMEM Pas assez de mémoire pour le noyau.

       EPERM  Le paramètre flags inclus l'attribut MPOL_MF_MOVE_ALL  et  l'appelant  n'a  pas  le
              privilège CAP_SYS_NICE.

VERSIONS

       L'appel système mbind() a été ajouté au noyau Linux dans la version 2.6.7.

CONFORMITÉ

       Cet appel système est spécifique à Linux.

NOTES

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

       La  politique  NUMA n'est pas supportée sur les plages de fichiers de mémoire projetée qui
       ont été projetées avec l'attribut MAP_SHARED.

       Le mode MPOL_DEFAULT peut avoir des effets différents sur mbind() et sur set_mempolicy(2).
       Lorsque  MPOL_DEFAULT  est  spécifié  pour set_mempolicy(2), la politique du processus est
       remise à la politique par défaut du système ou l'allocation locale.  Lorsque  MPOL_DEFAULT
       est spécifié pour une plage de mémoire utilisant mbind(), toutes les pages allouées par la
       suite pour cette plage utiliseront la politique du processus telle qu'elle a  été  définie
       par  set_mempolicy(2).  Cela  supprime  de  manière effective la politique explicite de la
       plage spécifiée, ce qui peut éventuellement remettre une politique  autre  que  celle  par
       défaut.  Pour  choisir  explicitement  une  « allocation  locale » pour une plage mémoire,
       spécifiez mode  avec  MPOL_PREFERRED  avec  un  ensemble  vide  de  nœuds.  Cette  méthode
       fonctionnera aussi avec set_mempolicy(2).

       La  gestion  de politique pour les pages immenses a été ajoutée 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 mémoire doit être au moins de dizaines de mégaoctets.

       MPOL_MF_STRICT est ignoré sur les projections de pages immenses.

       MPOL_MF_MOVE et MPOL_MF_MOVE_ALL ne sont disponibles qu'à 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.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> ».