【发布时间】:2014-08-18 04:04:28
【问题描述】:
我目前正在开发具有 2 个节点的 NUMA 系统。我得到了一个指向某个内存的指针,但是我不知道它在哪个节点。有什么办法可以得到内存的节点号吗?
(获取当前线程的节点掩码不起作用的原因是,该节点的内存已满,所以即使该线程与当前节点关联,它仍然可能在相邻节点上分配内存.因此,我正在寻求一种直接获取内存位置的方法。)
【问题讨论】:
标签: c memory memory-management numa numactl
我目前正在开发具有 2 个节点的 NUMA 系统。我得到了一个指向某个内存的指针,但是我不知道它在哪个节点。有什么办法可以得到内存的节点号吗?
(获取当前线程的节点掩码不起作用的原因是,该节点的内存已满,所以即使该线程与当前节点关联,它仍然可能在相邻节点上分配内存.因此,我正在寻求一种直接获取内存位置的方法。)
【问题讨论】:
标签: c memory memory-management numa numactl
这在 Linux 上使用 numa_move_pages 是可行的。这只是move pages 的糖。如果你不向它传递任何节点,它会返回 status 中指针的 NUMA 节点的 id。
请注意,您的指针需要指向驻留在物理内存中的页面(即已经出现页面错误),否则您将获得 ENOENT。
【讨论】:
您可能需要检查 NUMA API:http://linux.die.net/man/3/numa。粗略一看,numa_alloc_onnode() 和 numa_get_run_node_mask() 非常有用。
可能API中的一些函数组合可以帮助你解决你想知道节点号的原因。
【讨论】: