迁移正在运行的进程的内存页

Posted

技术标签:

【中文标题】迁移正在运行的进程的内存页【英文标题】:Migrate memory pages of a running process 【发布时间】:2016-06-26 09:09:03 【问题描述】:

在 NUMA 机器上,是否可以将正在运行的进程的内存页面迁移到一个节点?

P.S:我知道任务集可以在运行时更改关联性,但没有文档说明已分配的内存页面如何受到影响。

据我所知,Numactl 只能在创建进程时起作用。

【问题讨论】:

【参考方案1】:

libnuma库中有这样的调用(numactl包,自2003):http://linux.die.net/man/3/numa

void numa_tonode_memory(void *start, size_t size, int node);

numa_tonode_memory() 将内存放在特定节点上。

它可以通过mbind 调用和MPOL_MF_MOVE 选项来实现:http://man7.org/linux/man-pages/man2/mbind.2.html

mbind - 为内存范围设置内存策略 如果 MPOL_MF_MOVE 在 flags 中指定,那么内核将尝试 移动内存范围内的所有现有页面,以便它们 遵守政策。

https://www.kernel.org/doc/Documentation/vm/page_migration

页面迁移允许进程手动重新定位其所在的节点 页面在设置时通过 MF_MOVE 和 MF_MOVE_ALL 选项定位 通过 mbind() 的新内存策略。

或者move_pages: http://man7.org/linux/man-pages/man2/move_pages.2.html "move_pages - 将进程的各个页面移动到另一个节点"

【讨论】:

以上是关于迁移正在运行的进程的内存页的主要内容,如果未能解决你的问题,请参考以下文章