Wie migriere ich alle Speicherseiten eines Prozesses von einem NUMA-Knoten zu einem anderen NUMA-Knoten?

10

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_pagesFunktion in zu verwenden -lnumaund die Speicherseiten des VM-Prozesses zu migrieren. Ich habe jedoch festgestellt, dass die numa_migrate_pagesFunktion 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_pagesFunktion 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?

Jenson
quelle
3
Veröffentlichen Sie keine Bilder, wenn Sie den Text einfügen. Bilder können nicht gesucht oder in Antworten eingefügt werden und können nicht einmal auf Monitoren gelesen werden, die sich erheblich von Ihren unterscheiden (z. B. unlesbar kleine Schriftarten auf größeren Monitoren mit höherer Auflösung) oder von sehbehinderten Benutzern, die Bildschirmlese-Software wie verwenden Kiefer.
Cas
Ich nehme an, dass Sie die numa-Migrationsseiten als root ausführen?
Lmwangi
@Lmwangi ja, ich laufe als root.
Jenson
Gibt es auf Node0 genügend freie Seiten, um die Transaktion abzuschließen?
Aaron Walerstein

Antworten:

1

Sie möchten die migratepagesBinärdatei im numactlPaket haben.

Verwendung & Beispiel

sudo migratepages $VM_PID $SRC_NODE $DEST_NODE
sudo migratepages 12345 2 0

Einschränkungen

VM-Hardware

Seiten können an einen Knoten gebunden sein, z. wenn sie sich auf Hardware-Pass-Through beziehen und Hardware darstellen, die sich auf einem bestimmten Knoten befindet.

Freier Speicher und Seitengröße

Sie benötigen natürlich genügend freien Speicher auf dem Zielknoten, aber er muss auch nicht zu fragmentiert sein, um große Seiten zu verschieben. Wenn eine der Seiten eine zusammenhängende Zuordnung großer Ordnung ist und der freie Speicher des Zielknotens keine freien Bereiche hat, die groß genug sind, schlägt das Verschieben der großen Seite möglicherweise fehl (abhängig davon, ob die Komprimierung ausgelöst wird und erfolgreich ist).

robbat2
quelle