No Linux, desejo migrar as páginas de memória de uma máquina virtual KVM de um nó NUMA para outro nó NUMA no tempo de execução. Mas não consigo encontrar nenhuma interface para fazer isso no hypervisor KVM ou usando a API libvirt. Depois, tentei usar a numa_migrate_pages
função -lnuma
e migrar as páginas de memória do processo da VM. Mas descobri que a numa_migrate_pages
função pode migrar apenas algumas páginas, não pode migrar todas as páginas. Por exemplo, o texto abaixo mostra a distribuição das páginas de memória deste processo da VM:
Node0: 0 pages
Node1: 1538 pages
Node2: 270641 pages
Node3: 552 pages
E eu quero migrar todas as páginas no Nó2 para o Nó0. Mas depois de usar a numa_migrate_pages
função, apenas algumas páginas são migradas, como mostra o texto abaixo:
Node0: 7952 pages
Node1: 1538 pages
Node2: 262113 pages
Node3: 552 pages
Em seguida, abro o arquivo e percebo que a maioria das páginas restantes no Node2 são páginas anônimas e sujas:/proc/[pid of VM process]/numa_maps
7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Então, por que não é possível migrar todas as páginas no Nó2 para o Nó0? Qual é o problema aqui?