ใน Linux ฉันต้องการย้ายหน้าหน่วยความจำของเครื่องเสมือน KVM จาก NUMA หนึ่งโหนดไปยังอีก NUMA โหนดในขณะใช้งานจริง แต่ฉันไม่พบอินเทอร์เฟซใด ๆ ที่จะทำเช่นนั้นใน KVM hypervisor หรือใช้ libvirt API จากนั้นฉันพยายามใช้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 ได้ มีปัญหาอะไรที่นี่