Как перенести все страницы памяти процесса с одного узла NUMA на другой узел NUMA?

10

В 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? В чем здесь проблема?

Дженсон
источник
3
не размещайте изображения при вставке текста. изображения не могут быть найдены или вставлены в ответы, и даже не могут быть прочитаны на мониторах, значительно отличающихся от ваших (например, нечитаемые мелкие шрифты на больших мониторах с более высоким разрешением) или от пользователей с ослабленным зрением, использующих программы для чтения с экрана, такие как Челюсти.
Cas
Я предполагаю, что вы запускаете numa миграцию страниц от имени пользователя root?
Lmwangi
@Lmwangi да, я работаю с правами root.
Дженсон
Достаточно ли свободных страниц на Node0 для завершения транзакции?
Аарон Валерстейн

Ответы:

1

Вы хотите migratepagesдвоичный файл в numactlпакете.

Использование и пример

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

Ограничения

Аппаратное обеспечение виртуальной машины

Страницы могут быть заблокированы для узла, например. если они связаны с аппаратным проходом и представляют оборудование, расположенное на определенном узле.

Свободная память и размер страницы

Очевидно, вам нужно достаточно свободной памяти на узле назначения, но она также должна быть не слишком фрагментированной для перемещения больших страниц. Если одна из страниц является непрерывным выделением большого порядка, а свободная память узла назначения не имеет достаточно больших свободных областей, то перемещение большой страницы может завершиться неудачно (в зависимости от того, какое сжатие было запущено и успешно).

robbat2
источник