Man page - set_mempolicy(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

set_mempolicy

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
VOIR AUSSI
TRADUCTION

NOM

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

BIBLIOTHÈQUE

BibliothĂšque de rĂšgles NUMA (Non-Uniform Memory Access) ( libnuma , -lnuma )

SYNOPSIS

#include <numaif.h>

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

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 le nƓud Ă  partir duquel la mĂ©moire est allouĂ©e pour le thread.

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_WEIGHTED_INTERLEAVE , MPOL_PREFERRED , et MPOL_LOCAL (qui sont dĂ©crits en dĂ©tails ci-dessous). Tous 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_NUMA_BALANCING
(depuis Linux 5.12)

Quand mode est MPOL_BIND , activer l’équilibrage NUMA du noyau pour la tĂąche s’il est gĂ©rĂ© par le noyau. Si l’attribut n’est pas pris en charge par le noyau ou est utilisĂ© avec un autre mode que MPOL_BIND , -1 est renvoyĂ© et errno est positionnĂ© sur EINVAL .

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.

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Ă©.

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 .

Le paramÚtre mode doit contenir 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_WEIGHTED_INTERLEAVE (depuis Linux 6.9)

Ce mode entrelace les affectations de pages Ă  travers les nƓuds indiquĂ©s dans nodemask selon leur poids dans /sys/kernel/mm/mempolicy/weighted_interleave . Par exemple, si les bits 0, 2 et 5 sont positionnĂ©s dans nodemask , et si le contenu de /sys/kernel/mm/mempolicy/weighted_interleave/node0 , de /sys/ ... /node2 , and /sys/ ... /node5 sont respectivement de 4, 7 et 9, les pages de cette rĂ©gion seront affectĂ©es aux nƓuds 0, 2 et 5 selon un ratio de 4:7:9.

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 l’espace d’adressage accessible.

EINVAL

mode n’est pas valable. Ou bien mode est soit MPOL_DEFAULT et nodemask n’est pas vide, soit mode est MPOL_BIND ou MPOL_INTERLEAVE et nodemask est vide. Ou bien maxnode spĂ©cifie plus d’une page de bits. Ou alors 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 nƓuds spĂ©cifiĂ© par nodemask n’est en ligne et autorisĂ© par le contexte de l’ensemble de processeurs du processus actuel, ou bien aucun des nƓuds n’a de mĂ©moire. Ou alors le paramĂštre mode spĂ©cifie 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 utilisĂ© avec un autre mode que MPOL_BIND .

ENOMEM

La mĂ©moire disponible du noyau n’était pas suffisante.

STANDARDS

Linux.

HISTORIQUE

Linux 2.6.7.

NOTES

La politique de mĂ©moire n’est pas conservĂ©e si la page est dĂ©chargĂ©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 est effective au moment oĂč la page est allouĂ©e.

Consultez numa (7) pour des informations sur la prise en charge par des bibliothĂšques.

VOIR AUSSI

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

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>, Jean-Philippe MENGUAL <jpmengual@debian.org> et Jean-Pierre Giraud <jipege@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 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 .