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

时间:2016-06-26 09:09:03

标签: process migrate numa

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

P.S:我知道taskset可以在运行时改变亲和力,但是没有文档说明已经分配的内存页面是如何受到影响的。

据我所知,Numactl只能在创建流程时使用。

1 个答案:

答案 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_MOVEhttp://man7.org/linux/man-pages/man2/move_pages.2.html " move_pages - 将流程的各个页面移动到另一个节点"