In Linux, voglio eseguire la migrazione delle pagine di memoria di una macchina virtuale KVM da un nodo NUMA a un altro nodo NUMA in fase di runtime. Ma non riesco a trovare alcuna interfaccia per farlo nell'hypervisor KVM o usando l'API libvirt. Quindi ho provato a utilizzare la numa_migrate_pages
funzione -lnuma
e migrare le pagine di memoria del processo VM. Ma ho scoperto che la numa_migrate_pages
funzione può migrare solo alcune pagine, non può migrare tutte le pagine. Ad esempio, il testo seguente mostra la distribuzione delle pagine di memoria di questo processo VM:
Node0: 0 pages
Node1: 1538 pages
Node2: 270641 pages
Node3: 552 pages
E voglio migrare tutte le pagine da Node2 a Node0. Ma dopo aver usato la numa_migrate_pages
funzione, vengono migrate solo alcune pagine, come mostra il testo seguente:
Node0: 7952 pages
Node1: 1538 pages
Node2: 262113 pages
Node3: 552 pages
Quindi apro il file e trovo che la maggior parte delle pagine rimaste su Nodo2 sono pagine anonime e sporche:/proc/[pid of VM process]/numa_maps
7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Quindi perché non è possibile migrare tutte le pagine in Node2 in Node0? Qual è il problema qui?