我目前正在研究具有 2 个节点的 NUMA 系统。我有一个指向某个内存的指针,但我不知道它在哪个节点。有什么办法可以得到内存的节点号?
(获取当前线程的节点掩码不起作用的原因是,该节点的内存已满,因此即使该线程与当前节点有关联,它仍然可能在相邻节点上分配内存。因此,我正在寻找一种直接获取内存位置的方法。)
我目前正在研究具有 2 个节点的 NUMA 系统。我有一个指向某个内存的指针,但我不知道它在哪个节点。有什么办法可以得到内存的节点号?
(获取当前线程的节点掩码不起作用的原因是,该节点的内存已满,因此即使该线程与当前节点有关联,它仍然可能在相邻节点上分配内存。因此,我正在寻找一种直接获取内存位置的方法。)
您可能需要检查 NUMA API: http: //linux.die.net/man/3/numa。从粗略的外观来看,numa_alloc_onnode()
并numa_get_run_node_mask()
脱颖而出。
可能是 API 中的一些函数组合可以帮助您解决您想知道节点号的原因。
这在 Linux 上使用numa_move_pages
. 这只是移动页面的糖。如果你不向它传递任何节点,它会返回 status 中指针的 NUMA 节点的 id。请注意,您的指针需要指向驻留在物理内存中的页面(即已经出现页面错误),否则您将获得 ENOENT。