小编典典

我可以从指针地址获取NUMA节点(在Linux中为C)吗?

linux

我设置了代码,以仔细地在NUMA系统上本地加载和处理数据。我认为。也就是说,出于调试目的,我真的很希望能够使用由其他功能设置的特定功能内部访问的指针地址直接识别内存所指向的NUMA节点。正在驻留,因此我可以检查所有内容均位于应放置的位置。这可能吗?

我在msdn http://social.msdn.microsoft.com/Forums/en-
US/parallelcppnative/thread/37a02e17-e160-48d9-8625-871ff6b21f72上找到了此请求,但答案使用的是QueryWorkingSetEx()似乎是Windows特定的。可以在Linux上完成吗?确切地说,我正在使用Debian
Squeeze。

谢谢。


阅读 266

收藏
2020-06-03

共1个答案

小编典典

在以下位置有一个move_pages功能-lnumahttp :
//linux.die.net/man/2/move_pages

可以将地址(页面)的当前状态报告给节点映射:

节点也可以为NULL,在这种情况下,move_pages()不会移动任何页面,而是会在状态数组中返回当前每个页面所在的节点。为了确定需要移动的页面,可能需要获取每个页面的状态。

因此,呼叫可能像:

 void * ptr_to_check = your_address;
 /*here you should align ptr_to_check to page boundary */
 int status[1];
 int ret_code;
 status[0]=-1;
 ret_code=move_pages(0 /*self memory */, 1, &ptr_to_check,
    NULL, status, 0);
 printf("Memory at %p is at %d node (retcode %d)\n", ptr_to_check, status[0], ret_code);
2020-06-03