Provided by: manpages-fr-dev_4.13-4_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.

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
              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.

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 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  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.10 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 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.

Linux                                              9 juin 2020                                     MOVE_PAGES(2)