focal (2) mbind.2.gz

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