Bagaimana cara memigrasi semua halaman memori dari suatu proses dari satu NUMA node ke NUMA node lain?

10

Di Linux, saya ingin memigrasi halaman memori mesin virtual KVM dari satu simpul NUMA ke simpul NUMA lainnya saat runtime. Tetapi saya tidak dapat menemukan antarmuka untuk melakukan itu di hypervisor KVM atau menggunakan API libvirt. Kemudian saya mencoba menggunakan numa_migrate_pagesfungsi dalam -lnuma, dan memigrasi halaman memori dari proses VM. Tetapi saya menemukan bahwa numa_migrate_pagesfungsinya hanya dapat memigrasi beberapa halaman, tidak dapat memigrasi semua halaman. Misalnya, teks di bawah ini menunjukkan distribusi halaman memori dari proses VM ini:

Node0:  0             pages
Node1:  1538          pages
Node2:  270641        pages
Node3:  552           pages

Dan saya ingin memigrasi semua halaman di Node2 ke Node0. Tetapi setelah menggunakan numa_migrate_pagesfungsi, hanya beberapa halaman yang dimigrasikan, seperti yang ditunjukkan oleh teks di bawah ini:

Node0:  7952          pages
Node1:  1538          pages
Node2:  262113        pages
Node3:  552           pages

Lalu saya membuka file, dan menemukan bahwa sebagian besar halaman yang tersisa di Node2 adalah halaman anonim dan kotor:/proc/[pid of VM process]/numa_maps

7f572c000000 default anon=262143 dirty=262143 N2=262113 ...

Jadi mengapa tidak semua halaman di Node2 dapat dimigrasi ke Node0? Apa masalahnya di sini?

Jenson
sumber
3
jangan memposting gambar saat menempelkan teks. gambar tidak dapat dicari atau ditempelkan ke jawaban, dan bahkan tidak dapat dibaca pada monitor yang sangat berbeda dengan milik Anda (misalnya font kecil yang tidak terbaca pada monitor yang lebih besar, resolusi lebih tinggi) atau oleh pengguna penglihatan yang menggunakan perangkat lunak pembaca layar seperti Mulut.
Kasus
Saya kira Anda menjalankan halaman migrasi numa sebagai root?
Lmwangi
@ Lumangi ya, saya menjalankan sebagai root.
Jenson
Apakah ada cukup halaman gratis di Node0 untuk menyelesaikan transaksi?
Aaron Walerstein

Jawaban:

1

Anda ingin migratepagesbiner dalam numactlpaket.

Penggunaan & Contoh

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

Keterbatasan

Perangkat keras VM

Halaman dapat dikunci ke suatu simpul, mis. jika mereka terkait dengan hardware pass-through dan mereka mewakili perangkat keras yang terletak pada node tertentu.

Memori & Ukuran Halaman Gratis

Anda jelas membutuhkan cukup memori bebas pada node tujuan, tetapi juga tidak perlu terlalu terfragmentasi untuk memindahkan halaman besar. Jika salah satu halaman adalah alokasi berdampingan pesanan besar, dan memori bebas simpul tujuan tidak memiliki daerah bebas yang cukup besar, maka memindahkan halaman besar mungkin gagal (tergantung pada pemadatan yang dipicu & berhasil).

robbat2
sumber