Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       set_mempolicy  -  Configurer  la politique de la mémoire NUMA par défaut pour un thread et
       ses enfants

SYNOPSIS

       #include <numaif.h>

       long set_mempolicy(int mode, const unsigned long *nodemask,
                          unsigned long maxnode);

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

DESCRIPTION

       set_mempolicy() définit la politique de la mémoire NUMA du thread appelant,  qui  consiste
       en  un  mode  de  politique  et  zéro  ou plusieurs nœuds, aux valeurs spécifiées dans les
       arguments mode, nodemask et maxnode.

       Une machine NUMA a différents contrôleurs mémoire à différentes distances des  processeurs
       particuliers.  La politique de la mémoire définit à partir de quel nœud la mémoire pour ce
       thread sera allouée.

       Cet appel système définit la politique par défaut pour le thread. La politique  de  thread
       gouverne  l'allocation  de page dans l'espace adressable du processus en dehors des plages
       mémoire contrôlées par une politique plus spécifique définie par mbind(2). La politique de
       thread par défaut contrôle également l'allocation de toute page pour les fichiers projetés
       en mémoire en utilisant l'appel système mmap(2) avec l'attribut MAP_PRIVATE, qui n’est lue
       (chargée) que par le thread, et pour les fichiers projetés en mémoire en utilisant l'appel
       mmap(2) avec l'attribut MAP_SHARED, quel  que  soit  le  type  d'accès.  La  politique  ne
       s'applique  que  lorsqu'une  nouvelle  page  est  allouée  pour le thread. Pour la mémoire
       anonyme, cela est fait lorsque la page est modifiée pour la première fois par le thread.

       Le paramètre mode  doit  spécifier  l'un  des  attributs  parmi  MPOL_DEFAULT,  MPOL_BIND,
       MPOL_INTERLEAVE,  MPOL_PREFERRED  et  MPOL_LOCAL (qui sont décrits en détails ci-dessous).
       Toutes les modes de politique excepté MPOL_DEFAULT nécessitent  que  l'appelant  spécifie,
       dans le paramètre nodemask, le ou les nœuds auxquels s'appliquent le mode.

       L'argument mode peut aussi contenir des attributs optionnels. Les valeurs possibles sont :

       MPOL_F_STATIC_NODES (depuis Linux 2.6.26)
              Une  valeur non vide de nodemask indique des identifiants de nœuds physiques. Linux
              ne va pas recalculer le nodemask quand le processus est déplacé vers un contexte de
              processeurs  différent,  ni quand l'ensemble des nœuds autorisés par le contexte du
              processus actuel est modifié.

       MPOL_F_RELATIVE_NODES (depuis Linux 2.6.26)
              Un paramètre nodemask non vide  indique  les  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 vers un masque de  bits  d'identifiants  de  nœuds  qui  contient  jusqu'à
       maxnode  bits.  La  taille  du  masque  de  bits  est  arrondie  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 une valeur de  nodemask  est  nécessaire,  elle  doit  contenir  au  moins  un  nœud
       actuellement  disponible  et  autorisé  par  le  contexte du processus actuel (à moins que
       l'attribut MPOL_F_STATIC_NODES ne soit spécifié),  et  qui  contient  de  la  mémoire.  Si
       l'attribut  MPOL_F_STATIC_NODES est mis dans mode et si un nodemask nécessaire ne contient
       aucun nœud autorisé par le contexte du processus actuel, la politique pour la mémoire  est
       forcée à allocation locale (local allocation). La politique sera réellement modifiée, sauf
       si le contexte du processus actuel contient au moins un des nœuds spécifiés par nodemask.

       L'argument mode doit inclure une des valeurs suivantes :

       MPOL_DEFAULT
              Ce mode indique que toute politique de mémoire du thread autre que celle par défaut
              doit  être  supprimée,  afin  que  la  politique  de  mémoire se « rabatte » sur la
              politique par défaut du système. La politique par défaut  du  système  est  « local
              allocation »,  c'est-à-dire  allouer  la  mémoire  sur  le nœud du processeur qui a
              déclenché l'allocation. nodemask doit  être  spécifié  comme  NULL.  Si  le  « nœud
              local »  ne  contient  pas  de  mémoire  libre,  le système tentera d'allouer de la
              mémoire à partir d'un nœud « à proximité ».

       MPOL_BIND
              Ce mode définit une politique stricte qui restreint l'allocation mémoire aux  nœuds
              spécifié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 nœud 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.

       MPOL_INTERLEAVE
              Ce  mode  entrelace  les  allocations  de  pages à travers les nœuds spécifiés dans
              nodemask dans l'ordre de l'identifiant numérique de nœud. Cela  optimise  la  bande
              passante au lieu de la latence en étalant les accès pages et mémoires à ces pages à
              travers plusieurs nœuds. Toutefois, les accès à une seule page seront limités à  la
              bande passante mémoire d'un seul nœud.

       MPOL_PREFERRED
              Ce  mode définit le nœud préféré pour l'allocation. Le noyau essaiera d'allouer des
              pages d'abord à partir de ce nœud et se repliera sur  des  nœuds  voisins  s'il  ne
              reste  que peu de mémoire libre sur le nœud préféré. Si nodemask spécifie plus d'un
              identifiant de nœud, le premier nœud du masque sera choisi comme le  nœud  préféré.
              Si  les  arguments  nodemask  et  maxnode  spécifient l'ensemble vide, la politique
              indique « local allocation » (comme la politique  par  défaut  du  système  abordée
              ci-dessus).

       MPOL_LOCAL (depuis Linux 3.8)
              Ce  mode  indique  « local  allocation » ;  la  mémoire  est allouée sur le nœud du
              processeur qui  a  déclenché  l'allocation  (le  « local  node »).  Les  paramètres
              nodemask  et  maxnode  doivent  indiquer  l'ensemble vide. Si le « local node » est
              faible en mémoire, le noyau essaiera d'allouer de  la  mémoire  à  partir  d'autres
              nœuds. Le noyau allouera de la mémoire à partir du « local node » à chaque fois que
              de la mémoire dans ce nœud sera disponible. Si le « local node » n'est pas autorisé
              par le contexte de l’ensemble de processeurs actuel du processus, le noyau essaiera
              d'allouer de la mémoire à partir d'autres nœuds. Le noyau allouera de la mémoire  à
              partir  du  « local  node »  à  chaque fois que ce sera autorisé par le contexte de
              l’ensemble de processeurs actuel du processus.

       La politique mémoire de thread est préservée au travers d'un execve(2)  et  est  récupérée
       par les processus enfant créés avec fork(2) ou clone(2).

VALEUR RENVOYÉE

       S'il  réussit,  set_mempolicy()   renvoie 0 ; s'il échoue, il renvoie -1 et écrit errno en
       conséquence.

ERREURS

       EFAULT Une partie de la plage mémoire spécifiée par nodemask et maxnode pointe  en  dehors
              de votre espace d'adressage accessible.

       EINVAL mode  n'est  pas  valable. Ou, mode est MPOL_DEFAULT et nodemask n'est pas vide, ou
              mode est MPOL_BIND ou MPOL_INTERLEAVE et nodemask est vide.  Ou,  maxnode  spécifie
              plus d'une page de bits. Ou, nodemask spécifie un ou plusieurs identifiants de nœud
              qui sont plus grands que l'identifiant maximal de nœud pris en charge. Ou aucun des
              identifiants  de  nœuds spécifiés par nodemask ne sont disponibles et autorisés par
              le contexte en cours d’ensemble de processeurs du  processus  ou  aucun  des  nœuds
              spécifiés   ne  contient  de  mémoire.  Ou  l’argument  mode  spécifie  à  la  fois
              MPOL_F_STATIC_NODES et MPOL_F_RELATIVE_NODES.

       ENOMEM La mémoire disponible du noyau n'était pas suffisante.

VERSIONS

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

CONFORMITÉ

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

NOTES

       La politique de mémoire n'est pas mémorisée si la page est  transférée.  Lorsqu'une  telle
       page  est  réimportée  en  mémoire,  elle  utilisera la politique du thread ou de la plage
       mémoire qui était effective au moment où la page est allouée.

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

VOIR AUSSI

       get_mempolicy(2), getcpu(2), mbind(2), mmap(2), numa(3), cpuset(7), numa(7), numactl(8)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à debian-l10n-french@lists.debian.org ⟨⟩.