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

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配置过小导致页迁移繁忙而内存申请失败)

iOS进程内存分配(页、栈、堆)

使用正在运行的进程的共享内存收集核心转储

linux进程状态符号的含义

Linux 内核 内存管理内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )

分析正在运行的 Python 进程的内存使用情况