Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]
MBIND
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- ERREURS
- NOTES
- HISTORIQUE ET SUPPORT BIBLIOTHÈQUE
- CONFORMITÉ
- VOIR AUSSI
- TRADUCTION
NOM
mbind - Fixer la politique mémoire pour une zone de mémoire
SYNOPSIS
#include <numaif.h>
int mbind(void *start, unsigned long len, int policy,
unsigned long *nodemask, unsigned long maxnode, unsigned
flags);
cc...-lnuma
DESCRIPTION
mbind() fixe la politique mémoire NUMA pour la zone mémoire débutant à
l'adresse start et s'étendant sur len octets. La mémoire d'une machine
NUMA est divisée en plusieurs noeuds. La politique mémoire décrit sur quel
noeud la mémoire est allouée. mbind() n'a d'effet que pour les nouvelles
allocations ; si les pages dans la zone ont déjà été touchées avant de
fixer la politique, celle-ci n'a aucun effet.
Les politiques disponibles sont MPOL_DEFAULT, MPOL_BIND,
MPOL_INTERLEAVE et MPOL_PREFERRED. Toutes les politiques sauf
MPOL_DEFAULT requièrent d'indiquer à quels noeuds la politique s'applique
dans le paramètre nodemask. Ce paramètre est un masque de noeuds
contenant jusqu'à maxnode bits. Le nombre réel d'octets transférés par
cet argument est arrondi au multiple supérieur de sizeof(unsigned long),
mais le noyau n'utilisera que les bits jusqu'à maxnode. Un argument NULL
indique un ensemble vide de noeuds.
La politique MPOL_DEFAULT est la politique par défaut et indique
l'utilisation de la politique par défaut du processus, qui peut être
modifiée par set_mempolicy(2)). À moins que la politique du processus ait
été changée, cela signifie que la mémoire sera allouée sur la mémoire du
processeur ayant demandé l'allocation. nodemask doit être NULL.
La politique MPOL_BIND est une politique stricte qui restreint
l'allocation de mémoire aux noeuds indiqués dans nodemask. Aucune mémoire
ne sera allouée sur d'autres noeuds.
La politique MPOL_INTERLEAVE entrelace les allocations sur les noeuds
donnés dans nodemask. Cela optimise les allocations pour la bande
passante, plutôt que la latence. Pour que cette politique soit efficace, la
zone de mémoire doit être relativement grande, au moins 1 Mo.
MPOL_PREFERRED fixe le noeud préféré 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 mémoire libre. Seul le premier noeud
dans nodemask est utilisé. Si aucun noeud n'est spécifié dans le masque,
la mémoire est allouée sur le noeud qui demande l'allocation.
Si l'option MPOL_MF_STRICT est passée dans flags et si policy n'est
pas MPOL_DEFAULT, l'appel échoue avec l'erreur EIO si les pages
existantes dans la projection ne suivent pas la politique. Sous Linux 2.6.16
et ultérieur, le noyau essaiera également de déplacer les pages vers le
noeud demandé si cette option est utilisée.
Si MPOL_MF_MOVE est passé dans flags, le noyau essaiera de déplacer
toutes les pages de la projection 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 MPOL_MF_MOVE_ALL est indiqué dans flags, toutes les pages de la
projection seront déplacées, même si d'autres processus les utilisent. Le
processus 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.
VALEUR RENVOYÉE
Si elle réussit, la fonction mbind() renvoie zéro. En cas d'erreur, elle
renvoie -1 et remplit errno avec la valeur d'erreur.
ERREURS
- EFAULT
-
Il y a un « trou » sans projection dans la zone mémoire indiquée, ou un
pointeur invalide a été utilisé.
- EINVAL
-
flags ou mode a une valeur invalide ; ou end est inférieur à
start ; ou policy est MPOL_DEFAULT et nodemask pointe vers un
ensemble non vide ; ou policy est MPOL_BIND ou MPOL_INTERLEAVE et
nodemask pointe vers un ensemble vide.
- ENOMEM
-
Pas assez de mémoire.
- EIO
-
MPOL_MF_STRICT a été utilisé et une page existante était déjà sur un
noeud ne suivant pas la politique.
NOTES
La politique NUMA n'est pas gérée sur les projections de fichiers.
MPOL_MF_STRICT est actuellement ignoré sur les projections de pages
immenses.
Il est dommage que la même option, MPOL_DEFAULT, ait des effets
différents pour mbind(2) et set_mempolicy(2). Pour sélectionner une « allocation sur le noeud du processeur qui demande l'allocation »
(correspondant au MPOL_DEFAULT de set_mempolicy()) avec mbind(),
utilisez MPOL_PREFERRED comme policy, en laissant nodemask vide.
HISTORIQUE ET SUPPORT BIBLIOTHÈQUE
Les appels système mbind(), get_mempolicy() et set_mempolicy ont
été ajoutés au noyau Linux dans la version 2.6.7. Ils ne sont disponibles
que si le noyau a été compilé avec l'option CONFIG_NUMA.
La gestion de politique pour les pages immenses a été ajoutée 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 mémoire doit être au
moins de dizaines de mégaoctets.
MPOL_MF_MOVE et MPOL_MF_MOVE_ALL ne sont disponibles qu'à partir de
Linux 2.6.16.
Ces appels système ne doivent pas être utilisés directement. L'interface de
plus haut niveau fournie par les fonctions numa(3) du paquet numactl
est recommandée. Le paquet numactl est disponible à l'adresse
ftp://ftp.suse.com/pub/people/ak/numa/.
Vous pouvez lier votre programme avec -lnuma pour obtenir les définitions
des appels système. libnuma est disponible dans le paquet numactl. Ce
paquet contient également l'en-tête numaif.h.
CONFORMITÉ
Cet appel système est spécifique à Linux.
VOIR AUSSI
numa(3), numactl(8), set_mempolicy(2), get_mempolicy(2),
mmap(2)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|