En Linux, quiero migrar las páginas de memoria de una máquina virtual KVM de un nodo NUMA a otro nodo NUMA en tiempo de ejecución. Pero no puedo encontrar ninguna interfaz para hacer eso en el hipervisor KVM o usando la API libvirt. Luego intenté usar la numa_migrate_pages
función -lnuma
y migrar las páginas de memoria del proceso VM. Pero descubrí que la numa_migrate_pages
función solo puede migrar algunas páginas, no puede migrar todas las páginas. Por ejemplo, el texto a continuación muestra la distribución de páginas de memoria de este proceso de VM:
Node0: 0 pages
Node1: 1538 pages
Node2: 270641 pages
Node3: 552 pages
Y quiero migrar todas las páginas en Node2 a Node0. Pero después de usar la numa_migrate_pages
función, solo se migran algunas páginas, como muestra el texto a continuación:
Node0: 7952 pages
Node1: 1538 pages
Node2: 262113 pages
Node3: 552 pages
Luego abro el archivo y encuentro que la mayoría de las páginas que quedan en el Nodo2 son páginas anónimas y sucias:/proc/[pid of VM process]/numa_maps
7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Entonces, ¿por qué no se pueden migrar todas las páginas del Nodo2 al Nodo0? ¿Cuál es el problema aquí?