move_pages(2) | System Calls Manual | move_pages(2) |
move_pages - Déplacer des pages individuelles d'un processus sur un autre nœud
Bibliothèque de règles NUMA (Non-Uniform Memory Access) (libnuma, -lnuma)
#include <numaif.h>
long move_pages(int pid, unsigned long count, void *pages[.count], const int nodes[.count], int status[.count], int flags);
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 :
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.
Les valeurs suivantes peuvent être renvoyées dans chaque élément du tableau status.
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.
move_pages() est apparu pour la première fois dans Linux 2.6.18.
Cet appel système est spécifique à Linux.
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).
get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7), numa(7), migratepages(8), numastat(8)
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.
5 février 2023 | Pages du manuel de Linux 6.03 |