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_pages
fonction dans -lnuma
et de migrer les pages mémoire du processus VM. Mais j'ai trouvé que la numa_migrate_pages
fonction 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_pages
fonction, 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?