Provided by: manpages-fr-dev_4.15.0-9_all bug

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.

       Note : il n'existe pas d'enveloppe pour cet appel système dans la glibc ; voir NOTES.

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 :

       –  Dans les noyaux inférieurs ou égaux à Linux  4.12 :  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 d’ensemble enregistré,  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
              The  number of nonmigrated pages if they were the result of nonfatal reasons (since
              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.

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

       La  glibc  ne  fournit pas de fonction autour de cet appel système. 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)

COLOPHON

       Cette page fait partie de la publication 5.13 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.