В Linux я хочу перенести страницы памяти виртуальной машины KVM с одного узла NUMA на другой узел NUMA во время выполнения. Но я не могу найти никаких интерфейсов для этого в гипервизоре KVM или с использованием API libvirt. Затем я попытался использовать эту numa_migrate_pages
функцию -lnuma
и перенести страницы памяти процесса VM. Но я обнаружил, что numa_migrate_pages
функция может переносить только некоторые страницы, она не может переносить все страницы. Например, текст ниже показывает распределение страниц памяти этого процесса VM:
Node0: 0 pages
Node1: 1538 pages
Node2: 270641 pages
Node3: 552 pages
И я хочу перенести все страницы из Node2 в Node0. Но после использования numa_migrate_pages
функции переносятся только некоторые страницы, как показано ниже:
Node0: 7952 pages
Node1: 1538 pages
Node2: 262113 pages
Node3: 552 pages
Затем я открываю файл и обнаруживаю, что большинство страниц, оставленных на Node2, являются анонимными и грязными страницами:/proc/[pid of VM process]/numa_maps
7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Так почему же не все страницы в Node2 можно перенести в Node0? В чем здесь проблема?