Man page - move_pages(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

move_pages

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
États des pages dans le tableau d’état
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
VOIR AUSSI
TRADUCTION

NOM

move_pages - DĂ©placer des pages individuelles d’un processus sur un autre nƓud

BIBLIOTHÈQUE

BibliothĂšque de rĂšgles NUMA (Non-Uniform Memory Access) ( libnuma , -lnuma )

SYNOPSIS

#include <numaif.h>

long move_pages(int pid , unsigned long count , void * pages [. count ],
const int
nodes [. count ], int status [. count ], int flags );

DESCRIPTION

move_pages () dĂ©place les pages indiquĂ©es du processus pid dans les nƓuds de la mĂ©moire 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 les pages doivent ĂȘtre dĂ©placĂ©es. Si pid est 0 , move_pages () dĂ©place des pages du processus appelant.

Déplacer des pages dans un autre processus exige les privilÚges suivants :

-

JusquĂ  Linux 4.12 compris : 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 sauvegardĂ©, du processus cible.

-

Les anciennes rĂšgles autorisaient l’appelant Ă  voir plusieurs choix d’adresse virtuelle effectuĂ©s par le noyau, ce qui pouvait faire Ă©chouer la distribution alĂ©atoire de l’espace d’adressage (ASLR) pour un processus appartenant au mĂȘme identifiant utilisateur que l’appelant, ces rĂšgles ont Ă©tĂ© modifiĂ©es depuis Linux 4.13. Depuis Linux 4.13, ce droit est gĂ©rĂ© par une vĂ©rification du mode d’accĂšs ptrace PTRACE_MODE_READ_REALCREDS vis-Ă -vis du processus cible ; voir ptrace (2).

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. La prĂ©-initialisation du tableau sur une valeur qui ne peut pas reprĂ©senter un inƓud NUMA rĂ©el ou une erreur valable de tableau d’état pourraient aider Ă  identifier les pages ayant Ă©tĂ© migrĂ©es.

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Ă©es. Le processus doit ĂȘtre privilĂ©giĂ© ( CAP_SYS_NICE ) pour utiliser MPOL_MF_MOVE_ALL .

États des pages dans le tableau d’état

Les valeurs suivantes peuvent ĂȘtre renvoyĂ©es dans chaque Ă©lĂ©ment du tableau status .
0..MAX_NUMNODES

Indication du 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. Cela 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 la page de base (page zĂ©ro) ou la zone mĂ©moire n’est pas projetĂ©e par le processus.

-EIO

Impossible de réécrire dans la mĂ©moire une page. La page doit ĂȘtre réécrite pour la dĂ©placer puisque la page est modifiĂ©e (dirty) et que le systĂšme de fichiers ne fournit pas de fonction de migration qui permettrait le dĂ©placement de pages modifiĂ©es (dirty).

-EINVAL

Une page modifiĂ©e (dirty) 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 en mĂ©moire .

-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 pour indiquer l’erreur. Si une valeur positive est renvoyĂ©e, il s’agit du nombre de pages non migrĂ©es.

ERREURS

Valeur positive

Le nombre de pages non migrées si elles ne provenaient pas de raisons non fatales (depuis Linux 4.17).

E2BIG

Trop de pages à déplacer. Depuis Linux 2.6.29, le noyau ne génÚre plus cette erreur.

EACCES

Un des nƓuds cible n’est pas autorisĂ© 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Ă©.

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.

STANDARDS

Linux.

HISTORIQUE

Linux 2.6.18

NOTES

Consultez numa (7) pour des informations sur la prise en charge par des bibliothĂšques.

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 du fait d’une reconfiguration manuelle ou automatique de l’ensemble de processeurs.

L’utilisation de cette fonction peut aboutir Ă  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), numastat (8)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

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 à debian-l10n-french@lists.debian.org .