在NUMA机器上,是否可以将正在运行的进程的内存页面迁移到一个节点?
P.S:我知道taskset可以在运行时改变亲和力,但是没有文档说明已经分配的内存页面是如何受到影响的。
据我所知,Numactl只能在创建流程时使用。
答案 0 :(得分:0)
在libnuma库中有这样的调用(numactl包,因为2003):http://linux.die.net/man/3/numa
Dump A; 1/22/2016 B = foreach A generate ToDate($0,"M/dd/yyyy"); C = foreach B { year = (chararray)GetYear($0); month = (chararray)GetMonth($0); day = (chararray)GetDay($0); generate CONCAT(CONCAT(CONCAT(year, '-'), CONCAT(month, '-')),day) as myDate; } Dump C; (2016-1-22)
void numa_tonode_memory(void *start, size_t size, int node);
将内存放在特定节点上。
可以使用numa_tonode_memory()
选项通过mbind
调用来实施:http://man7.org/linux/man-pages/man2/mbind.2.html
mbind - 设置内存范围的内存策略
如果在flags中指定了MPOL_MF_MOVE
,则内核将尝试 移动内存范围内的所有现有页面以便它们 遵守政策。
https://www.kernel.org/doc/Documentation/vm/page_migration
页面迁移允许进程手动重定位其所在的节点 设置时,页面通过MF_MOVE和MF_MOVE_ALL选项定位 通过mbind()的新内存策略。
或MPOL_MF_MOVE
:http://man7.org/linux/man-pages/man2/move_pages.2.html
" move_pages - 将流程的各个页面移动到另一个节点"