NOM
move_pages - Déplacer des pages individuelles d’un processus sur un
autre noeud
SYNOPSIS
#include <numaif.h>
long move_pages(int pid, unsigned long count, void **pages,
const int *nodes, int *status, int flags);
move_pages() déplace les pages indiqué du processus pid dans les noeuds
indiqués par nodes. Le résultat du déplacement est reflété dans status.
Les drapeaux flags indiquent des contraintes sur les pages à déplacer.
pid est l’identifiant du processus dans lequel des pages doivent être
déplacées. Pour déplacer des pages dans un autres processus, l’appelant
doit être privilégié (CAP_SYS_NICE) ou l’identifiant utilisateur réel
ou effectif du processus appelant doit correspondre à l’identifiant
utilisateur réel ou sauvé du processus cible. Si pid vaut 0, alors
move_pages() déplace des pages du processus appelant.
count est le nombre de pages à déplacer. Il définit la taille des trois
tableaux pages, nodes et status.
pages est un tableau de pointeurs vers des pages à déplacer. Ces
pointeurs doivent être alignés sur des limites de pages. Les adresses
sont indiquées comme elles sont vues par le processus indiqué par pid.
nodes est un tableau d’entiers qui indiquent les emplacements voulus
pour chaque page. Chaque élément du tableau est un numéro de noeud.
nodes peut aussi être NULL, auquel cas move_pages() ne déplace aucune
page mais renvoie dans status le noeud où chaque page réside
actuellement. Obtenir l’état de chaque page peut être nécessaire pour
trouver les pages qui doivent être déplacées.
status est un tableau d’entiers qui renvoie l’état de chaque page. Le
tableau ne contient des valeurs correctes que si move_pages() n’a pas
renvoyé d’erreur.
flags indique quels types de page déplacer. MPOL_MF_MOVE signifie que
seules les pages qui ne peuvent être utilisées qu’exclusivement par le
processus sont à déplacer. MPOL_MF_MOVE_ALL signifie que les pages
partagées entre plusieurs processus peuvent aussi être déplacée. Le
processus doit être privilégié (CAP_SYS_NICE) pour utiliser
MPOL_MF_MOVE_ALL.
États des pages dans le tableau array
Les valeurs suivantes peuvent être renvoyées dans chaque élément du
tableau status.
0..MAX_NUMNODES
Indique le noeud sur lequel la page réside.
-EACCES
La page est projetée par plusieurs processus et ne peut être
déplacée que si MPOL_MF_MOVE_ALL est utilisé.
-EBUSY La page est actuellement occupée et ne peut être déplacée.
Essayez plus tard. Ceci arrive si la page est utilisée pour des
entrées/sorties ou si une autre partie du noyau conserve une
référence sur la page.
-EFAULT
C’est une page nulle ou la zone mémoire n’est pas projetée par
le processus.
-EIO Impossible de ré-écrire une page. La page doit être ré-écrite
pour la déplacer puisque la page est sale et que le système de
fichiers ne fournit pas de fonction de migration qui permettrait
le déplacement de pages sales.
-EINVAL
Une page sale ne peut pas être déplacée. Le système de fichiers
ne fournit pas de fonction de déplacement et n’a pas la
possibilité de ré-écrire la page.
-ENOENT
La page n’est pas présente.
-ENOMEM
Impossible d’allouer de la mémoire sur le noeud cible.
VALEUR RENVOYÉE
S’il réussit, move_pages() renvoie zéro. En cas d’erreur, il renvoie -1
et remplit errno avec la valeur d’erreur.
ERREURS
E2BIG Trop de pages à déplacer.
EACCES Un des noeuds cibles n’est pas autorisés dans l’ensemble de
processeurs en cours.
EFAULT Impossible d’accéder à un tableau en paramètre.
EINVAL Un drapeau autre que MPOL_MF_MOVE ou MPOL_MF_MOVE_ALL a été
indiqué ou on a essayé de déplacer des pages d’un thread noyau.
ENODEV Un des noeuds cibles n’est pas connecté.
ENOENT Aucune page nécessitant d’être déplacée n’a été trouvée. Toutes
les pages sont déjà sur le noeud cible, absentes, avec une
adresse non valable ou ne pouvaient être déplacées parce
qu’elles étaient projetées par plusieurs processus.
EPERM L’appelant a indiqué MPOL_MF_MOVE_ALL sans les privilèges
suffisants (CAP_SYS_NICE). Ou bien l’appelant a essayé de
déplacer des pages d’un processus appartenant à un autre
utilisateur mais n’était pas autorisé à le faire (CAP_SYS_NICE).
ESRCH Le processus n’existe pas.
VERSIONS
move_pages() est apparu pour la première fois sous Linux avec le noyau
2.6.18.
CONFORMITÉ
Cet appel système est spécifique à Linux.
NOTES
Pour des informations sur la prise en charge par des bibliothèques,
consultez numa(7).
Utilisez get_mempolicy(2) avec le drapeau MPOL_F_MEMS_ALLOWED pour
obtenir l’ensemble des noeuds autorisés par l’ensemble de processeurs
courant. Notez que cette information peut changer à tout instant d’une
fait d’une reconfiguration manuelle ou automatique de l’ensemble de
processeurs.
L’utilisation de cette fonction peut causer des pages dont
l’emplacement (le noeud) viole la politique mémoire établie pour les
adresses indiquées (voir mbind(2)) ou pour le processus indiqué (voir
set_mempolicy(2)). En d’autres termes, la politique mémoire ne
restreint pas les noeuds de destination utilisés par move_pages().
VOIR AUSSI
get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5),
cpuset(7), numa(7), migratepages(8), numa_stat(8)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite par Alain Portal <aportal AT
univ-montp2 DOT fr> en 2008, et mise à disposition sur
http://manpagesfr.free.fr/.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou 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> ».