Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
mbind - Fixer la politique memoire pour une zone de memoire
SYNOPSIS
#include <numaif.h>
int mbind(void *addr, unsigned long len, int mode,
unsigned long *nodemask, unsigned long maxnode,
unsigned flags);
Effectuez l'edition des liens avec l'option -lnuma.
DESCRIPTION
mbind() configure la politique memoire NUMA, qui consiste en un mode de
politique et zero ou plusieurs noeuds, pour l'intervalle memoire
demarrant a addr et s'etalant sur len octets. La politique memoire
definit a partir de quel noeud la memoire sera allouee.
Si la plage memoire specifiee par les parametres addr et len inclut une
region << anonyme >> de memoire (c'est-a-dire une region de memoire
creee avec l'appel systeme mmap(2) et l'attribut MAP_ANONYMOUS) ou un
fichier de memoire projetee, projection creee en utilisant l'appel
systeme mmap(2) et l'attribut MAP_PRIVATE, les pages seront seulement
allouees conformement a la politique specifiee lorsque l'application
ecrit [stocke] dans la page. Pour les regions anonymes, un acces
initial en lecture utilisera une page partagee du noyau contenant des
zeros. Pour un fichier projete avec MAP_PRIVATE, un acces initial en
lecture allouera des pages conformement a la politique de processus du
processus qui a fait que cette page ait ete allouee. Cela peut ne pas
etre le processus qui a appele mbind().
La politique specifiee sera ignoree pour toute projection MAP_SHARED
dans la plage memoire specifiee. Plutot, les pages seront allouees
conformement a la politique de processus du processus qui a fait que la
page ait ete allouee. Cela peut ne pas etre le processus qui a appele
mbind().
Si la plage de memoire specifiee inclut une region de memoire partagee
creee avec l'appel systeme shmget(2) et attachee avec l'appel systeme
shmat(2), les pages allouees pour la region de memoire anonyme ou
partagee seront allouees conformement a la politique specifiee, sans se
soucier de quel processus attache au segment de memoire partage a
provoque l'allocation. Si toutefois la region de memoire partagee a ete
creee avec l'attribut SHM_HUGETLB, les grosses pages seront allouees
conformement a la politique specifiee seulement si l'allocation de
pages est provoquee par le processus qui a appele mbind() pour cette
region.
Par defaut, mbind() n'a d'effet que sur les nouvelles allocations ; si
des pages dans l'intervalle ont deja ete accedees avant de configurer
la politique, alors la politique n'a pas d'effet. Ce comportement par
defaut peut etre ecrase par les attributs MPOL_MF_MOVE et
MPOL_MF_MOVE_ALL decrits plus loin.
Le parametre mode doit specifier l'un des attributs parmi MPOL_DEFAULT,
MPOL_BIND, MPOL_INTERLEAVE et MPOL_PREFERRED. Toutes les modes de
politique excepte MPOL_DEFAULT necessitent que l'appelant specifie,
dans le parametre nodemask, les noeuds auxquels s'appliquent le mode.
Le parametre 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 parametre nodemask non vide indique des identifiants des
noeuds physiques. Linux ne reassocie pas nodemask quand le
processus change de contexte d'ensemble de processeurs ou apres
une modifications de l'ensemble de noeuds autorises pour le
contexte de l'ensemble de processeurs en cours pour le
processus.
MPOL_F_RELATIVE_NODES (depuis Linux 2.6.26)
Un parametre nodemask non vide indique des 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.
nodemask pointe sur un masque de bits qui contient jusqu'a maxnode
bits. La taille du masque de bits est arrondi 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 un nodemask est exige, il doit
contenir au moins un noeud de connecte, autorises dans le contexte de
l'ensemble de processeurs du processus appelant (a moins que le drapeau
MPOL_F_STATIC_NODES ne soit fourni) et doit contenir de la memoire.
Le mode MPOL_DEFAULT demande a ce que toute politique n'etant pas une
politique par defaut soit retiree, ce qui restaure le comportement par
defaut. Lorsqu'il est applique a une plage memoire via mbind(), cela
signifie d'utiliser la politique du processus qui peut etre modifiee
avec set_mempolicy(2). Si le mode de la politique de processus est
egalement MPOL_DEFAULT, la politique par defaut du systeme sera
utilisee. La politique par defaut du systeme alloue des pages sur le
noeud de la CPU qui a declenche l'allocation. Pour MPOL_DEFAULT, les
parametres nodemask et maxnode doivent specifier l'ensemble vide de
noeuds.
Le mode MPOL_BIND specifie une politique stricte qui restreint
l'allocation memoire aux noeuds indiques 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 node 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.
Le mode MPOL_INTERLEAVE specifie que les allocations de pages sont
entrelacees a travers l'ensemble de noeuds specifies dans nodemask.
Cela optimise la bande passante au lieu de la latence en etalant les
pages et l'acces memoires a ces pages a travers plusieurs noeuds. Pour
etre efficace, la zone memoire doit etre relativement grande, au moins
1 Mo ou plus avec un modele d'acces assez uniforme. Les acces a une
unique page de la zone seront toujours limites a la bande passante d'un
seul noeud.
MPOL_PREFERRED fixe le noeud prefere pour les allocations. Le noyau
essaiera d'abord d'allouer sur ce noeud, avant de ce rabattre sur
d'autres noeuds si celui-ci n'a plus assez de memoire libre. Si
nodemask precise plus d'un identifiant de noeud, le premier noeud du
masque sera choisi comme le noeud prefere. Si les parametres nodemask
et maxnode indique un ensemble vide, la memoire est allouee sur le
noeud du CPU qui a declenche l'allocation. C'est la seule facon
d'indiquer une << allocation locale >> pour une plage memoire avec
mbind().
Si l'option MPOL_MF_STRICT est passee dans flags et si policy n'est pas
MPOL_DEFAULT, l'appel echoue avec l'erreur EIO si les pages existantes
dans la projection ne suivent pas la politique.
Si MPOL_MF_MOVE est passe dans flags, le noyau essaiera de deplacer
toutes les pages de la projection pour qu'elles suivent la politique.
Les pages partagees avec d'autres processus ne sont pas deplacees. Si
MPOL_MF_STRICT est egalement indique, l'appel echouera avec l'erreur
EIO si certaines pages ne peuvent pas etre deplacees.
Si MPOL_MF_MOVE_ALL est indique dans flags, alors le noyau essaiera de
deplacer toutes les pages de la projection, meme si d'autres processus
les utilisent. Le processus appelant doit etre privilegie (avoir la
capacite CAP_SYS_NICE) pour utiliser cette option. Si MPOL_MF_STRICT
est egalement utilise, l'appel renverra l'erreur EIO si certaines pages
ne peuvent pas etre deplacees.
VALEUR RENVOY'EE
S'il reussit, mbind() renvoie zero. En cas d'erreur, il renvoie -1 et
remplit errno avec la valeur d'erreur.
ERREURS
EFAULT Une partie ou toute la plage memoire specifiee par nodemask et
maxnode pointe en dehors de votre espace d'adressage accessible.
Ou il y a un trou non projete dans l'intervalle memoire
specifie.
EINVAL Une valeur non valable a ete specifiee pour flags ou mode ; ou
addr + len est plus petite que addr ; ou addr n'est pas un
multiple de la taille de page systeme. Ou, mode est MPOL_DEFAULT
et nodemask specifiait un ensemble non vide ; ou mode etait
MPOL_BIND ou MPOL_INTERLEAVE et le masque de noeuds nodemask est
vide. Ou, maxnode depasse une limite imposee par le noyau. Ou,
nodemask specifie un ou plusieurs identifiants de noeud qui sont
plus grands que l'identifiant maximum de noeud pris en charge.
Ou aucun des identifiants de noeuds specifies par nodemask ne
sont connectes et autorises dans le contexte de l'ensemble de
processeurs du processus appelant, ou aucun des noeuds specifies
ne contient de memoire. Ou le parametre mode indiquait a la fois
MPOL_F_STATIC_NODES et MPOL_F_RELATIVE_NODES.
EIO MPOL_MF_STRICT a ete utilise et une page existante etait deja
sur un noeud ne suivant pas la politique ; ou soit MPOL_MF_MOVE
soit MPOL_MF_MOVE_ALL a ete specifie et le noyau n'a pas ete
capable de deplacer toutes les pages existantes dans la plage.
ENOMEM Pas assez de memoire pour le noyau.
EPERM Le parametre flags inclus l'attribut MPOL_MF_MOVE_ALL et
l'appelant n'a pas le privilege CAP_SYS_NICE.
VERSIONS
L'appel systeme mbind() a ete ajoute au noyau Linux dans la version
2.6.7.
CONFORMIT'E
Cet appel systeme est specifique a Linux.
NOTES
Pour des informations sur la prise en charge par des bibliotheques,
consultez numa(7).
La politique NUMA n'est pas supportee sur les plages de fichiers de
memoire projetee qui ont ete projetees avec l'attribut MAP_SHARED.
Le mode MPOL_DEFAULT peut avoir des effets differents sur mbind() et
sur set_mempolicy(2). Lorsque MPOL_DEFAULT est specifie pour
set_mempolicy(2), la politique du processus est remise a la politique
par defaut du systeme ou l'allocation locale. Lorsque MPOL_DEFAULT est
specifie pour une plage de memoire utilisant mbind(), toutes les pages
allouees par la suite pour cette plage utiliseront la politique du
processus telle qu'elle a ete definie par set_mempolicy(2). Cela
supprime de maniere effective la politique explicite de la plage
specifiee, ce qui peut eventuellement remettre une politique autre que
celle par defaut. Pour choisir explicitement une << allocation
locale >> pour une plage memoire, specifiez mode avec MPOL_PREFERRED
avec un ensemble vide de noeuds. Cette methode fonctionnera aussi avec
set_mempolicy(2).
La gestion de politique pour les pages immenses a ete ajoutee 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 memoire doit
etre au moins de dizaines de megaoctets.
MPOL_MF_STRICT est ignore sur les projections de pages immenses.
MPOL_MF_MOVE et MPOL_MF_MOVE_ALL ne sont disponibles qu'a 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.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
Linux 15 aout 2008 MBIND(2)