mbind

Autres langues

Langue: fr

Version: 7 février 2006 (mandriva - 01/05/08)

Section: 2 (Appels système)

NOM

mbind - Configurer la politique mémoire pour un intervalle 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() configure la politique mémoire NUMA pour l'intervalle mémoire démarrant à start et s'étalant sur len octets. La mémoire d'une machine NUMA est divisée en plusieurs noeauds. La politique mémoire définit dans quel noeud la mémoire sera allouée. mbind() n'a d'effet que sur les nouvelles allocations ; si des pages dans l'intervalle ont déjà été accédées avant de configurer la politique, alors la politique n'a pas d'effet.

Les poliques disponibles sont MPOL_DEFAULT, MPOL_BIND, MPOL_INTERLEAVE et MPOL_PREFERRED. Toutes les politiques excepté MPOL_DEFAULT nécessitent que l'appelant spécifie, dans le paramètre nodemask les noeuds auxquels s'appliquent la politique. nodemask est un masque de bits qui contient jusqu'à maxnode bits. Le nombre actuel d'octets transférés via cet argument est arrondi au multiple supérieur de sizeof(unsigned long), mais le noyau n'utilisera que jusqu'à maxnode bits. Un argument NULL signifie un ensemble de noeuds vide.

La politique MPOL_DEFAULT est la politique par défaut et signifie qu'on utilisera la politique du processus sous-jacent (qui peut être modifiée avec set_mempolicy(2)). À moins que la politique du processus n'ait été modifiée, cela signifie que l'on allouera la mémoire dans le noeud de la CPU qui a déclenché l'allocation. nodemask devrait être NULL.

La politique MPOL_BIND est une politique stricte qui restreint l'allocation mémoire aux noeuds spécifiés dans nodemask. Il n'y aura pas d'allocations en d'autres noeuds.

MPOL_INTERLEAVE entrelace les allocations aux noeuds spécifiés dans nodemask. Cela optimise la bande passante au lieu de la latence. Pour être efficace, la zone mémoire doit être relativement grande, au moins 1 Mo ou plus.

MPOL_PREFERRED définit la politique comme étant celle du noeud préféré. Le noyau essayera d'allouer la mémoire dans le noeud préféré et se repliera sur d'autres noeuds s'il ne reste que peu de mémoire libre sur le noeud préféré. Seul le premier noeud de nodemask est utilisé. Si aucun noeud n'est défini dans le masque, la mémoire est allouée dans le noeud de la CPU qui a déclenché l'allocation.

Si l'attribut MPOL_MF_STRICT est passé dans flags et si la politique n'est pas MPOL_DEFAULT, l'appel échouera avec l'erreur EIO s'il existe des pages dans la projection qui ne suivent pas la politique. Dans le noyau 2.6.16 ou suivants, le noyau essayera, avec cet attribut, de déplacer les pages vers le noeud requis.

Si MPOL_MF_MOVE est passé dans flags, il y aura une tentative de déplacer toutes les pages dans la projection afin qu'elles suivant la politique. Les pages qui sont partagées avec d'autres processus ne sont pas déplacées. Si MPOL_MF_STRICT est également spécifié, l'appel échouera avec l'erreur EIO si certaines pages ne peuvent pas être déplacées.

Si MPOL_MF_MOVE_ALL est passé dans flags, toutes les pages dans la projection seront déplacées même si d'autres processus utilisent ces pages. Le processus appelant doit être privilégié (CAP_SYS_NICE) pour utiliser cet attribut. Si MPOL_MF_STRICT est également spécifié, l'appel échouera avec l'erreur EIO si certaines pages ne peuvent pas être déplacées.

VALEUR RENVOYÉE

S'il réussit, mbind() renvoie 0 ; s'il échoue, il renvoie -1 et écrit errno en conséquence.

ERREURS

EFAULT
Il y a un trou non mappé dans l'intervalle mémoire spécifié ou on a passé un pointeur qui n'est pas valide.
EINVAL
Une valeur invalide a été spécifiée pour flags ou mode ; ou start + end est plus petite que start ; ou la politique était MPOL_DEFAULT et nodemask pointait vers un ensemble non vide ; ou la politique était MPOL_BIND ou MPOL_INTERLEAVE et le masque de noeuds nodemask pointait sur un ensemble vide.
ENOMEM
Manque de mémoire.
EIO
MPOL_MF_STRICT était spécifié et une page existante était déjà dans un noeud qui ne suit pas la politique.

CONFORMITÉ

Cet appel est spécifique à Linux.

NOTES

La politique NUMA n'est pas supportée sur les projections de fichier.

MPOL_MF_STRICT est ignoré pour les projections de pages énormes (Ndt : huge) jusqu'à maintenant.

Il est malheureux que le même attribut, MPOL_DEFAULT, ait des effets différents sur mbind(2) et sur set_mempolicy(2). Pour choisir « allocation du noeud de la CPU qui a déclenché l'allocation » (comme set_mempolicy(2) MPOL_DEFAULT) lors d'un appel à mbind(), spécifiez une politique à MPOL_PREFERRED et un masque de noeud nodemask vide.

Versions et prise en charge bibliothèque

Les appels système mbind(), get_mempolicy(2) et set_mempolicy(2) ont été ajoutés au noyau Linux dans la version 2.6.7. Ils ne sont disponibles que sur les noyaux compilés avec l'option de configuration CONFIG_NUMA.

Le support de la politique pour les pages énormes a été ajouté dans la version 2.2.16. Pour que la politique d'entrelacement soit efficace sur les projections de pages énormes, la mémoire affectée par la politique doit être de plusieurs dizaines de mega-octets ou plus.

MPOL_MF_MOVE et MPOL_MF_MOVE_ALL ne sont disponibles que depuis Linux 2.6.16.

Ces appels système ne devraient pas être utilisés directement. À la place, l'utilisation de l'interface de niveau supérieur fournie par les fonctions numa(3) du paquet numactl est recommandée. Le paquet numactl est disponible à ftp://ftp.suse.com/pub/people/ak/numa/.

Vous pouvez lier avec -lnuma pour obtenir les définitions des appels asystèmes. libnuma est disponible dans le paquet numactl. Ce paquet contient également l'en-tête numaif.h.

VOIR AUSSI

numa(3), numactl(8), set_mempolitique(2), get_mempolitique(2), mmap(2)

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 21 juillet 2006 et révisée le 22 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 mbind ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.