Trong Linux, tôi muốn di chuyển các trang bộ nhớ của máy ảo KVM từ một nút NUMA sang một nút NUMA khác trong thời gian chạy. Nhưng tôi không thể tìm thấy bất kỳ giao diện nào để thực hiện điều đó trong bộ ảo hóa KVM hoặc sử dụng API libvirt. Sau đó, tôi đã cố gắng sử dụng numa_migrate_pages
chức năng trong -lnuma
và di chuyển các trang bộ nhớ của quy trình VM. Nhưng tôi thấy rằng numa_migrate_pages
chức năng chỉ có thể di chuyển một số trang, nó không thể di chuyển tất cả các trang. Ví dụ, văn bản dưới đây cho thấy phân phối trang bộ nhớ của quy trình VM này:
Node0: 0 pages
Node1: 1538 pages
Node2: 270641 pages
Node3: 552 pages
Và tôi muốn di chuyển tất cả các trang trong Node2 sang Node0. Nhưng sau khi sử dụng numa_migrate_pages
chức năng, chỉ một số trang được di chuyển, như văn bản dưới đây cho thấy:
Node0: 7952 pages
Node1: 1538 pages
Node2: 262113 pages
Node3: 552 pages
Sau đó, tôi mở tệp và thấy rằng hầu hết các trang còn lại trên Node2 là các trang ẩn danh và bẩn:/proc/[pid of VM process]/numa_maps
7f572c000000 default anon=262143 dirty=262143 N2=262113 ...
Vậy tại sao tất cả các trang trong Node2 không thể được di chuyển sang Node0? Vấn đề ở đây là gì?