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

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.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                      move_pages(2)