get_mempolicy - Récupérer la politique mémoire NUMA d'un
thread
Bibliothèque de règles NUMA (Non-Uniform Memory Access) (
libnuma,
-lnuma)
#include <numaif.h>
long get_mempolicy(int *mode,
unsigned long nodemask[(.maxnode + ULONG_WIDTH - 1)
/ ULONG_WIDTH],
unsigned long maxnode, void *addr,
unsigned long flags);
get_mempolicy() récupère la politique NUMA du thread
appelant ou d'une adresse en mémoire, selon la valeur de
flags.
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.
Si
flags vaut
0, les informations sur la politique par
défaut du thread appelant (définie par
set_mempolicy(2))
est renvoyée dans les tampons vers lesquels pointent
mode et
nodemask. La valeur renvoyée par ces paramètres peut
être utilisée pour restaurer la politique du thread dans son
état au moment de l'appel à
get_mempolicy() en utilisant
set_mempolicy(2). Quand
flags vaut
0,
addr doit
être indiqué comme NULL.
Si
flags indique
MPOL_F_MEMS_ALLOWED (disponible depuis
Linux 2.6.24), le paramètre
mode est ignoré et
l'ensemble des nœuds (mémoires) que le thread est
autorisé à utiliser dans les appels suivants à
mbind(2) ou
set_mempolicy(2) (en l'absence de
drapeaux de
mode) est renvoyé dans
nodemask. Il n'est pas permis de
combiner
MPOL_F_MEMS_ALLOWED avec
MPOL_F_ADDR ou
MPOL_F_NODE.
Si
flags indique
MPOL_F_ADDR, des informations sont
renvoyées sur la politique qui préside à l'adresse
mémoire donnée dans
addr. Cette politique peut
être différente de la politique par défaut du thread si
mbind(2) ou une des fonctions d'aide décrites dans
numa(3) a été utilisée pour mettre en place une
politique pour la plage de mémoire contenant l'adresse
addr.
Si le paramètre
mode n'est pas NULL,
get_mempolicy()
stockera le mode de politique et tout
drapeau de mode optionnel de la
politique NUMA requise à l'endroit vers lequel pointe ce
paramètre. Si
nodemask n'est pas NULL, le masque de nœud
associé à la politique sera stocké à l'emplacement
vers lequel pointe cet argument.
maxnode spécifie le nombre
d'identifiants de nœuds qui peuvent être stockés dans
nodemask, c'est-à-dire, la valeur maximale de l'identifiant de
nœud plus un. La valeur indiquée dans
maxnode est
toujours arrondie à un multiple de
sizeof(unsigned long)*8.
Si
flags indique à la fois
MPOL_F_NODE et
MPOL_F_ADDR,
get_mempolicy() renverra l'identifiant du
nœud sur lequel est allouée l'adresse
addr à
l'emplacement vers lequel pointe
mode. Si aucune page n'a encore
été allouée pour l'adresse spécifiée,
get_mempolicy() allouera une page comme si le thread avait
réalisé un accès en lecture (chargement) à cette
adresse, et renverra l'identifiant du nœud où cette page a
été allouée.
Si
flags indique
MPOL_F_NODE mais pas
MPOL_F_ADDR et que la
politique actuelle du thread est
MPOL_INTERLEAVE,
get_mempolicy() renverra à l'endroit pointé par un
paramètre
mode non NULL l'identifiant du prochain nœud
à utiliser pour l'entrelacement des pages internes du noyau
allouées au nom du thread. Ces allocations incluent des pages pour les
fichiers de mémoire projetée dans les plages de mémoire
projetée du processus en utilisant l'appel
mmap(2) avec
l'attribut
MAP_PRIVATE pour les accès en lecture, et dans les
plages de mémoire projetée avec l'attribut
MAP_SHARED
pour tous les autres accès.
D'autres valeurs de drapeau sont réservées.
Pour un survol des politiques possibles, consultez
set_mempolicy(2).
get_mempolicy() renvoie
0 s'il réussit, ou
-1 s'il
échoue, auquel cas
errno contient le code d'erreur.
- 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
- La valeur spécifiée par maxnode est
inférieure au nombre d'identifiants de nœud pris en charge
par le système. Ou flags spécifie des valeurs autres
que MPOL_F_NODE ou MPOL_F_ADDR ; ou flags
spécifie MPOL_F_ADDR et addr est NULL, ou
flags ne spécifie pas MPOL_F_ADDR et addr
n'est pas NULL. Ou flags spécifie MPOL_F_NODE mais
pas MPOL_F_ADDR et la politique actuelle du thread n'est pas
MPOL_INTERLEAVE. Ou flags spécifie
MPOL_F_MEMS_ALLOWED avec MPOL_F_ADDR ou MPOL_F_NODE.
(Il n’existe pas d'autres cas pour EINVAL.)
L'appel système
get_mempolicy() a été ajouté
dans Linux 2.6.7.
Cet appel système est spécifique à Linux.
Pour des informations sur la prise en charge des bibliothèques, consultez
numa(7).
getcpu(2),
mbind(2),
mmap(2),
set_mempolicy(2),
numa(3),
numa(7),
numactl(8)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Philippe MENGUAL <
[email protected]>
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 à
[email protected]