考虑这种情况:在NUMA计算机上运行的用户进程调用mmap以在虚拟地址空间中创建新映射。然后它使用mmap返回的内存进行处理(存储其数据,......)。现在由于某些原因,用户进程被调度到不同的NUMA节点。用户进程是否有可能告诉操作系统在保留数据的同时重新定位已映射的内存(到不同的NUMA节点)?
答案 0 :(得分:2)
通过libnuma(<root>\app\design\adminhtml\default\default\template\sales\order\view\history.phtml
<root>\app\design\adminhtml\default\rwd\template\sales\order\view\history.phtml
)migrate_pages
调用,可以迁移物理内存:http://man7.org/linux/man-pages/man2/migrate_pages.2.html
-lnuma
long migrate_pages(int pid, unsigned long maxnode, const unsigned long *old_nodes, const unsigned long *new_nodes); Link with -lnuma.
尝试移动进程的所有页面 在new_nodes中的内存节点old_nodes中的内存节点。 不会迁移old_nodes中任何节点中的页面。如 内核尽可能保持相对拓扑 迁移到new_nodes期间old_nodes内部的关系。
migrate_pages()
包中还有工具migratepages
,用于迁移pid的所有页面:http://man7.org/linux/man-pages/man8/migratepages.8.html
您还可以使用numactl
更改内存政策:http://man7.org/linux/man-pages/man2/set_mempolicy.2.html
mbind
syscall可用于将页面子集迁移到某个NUMA节点:
https://www.kernel.org/doc/Documentation/vm/page_migration
...允许进程手动重定位其页面所在的节点 在设置时通过MF_MOVE和MF_MOVE_ALL选项定位 通过
创建新内存政策set_mempolicy
http://man7.org/linux/man-pages/man2/mbind.2.html
mbind()