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_pages
funkcji w -lnuma
i przeprowadzić migrację stron pamięci procesu VM. Ale odkryłem, że numa_migrate_pages
funkcja 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_pages
funkcji 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?