【问题标题】:NUMA-aware named shared memory for Linux适用于 Linux 的 NUMA 感知命名共享内存
【发布时间】:2012-08-11 07:38:20
【问题描述】:

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(...))

有人知道更好的方法吗?

编辑:记录在案:我提议的实现确实按预期工作!

【问题讨论】:

  • 请注意,映射相同内存的其他应用程序稍后可能会将其移动到不同的节点。最重要的是,最好将内存放在“消费者”节点上,因为与从远程内存读取相比,写入远程内存通常不会停止。
  • 出于这个确切原因(以使数据靠近 CPU),我将内存移动到特定节点。但是,正如我发现的那样,调度程序自己非常擅长这样做;-)。这提供的唯一优势是,所有内存页面都已经在正确的位置,因此您在程序开始时没有“启动”阶段。

标签: linux memory shared numa


【解决方案1】:

听起来不错。请注意,在调用 shm_open()/fruncate() 时没有分配页面(不要忘记 ftruncate() 来设置大小!)。内核只是简单地创建 vma 并等待未来的代码访问将页面错误地放入物理内存。因此在这种状态下调用 numa_move_pages() 大概会产生在相关 NUMA 节点中创建和填充新页面的效果。

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 2011-12-30
    • 1970-01-01
    • 2011-02-18
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多