Unter Linux möchte ich die Speicherseiten einer virtuellen KVM-Maschine zur Laufzeit von einem NUMA-Knoten auf einen anderen NUMA-Knoten migrieren. Ich kann jedoch keine Schnittstellen dafür im KVM-Hypervisor oder unter Verwendung der libvirt-API finden. Dann habe ich versucht, die numa_migrate_pages
Funktion in zu verwenden -lnuma
und die Speicherseiten des VM-Prozesses zu migrieren. Ich habe jedoch festgestellt, dass die numa_migrate_pages
Funktion nur einige Seiten migrieren kann, nicht alle Seiten. Der folgende Text zeigt beispielsweise die Verteilung der Speicherseiten dieses VM-Prozesses:
Node0: 0 pages
Node1: 1538 pages
Node2: 270641 pages
Node3: 552 pages
Und ich möchte alle Seiten in Node2 auf Node0 migrieren. Nach Verwendung der numa_migrate_pages
Funktion werden jedoch nur einige Seiten migriert, wie der folgende Text zeigt:
Node0: 7952 pages
Node1: 1538 pages
Node2: 262113 pages
Node3: 552 pages
Dann öffne ich die Datei und stelle fest, dass die meisten auf Node2 verbleibenden Seiten anonyme und schmutzige Seiten sind:/proc/[pid of VM process]/numa_maps
7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Warum können nicht alle Seiten in Node2 auf Node0 migriert werden? Was ist das Problem hier?