支持NUMA的Linux命名共享内存

时间:2012-08-14 22:57:44

标签: linux memory shared numa

Windows API提供CreateFileMappingNuma函数(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx)以在特定NUMA节点上创建命名共享内存空间。

到目前为止,我还没有找到Linux的等效功能。

我目前的做法如下:

  1. 分配命名共享内存(使用shm_open(...))
  2. 确定当前的NUMA节点(使用numa_move_pages(...))
  3. 将页面移动到目标节点(再次使用numa_move_pages(...))
  4. 有没有人知道更好的方法?

    编辑:为了记录:我提议的实施确实按预期工作!

1 个答案:

答案 0 :(得分:0)

听起来不错。请注意,在您调用shm_open()/ fruncate()的位置没有分配页面(不要忘记使用ftruncate()来设置大小!)。内核只是创建vma并等待将来的代码访问以将页面故障转换为物理内存。因此,在这种状态下调用numa_move_pages()可能会产生在相关NUMA节点中创建和填充新页面的效果。