Jak migrować wszystkie strony pamięci procesu z jednego węzła NUMA do innego węzła NUMA?

10

W systemie Linux chcę przeprowadzić migrację stron pamięci maszyny wirtualnej KVM z jednego węzła NUMA do innego węzła NUMA w czasie wykonywania. Ale nie mogę znaleźć żadnych interfejsów w hiperwizorze KVM lub za pomocą interfejsu API libvirt. Następnie próbowałem użyć numa_migrate_pagesfunkcji w -lnumai przeprowadzić migrację stron pamięci procesu VM. Ale odkryłem, że numa_migrate_pagesfunkcja może migrować tylko niektóre strony, nie może migrować wszystkich stron. Na przykład poniższy tekst pokazuje rozkład stron pamięci tego procesu maszyny wirtualnej:

Node0:  0             pages
Node1:  1538          pages
Node2:  270641        pages
Node3:  552           pages

Chcę migrować wszystkie strony w Node2 do Node0. Ale po użyciu numa_migrate_pagesfunkcji migrowane są tylko niektóre strony, jak pokazuje poniższy tekst:

Node0:  7952          pages
Node1:  1538          pages
Node2:  262113        pages
Node3:  552           pages

Następnie otwieram plik i stwierdzam, że większość stron pozostawionych w Node2 to anonimowe i brudne strony:/proc/[pid of VM process]/numa_maps

7f572c000000 default anon=262143 dirty=262143 N2=262113 ...

Dlaczego więc nie można migrować wszystkich stron w Node2 do Node0? W czym problem?

Jenson
źródło
3
nie publikuj obrazów podczas wklejania tekstu. zdjęć nie można wyszukiwać ani wklejać w odpowiedzi, a nawet nie można ich odczytać na monitorach znacznie różniących się od twoich (np. nieczytelnie małe czcionki na większych monitorach o wyższej rozdzielczości) lub przez niedowidzących użytkowników korzystających z oprogramowania do odczytu ekranu, takiego jak Szczęki.
cas
Zakładam, że korzystasz ze stron migracji Numa jako root?
Lmwangi,
@Lmwangi tak, działam jako root.
Jenson
Czy w Node0 jest wystarczająco dużo wolnych stron, aby sfinalizować transakcję?
Aaron Walerstein

Odpowiedzi:

1

Chcesz migratepagesplik binarny w numactlpakiecie.

Użycie i przykład

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

Ograniczenia

Sprzęt VM

Strony mogą być zablokowane w węźle, np. jeśli odnoszą się do przekazywania sprzętowego i reprezentują sprzęt zlokalizowany w określonym węźle.

Wolna pamięć i rozmiar strony

Oczywiście potrzebna jest wystarczająca ilość wolnej pamięci w węźle docelowym, ale nie musi ona również być zbyt pofragmentowana, aby przenosić duże strony. Jeśli jedna ze stron jest ciągłym przydziałem dużego rzędu, a wolna pamięć węzła docelowego nie ma wystarczająco wolnych wolnych regionów, wówczas przenoszenie dużej strony może się nie powieść (w zależności od uruchomienia i udanego kompakowania).

robbat2
źródło