对于NUMA计算机,Linux提供了
set_mempolicy 系统调用,它允许进程为内存分配定义其首选的NUMA节点。

是否有一些类似的功能可以更改另一个正在运行的进程的内存策略?所以像set_mempolicy(pid, ...)这样的东西,其中pid对应于一个不同的运行进程?

请注意,另一个进程(我要更改其内存策略的那个进程)已经在运行,我无法控制它。所以这样的解决方案:

set_mempolicy(...);
fork(); // now new process has the same memory policy

不是我要找的东西。

最佳答案

  • 创建一个cpuset,其mems包含所需的节点,memory_migrate包含1
  • 将进程的PID写入cpuset的tasks文件

  • 进程的新分配将根据cpuset的mems配置完成,并且当任务添加到集合中时将迁移现有页面。

    注意确实感觉上像是服务器故障Q/A,但如果感觉更好,则可以用C编写cpuset管理。

    08-05 12:55