【发布时间】:2016-06-26 09:09:03
【问题描述】:
在 NUMA 机器上,是否可以将正在运行的进程的内存页面迁移到一个节点?
P.S:我知道任务集可以在运行时更改关联性,但没有文档说明已分配的内存页面如何受到影响。
据我所知,Numactl 只能在创建进程时起作用。
【问题讨论】:
在 NUMA 机器上,是否可以将正在运行的进程的内存页面迁移到一个节点?
P.S:我知道任务集可以在运行时更改关联性,但没有文档说明已分配的内存页面如何受到影响。
据我所知,Numactl 只能在创建进程时起作用。
【问题讨论】:
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 - 将进程的各个页面移动到另一个节点"
【讨论】: