set_mempolicy(2) System Calls Manual set_mempolicy(2) NOM set_mempolicy - Configurer la politique de la memoire NUMA par defaut pour un thread et ses enfants BIBLIOTHEQUE Bibliotheque de regles NUMA (Non-Uniform Memory Access) (libnuma, -lnuma) SYNOPSIS #include long set_mempolicy(int mode, const unsigned long *nodemask, unsigned long maxnode); DESCRIPTION set_mempolicy() definit la politique de la memoire NUMA du thread appelant, qui consiste en un mode de politique et zero ou plusieurs noeuds, aux valeurs specifiees dans les arguments mode, nodemask et maxnode. Une machine NUMA a differents controleurs memoire a differentes distances des processeurs particuliers. La politique de la memoire definit le noeud a partir duquel la memoire est allouee pour le thread. Cet appel systeme definit la politique par defaut pour le thread. La politique de thread gouverne l'allocation de page dans l'espace adressable du processus en dehors des plages memoire controlees par une politique plus specifique definie par mbind(2). La politique de thread par defaut controle egalement l'allocation de toute page pour les fichiers projetes en memoire en utilisant l'appel systeme mmap(2) avec l'attribut MAP_PRIVATE, qui n'est lue (chargee) que par le thread, et pour les fichiers projetes en memoire en utilisant l'appel mmap(2) avec l'attribut MAP_SHARED, quel que soit le type d'acces. La politique ne s'applique que lorsqu'une nouvelle page est allouee pour le thread. Pour la memoire anonyme, cela est fait lorsque la page est modifiee pour la premiere fois par le thread. Le parametre mode doit specifier l'un des attributs parmi MPOL_DEFAULT, MPOL_BIND, MPOL_INTERLEAVE, MPOL_PREFERRED et MPOL_LOCAL (qui sont decrits en details ci-dessous). Toutes les modes de politique excepte MPOL_DEFAULT necessitent que l'appelant specifie, dans le parametre nodemask, le ou les noeuds auxquels s'appliquent le mode. L'argument mode peut aussi contenir des attributs optionnels. Les valeurs possibles sont : MPOL_F_NUMA_BALANCING (depuis Linux 5.12) Quand mode est MPOL_BIND, activer l'equilibrage NUMA du noyau pour la tache s'il est gere par le noyau. Si l'attribut n'est pas pris en charge par le noyau ou est utilise avec un autre mode que MPOL_BIND, -1 est renvoye et errno est positionne sur EINVAL. MPOL_F_RELATIVE_NODES (depuis Linux 2.6.26) Un parametre nodemask non vide indique les 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. MPOL_F_STATIC_NODES (depuis Linux 2.6.26) Une valeur non vide de nodemask indique des identifiants de noeuds physiques. Linux ne va pas recalculer le nodemask quand le processus est deplace vers un contexte de processeurs different, ni quand l'ensemble des noeuds autorises par le contexte du processus actuel est modifie. nodemask pointe vers un masque de bits d'identifiants de noeuds qui contient jusqu'a maxnode bits. La taille du masque de bits est arrondie 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 une valeur de nodemask est necessaire, elle doit contenir au moins un noeud actuellement disponible et autorise par le contexte du processus actuel (a moins que l'attribut MPOL_F_STATIC_NODES ne soit specifie), et qui contient de la memoire. Si l'attribut MPOL_F_STATIC_NODES est mis dans mode et si un nodemask necessaire ne contient aucun noeud autorise par le contexte du processus actuel, la politique pour la memoire est forcee a allocation locale (local allocation). La politique sera reellement modifiee, sauf si le contexte du processus actuel contient au moins un des noeuds specifies par nodemask. L'argument mode doit inclure une des valeurs suivantes : MPOL_DEFAULT Ce mode indique que toute politique de memoire du thread autre que celle par defaut doit etre supprimee, afin que la politique de memoire se << rabatte >> sur la politique par defaut du systeme. La politique par defaut du systeme est << local allocation >>, c'est-a-dire allouer la memoire sur le noeud du processeur qui a declenche l'allocation. nodemask doit etre specifie comme NULL. Si le << noeud local >> ne contient pas de memoire libre, le systeme tentera d'allouer de la memoire a partir d'un noeud << a proximite >>. MPOL_BIND Ce mode definit une politique stricte qui restreint l'allocation memoire aux noeuds specifies 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 noeud 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. MPOL_INTERLEAVE Ce mode entrelace les allocations de pages a travers les noeuds specifies dans nodemask dans l'ordre de l'identifiant numerique de noeud. Cela optimise la bande passante au lieu de la latence en etalant les acces pages et memoires a ces pages a travers plusieurs noeuds. Toutefois, les acces a une seule page seront limites a la bande passante memoire d'un seul noeud. MPOL_PREFERRED Ce mode definit le noeud prefere pour l'allocation. Le noyau essaiera d'allouer des pages d'abord a partir de ce noeud et se repliera sur des noeuds voisins s'il ne reste que peu de memoire libre sur le noeud prefere. Si nodemask specifie plus d'un identifiant de noeud, le premier noeud du masque sera choisi comme le noeud prefere. Si les arguments nodemask et maxnode specifient l'ensemble vide, la politique indique << local allocation >> (comme la politique par defaut du systeme abordee ci-dessus). MPOL_LOCAL (depuis Linux 3.8) Ce mode indique << local allocation >> ; la memoire est allouee sur le noeud du processeur qui a declenche l'allocation (le << local node >>). Les parametres nodemask et maxnode doivent indiquer l'ensemble vide. Si le << local node >> est faible en memoire, le noyau essaiera d'allouer de la memoire a partir d'autres noeuds. Le noyau allouera de la memoire a partir du << local node >> a chaque fois que de la memoire dans ce noeud sera disponible. Si le << local node >> n'est pas autorise par le contexte de l'ensemble de processeurs actuel du processus, le noyau essaiera d'allouer de la memoire a partir d'autres noeuds. Le noyau allouera de la memoire a partir du << local node >> a chaque fois que ce sera autorise par le contexte de l'ensemble de processeurs actuel du processus. La politique memoire de thread est preservee au travers d'un execve(2) et est recuperee par les processus enfant crees avec fork(2) ou clone(2). VALEUR RENVOYEE S'il reussit, set_mempolicy() renvoie 0 ; s'il echoue, il renvoie -1 et ecrit errno en consequence. ERREURS EFAULT Une partie de la plage memoire specifiee par nodemask et maxnode pointe en dehors de l'espace d'adressage accessible. EINVAL mode n'est pas valable. Soit mode est MPOL_DEFAULT et nodemask n'est pas vide, soit mode est MPOL_BIND ou MPOL_INTERLEAVE et nodemask est vide. Ou bien maxnode specifie plus qu'une page de bits. Ou alors nodemask specifie un ou plusieurs identifiants de noeud qui sont plus grands que l'identifiant maximal de noeud pris en charge, ou qui ne sont pas autorises dans le contexte de l'ensemble de processeurs actuel du processus, ou bien aucun des noeuds n'a de memoire. Ou alors le parametre mode specifie MPOL_F_STATIC_NODES et MPOL_F_RELATIVE_NODES. Ou alors le MPOL_F_NUMA_BALANCING n'est pas pris en charge par le noyau ou est utilise avec un autre mode que MPOL_BIND. ENOMEM La memoire disponible du noyau n'etait pas suffisante. STANDARDS Linux. HISTORIQUE Linux 2.6.7. NOTES La politique de memoire n'est pas memorisee si la page est transferee. Lorsqu'une telle page est reimportee en memoire, elle utilisera la politique du thread ou de la plage memoire qui etait effective au moment ou la page est allouee. Pour des informations sur la prise en charge des bibliotheques, consultez numa(7). VOIR AUSSI get_mempolicy(2), getcpu(2), mbind(2), mmap(2), numa(3), cpuset(7), numa(7), numactl(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 set_mempolicy(2)