【发布时间】: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 的等效功能。
我目前的做法是这样的:
- 分配命名共享内存(使用 shm_open(...))
- 确定当前的 NUMA 节点(使用 numa_move_pages(...))
- 将页面移动到目标节点(再次使用 numa_move_pages(...))
有人知道更好的方法吗?
编辑:记录在案:我提议的实现确实按预期工作!
【问题讨论】:
-
请注意,映射相同内存的其他应用程序稍后可能会将其移动到不同的节点。最重要的是,最好将内存放在“消费者”节点上,因为与从远程内存读取相比,写入远程内存通常不会停止。
-
出于这个确切原因(以使数据靠近 CPU),我将内存移动到特定节点。但是,正如我发现的那样,调度程序自己非常擅长这样做;-)。这提供的唯一优势是,所有内存页面都已经在正确的位置,因此您在程序开始时没有“启动”阶段。