Man page - mbind(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

mbind

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

NOM

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

BIBLIOTHÈQUE

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

SYNOPSIS

#include <numaif.h>

long mbind(void addr [. len ], unsigned long len , int mode ,
const unsigned long
nodemask [(. maxnode + ULONG_WIDTH - 1)
/ ULONG_WIDTH],
unsigned long
maxnode , unsigned int flags );

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 (enregistre) 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 du thread qui a fait que cette page a Ă©tĂ© allouĂ©e. Cela peut ne pas ĂȘtre le thread 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. Les pages seront plutĂŽt allouĂ©es conformĂ©ment Ă  la politique de mĂ©moire du thread qui a fait que la page a Ă©tĂ© allouĂ©e. Cela peut ne pas ĂȘtre le thread 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 du processus attachĂ© au segment de mĂ©moire partagĂ© qui 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 ; s’il y a dĂ©jĂ  eu un accĂšs aux pages dans la plage 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 , MPOL_WEIGHTED_INTERLEAVE , MPOL_PREFERRED ou 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 .

L’argument mode peut aussi contenir des attributs optionnels. Les valeurs possibles sont :
MPOL_F_NUMA_BALANCING
(depuis Linux 5.15)

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_STATIC_NODES (depuis Linux 2.6.26)

Un paramĂštre nodemask non vide indique des identifiants de nƓuds physiques. Linux ne rĂ©associe pas nodemask quand le thread change de contexte de cpuset ou aprĂšs une modification de l’ensemble de nƓuds autorisĂ©s par le contexte de cpuset en cours du thread.

MPOL_F_RELATIVE_NODES (depuis Linux 2.6.26)

Un paramĂštre nodemask non vide indique des identifiants de nƓuds relatifs Ă  l’ensemble des identifiants de nƓuds autorisĂ©s par le cpuset en cours du thread.

nodemask pointe sur un masque de bits 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 un nodemask est exigĂ©, il doit contenir au moins un nƓud de connectĂ©, autorisĂ© dans le contexte de cpuset en cours du thread appelant (Ă  moins que le drapeau MPOL_F_STATIC_NODES ne soit fourni) et doit contenir de la mĂ©moire.

Le paramÚtre mode doit contenir une des valeurs suivantes :
MPOL_DEFAULT

Ce mode 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 Ă  l’aide de mbind (), cela signifie d’utiliser la politique mĂ©moire du thread qui peut ĂȘtre dĂ©finie avec set_mempolicy (2). Si le mode de la politique de mĂ©moire du thread 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 du processeur qui a dĂ©clenchĂ© l’allocation. Pour MPOL_DEFAULT , les paramĂštres nodemask et maxnode doivent spĂ©cifier l’ensemble vide de nƓuds.

MPOL_BIND

Ce mode 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 Ă  partir du nƓud ayant assez d’espace libre et Ă©tant le plus proche de celui oĂč elles ont lieu. Il n’y aura pas d’allocation de pages Ă  partir de nƓuds non indiquĂ©s dans nodemask (avant Linux 2.6.26, les allocations de pages se faisaient d’abord Ă  partir du nƓud dont l’identifiant numĂ©rique Ă©tait le plus petit jusqu’à ce que ce nƓud ne contienne plus de mĂ©moire libre. Les allocations se faisaient ensuite Ă  partir du nƓud dont l’identifiant Ă©tait 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).

MPOL_INTERLEAVE

Ce mode 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Ă©moire Ă  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 capacitĂ© 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 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 indiquent un ensemble vide, la mĂ©moire est allouĂ©e sur le nƓud du processeur qui a dĂ©clenchĂ© l’allocation.

MPOL_LOCAL (depuis Linux 3.8)

Ce mode indique « allocation locale » ; la mĂ©moire est allouĂ©e sur le nƓud du processeur qui a dĂ©clenchĂ© l’allocation (le « nƓud local »). Les paramĂštres nodemask et maxnode doivent indiquer un ensemble vide. Si le « nƓud local » possĂšde peu de mĂ©moire libre, le noyau essaiera d’allouer de la mĂ©moire Ă  partir d’autres nƓuds. Le noyau allouera de la mĂ©moire du « nƓud local » Ă  chaque fois qu’il y en aura de disponible. Si le « nƓud local » n’est pas autorisĂ© par le contexte de cpuset actuel du thread, le noyau essaiera d’allouer de la mĂ©moire Ă  partir d’autres nƓuds. Le noyau allouera de la mĂ©moire Ă  partir du « nƓud local » Ă  chaque fois qu’il y sera autorisĂ© par le contexte de cpuset actuel du thread. Au contraire, MPOL_DEFAULT ramĂšne Ă  la politique mĂ©moire du thread (qui peut ĂȘtre dĂ©finie par set_mempolicy (2)) ; il peut s’agir d’une autre politique que l’« allocation locale ».

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 de la plage mĂ©moire ne suivent pas la politique.

Si MPOL_MF_MOVE est passĂ© dans flags , le noyau essaiera de dĂ©placer toutes les pages existantes dans la plage de mĂ©moire 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 la politique MPOL_INTERLEAVE a Ă©tĂ© spĂ©cifiĂ©e, les pages rĂ©sidant dĂ©jĂ  sur les nƓuds spĂ©cifiĂ©s ne sont pas dĂ©placĂ©s de sorte qu’ils sont entrelacĂ©s.

Si MPOL_MF_MOVE_ALL est indiquĂ© dans flags , alors le noyau essaiera de dĂ©placer toutes les pages existantes dans la plage mĂ©moire, mĂȘme si d’autres processus les utilisent. Le thread 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. Si la politique MPOL_INTERLEAVE a Ă©tĂ© spĂ©cifiĂ©e, les pages rĂ©sidant dĂ©jĂ  sur les nƓuds spĂ©cifiĂ©s ne sont pas dĂ©placĂ©s de sorte qu’ils sont entrelacĂ©s.

VALEUR RENVOYÉE

S’il rĂ©ussit, mbind () renvoie 0 . 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 eu un trou non projetĂ© dans la plage de mĂ©moire spĂ©cifiĂ©e avec addr et len .

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 est MPOL_BIND ou MPOL_INTERLEAVE et 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 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 dans le contexte de cpuset du thread en cours, 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

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

EPERM

Le paramùtre flags incluait l’attribut MPOL_MF_MOVE_ALL et l’appelant n’avait pas le privilùge CAP_SYS_NICE .

STANDARDS

Linux.

HISTORIQUE

Linux 2.6.7.

La gestion de politique pour les pages immenses a Ă©tĂ© ajoutĂ©e dans Linux 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.

Avant Linux 5.7. MPOL_MF_STRICT était 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.

NOTES

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

La politique NUMA n’est pas gĂ©rĂ©e sur les plages de fichiers projetĂ©s en mĂ©moire 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 mĂ©moire du thread 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 thread 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 de MPOL_LOCAL ou MPOL_PREFERRED avec un ensemble vide de nƓuds. Cette mĂ©thode fonctionnera aussi avec set_mempolicy (2).

VOIR AUSSI

get_mempolicy (2), getcpu (2), mmap (2), set_mempolicy (2), shmat (2), shmget (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> et Jean-Philippe MENGUAL <jpmengual@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 .