get_mempolicy()
permet d'obtenir la politique NUMA du processus appelant ou d'une adresse
mémoire suivant la configuration de
flags.
Une machine NUMA a différents contrôleurs mémoire à différentes distances
de CPU particulières.
La politique de la mémoire définit dans quel noeud la mémoire
pour ce processus sera allouée.
Si
flags
vaut 0,
l'information sur la politique par défaut du processus appelant
(comme celle configurée avec
set_mempolicy(2))
est renvoyée.
Si
flags
spécifie
MPOL_F_ADDR,
l'information renvoyée est celle qui gouverne l'adresse mémoire donnée dans
addr.
Cette politique peut être différente de la politique
par défaut du processus si on a utilisé
mbind(2)
ou l'une des fonctions d'aide décrites dans
numa(3)
pour définir une politique pour la plage mémoire contenant l'adresse
addr.
Si l'argument
mode
n'est pas NULL,
get_mempolicy()
stockera le mode de politique de la politique NUMA requise à l'endroit
pointé par cet argument.
Si
nodemask
n'est pas NULL, le masque de noeud associé à la politique sera stockée
à l'emplacement pointé par cet argument.
maxnode
spécifie le nombre d'identifiants de noeuds qui peuvent être stockés dans
nodemask,
c'est-à-dire, la valeur maximum de l'identifiant de noeud plus un.
La valeur indiquée dans
maxnode
est toujours arrondie à un multiple de
sizeof(unsigned long).
Si
flags
indique à la fois
MPOL_F_NODE
et
MPOL_F_ADDR,
get_mempolicy()
renverra, à l'endroit pointé par
mode,
l'identifiant de noeud du noeud sur lequel l'adresse
addr
est allouée.
Si aucune page n'a encore été allouée pour l'adresse spécifiée,
get_mempolicy()
allouera une page comme si le processus avait réalisé un accès en lecture
[chargement] à cette adresse, et renverra l'identifiant du noeud où cette
page a été allouée.
Si
flags
indique
MPOL_F_NODE
mais pas
MPOL_F_ADDR
et que la politique actuelle est
MPOL_INTERLEAVE,
get_mempolicy()
renverra à l'endroit pointé par un argument
mode
non nul l'identifiant du prochain noeud à utiliser pour
l'entrelacement des pages internes du noyau allouées au nom du processus.
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 d'attribut sont réservées.
Pour une vue d'ensemble des politiques possibles, voir
set_mempolicy(2).