Provided by: manpages-fr-dev_4.19.0-7_all bug

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.

VERSIONS

       move_pages() est apparu pour la première fois dans Linux 2.6.18.

STANDARDS

       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)

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