У 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? У чому тут проблема?