migrate_pages - Déplacer toutes les pages d'un processus sur un autre
ensemble de nœuds
Bibliothèque de règles NUMA (Non-Uniform Memory Access) (
libnuma,
-lnuma)
#include <numaif.h>
long migrate_pages(int pid, unsigned long maxnode,
const unsigned long *old_nodes,
const unsigned long *new_nodes);
migrate_pages() essaye de déplacer toutes les pages du processus
pid qui sont sur les nœuds de mémoire
old_nodes
vers les nœuds de mémoire
new_nodes. Les pages qui ne
sont dans aucun nœud de
old_nodes ne seront pas
déplacées. Le noyau maintient autant que possible les relations
topologiques relatives à l'intérieur de
old_nodes durant
le déplacement vers
new_nodes.
Les arguments
old_nodes et
new_nodes sont des pointeurs vers des
masques de bits de numéros de nœuds, avec jusqu'à
maxnode bits dans chaque masque. Ces masques sont maintenus comme des
tableaux d'entiers longs non signés (
unsigned long) ;
dans le dernier entier long, les bits après ceux
spécifiés par
maxnode sont ignorés. L'argument
maxnode vaut un plus le numéro maximal de nœud dans le
masque de bit (qui a donc la même signification que dans
mbind(2), mais est différent de
select(2)).
L'argument
pid est l'identifiant du processus dont les pages doivent
être déplacées. Pour déplacer les pages dans un
autres processus, 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 sauvé du processus cible. Si
pid vaut 0, alors
migrate_pages() déplace les pages du processus appelant.
Les pages partagées avec un autre processus ne seront
déplacées que si le processus appelant possède le
privilège
CAP_SYS_NICE.
S'il réussit,
migrate_pages() renvoie le nombre de pages qui n'ont
pas pu être déplacées (c'est-à-dire qu'un code de
retour de zéro signifie que toutes les pages ont été
déplacés correctement). En cas d'erreur, il renvoie -1 et
remplit
errno avec la valeur d'erreur.
- EFAULT
- Une partie de la plage mémoire
spécifiée par old_nodes/new_nodes et
maxnode pointe en dehors de votre espace d'adressage
accessible.
- EINVAL
- La valeur indiquée par maxnode dépasse
une limite imposée par le noyau. Ou bien, old_nodes ou
new_nodes spécifie un ou plusieurs identifiants de
nœud qui sont plus grands que l'identifiant maximum de nœud
pris en charge. Ou aucun des identifiants de nœuds
spécifiés par new_nodes ne sont connectés et
autorisés par le contexte de cpuset actuel du processus, ou aucun
des nœuds spécifiés ne contient de
mémoire.
- EPERM
- Un privilège insuffisant (CAP_SYS_NICE) pour
déplacer les pages du processus spécifié par
pid ou pour accéder aux nœuds de destination.
- ESRCH
- Il n'y a pas de processus correspondant à
pid.
L'appel système
migrate_pages() est apparu pour la première
fois dans Linux 2.6.16.
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 du processus appelant. Notez que cette information peut changer
à tout instant d'une fait d'une reconfiguration manuelle ou automatique
de l'ensemble de processeurs.
L'utilisation de
migrate_pages() peut causer des pages dont l'emplacement
(le nœud) viole la politique mémoire établie pour les
adresses indiquées (consultez
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
migrate_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)
Documentation/vm/page_migration.rst dans l'arborescence des sources du
noyau Linux
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Philippe MENGUAL <
[email protected]>
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 à
[email protected]