NOM¶
move_pages - Déplacer des pages individuelles d'un processus sur un autre
nœud
SYNOPSIS¶
#include <numaif.h>
long move_pages(int pid, unsigned long count, void **pages,
const int *nodes, int *status, int flags);
Effectuez l'édition des liens avec l'option
-lnuma.
DESCRIPTION¶
move_pages() déplace les
pages indiqué du processus
pid dans les nœuds 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
nœud.
nodes peut aussi être NULL, auquel cas
move_pages() ne déplace aucune page mais renvoie dans
status le nœud 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 nœud 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 nœud
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 nœuds 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 nœuds 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 nœud 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.
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 nœuds 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
nœud) viole la politique mémoire établie pour les adresses
indiquées (voir
mbind(2)) ou pour le processus indiqué
(consultez
set_mempolicy(2)). En d'autres termes, la politique
mémoire ne restreint pas les nœuds de destination utilisés par
move_pages().
L'en-tête
<numaif.h> n'est pas inclus dans la glibc, mais
nécessite l'installation de
libnuma-devel (ce nom peut varier
suivant les distributions).
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.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Alain Portal <
http://manpagesfr.free.fr/> (2008).
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> ».