迁移正在运行的进程的内存页
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 - 将进程的各个页面移动到另一个节点"
【讨论】:
以上是关于迁移正在运行的进程的内存页的主要内容,如果未能解决你的问题,请参考以下文章
Linux内存从0到1学习笔记(10.1 BugsShooter之cma配置过小导致页迁移繁忙而内存申请失败)
Linux 内核 内存管理内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )