Comment migrer toutes les pages mémoire d'un processus d'un nœud NUMA vers un autre nœud NUMA?

10

Sous Linux, je souhaite migrer les pages mémoire d'une machine virtuelle KVM d'un nœud NUMA vers un autre nœud NUMA lors de l'exécution. Mais je ne trouve aucune interface pour le faire dans l'hyperviseur KVM ou en utilisant l'API libvirt. J'ai ensuite essayé d'utiliser la numa_migrate_pagesfonction dans -lnumaet de migrer les pages mémoire du processus VM. Mais j'ai trouvé que la numa_migrate_pagesfonction ne peut migrer que certaines pages, elle ne peut pas migrer toutes les pages. Par exemple, le texte ci-dessous montre la distribution des pages mémoire de ce processus VM:

Node0:  0             pages
Node1:  1538          pages
Node2:  270641        pages
Node3:  552           pages

Et je veux migrer toutes les pages de Node2 vers Node0. Mais après avoir utilisé la numa_migrate_pagesfonction, seules certaines pages sont migrées, comme le montre le texte ci-dessous:

Node0:  7952          pages
Node1:  1538          pages
Node2:  262113        pages
Node3:  552           pages

Ensuite, j'ouvre le fichier et constate que la plupart des pages restantes sur Node2 sont des pages anonymes et sales:/proc/[pid of VM process]/numa_maps

7f572c000000 default anon=262143 dirty=262143 N2=262113 ...

Alors pourquoi toutes les pages de Node2 ne peuvent-elles pas être migrées vers Node0? Quel est le problème ici?

Jenson
la source
3
ne postez pas d'images lorsque vous collerez le texte. les images ne peuvent pas être recherchées ou collées dans les réponses, et ne peuvent même pas être lues sur des moniteurs très différents des vôtres (par exemple, des polices illisibles sur des moniteurs plus grands et de plus haute résolution) ou par des utilisateurs malvoyants utilisant un logiciel de lecture d'écran comme Mâchoires.
cas
Je suppose que vous exécutez les pages de migration de numa en tant que root?
Lmwangi
@Lmwangi oui, je cours en tant que root.
Jenson
Y a-t-il suffisamment de pages gratuites sur Node0 pour terminer la transaction?
Aaron Walerstein

Réponses:

1

Vous voulez le migratepagesbinaire dans le numactlpaquet.

Utilisation et exemple

sudo migratepages $VM_PID $SRC_NODE $DEST_NODE
sudo migratepages 12345 2 0

Limites

Matériel VM

Les pages peuvent être verrouillées sur un nœud, par exemple. s'ils sont liés à la transmission matérielle et qu'ils représentent du matériel situé sur un nœud spécifique.

Mémoire libre et taille de page

Vous avez évidemment besoin de suffisamment de mémoire libre sur le nœud de destination, mais il doit également ne pas être trop fragmenté pour déplacer de grandes pages. Si l'une des pages est une allocation contiguë d'ordre important et que la mémoire libre du nœud de destination n'a pas de régions libres suffisamment grandes, le déplacement de la grande page peut échouer (selon le compactage déclenché et réussi).

robbat2
la source