当前位置: 首页 > 面试题库 >

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

和斌
2023-03-14
问题内容

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

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

谢谢。


问题答案:

在以下位置有一个move_pages功能-lnuma:http :
//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);


 类似资料:
  • 问题内容: 如何获取此容器内的容器ip地址? ‘docker inspect $ hostname …’不适合,因为我不将/var/run/docker.sock主机文件共享到容器。 问题答案: 由于IP地址位于/ etc / hosts的第一行中,因此您可以在容器中执行awk命令,该命令显示/ etc / hosts的第一行的第一个单词

  • 问题内容: 我在Linux上使用libnuma。我的线程应该知道它们正在运行的节点/核心。是否可以某种方式获取当前线程的节点/核心?我已经看过文档,但是没有找到这样的功能… 问题答案: 我找到了这个解决方案: 然后,如果需要cpu的节点,则可以使用numa.h:

  • 问题1. 为什么将原生指针放到智能指针里后,再通过 get()取出来的地址和原生指针地址不同呢? 比如例子中打印的base0和 base2不同。 问题2. 为什么将 nullptr 放到智能指针里后,通过 get()取出来的地址不是 nullptr 呢? 那如果判断智能指针管理的原生指针是否为 nullptr呢? 输出: base0=0x156704080 base1=0x0 base2=0x15

  • 问题内容: 我如何获得我的IP地址(最好是格式)? 问题答案: 此示例代码列出了计算机上存在的所有IPv4网络接口的接口名称(例如或)以及当前分配的IP地址:

  • 问题内容: 我的问题与其他询问故障地址的问题有所不同。我正在尝试实施一个可怕的技巧,通过检查保存的指令指针处的代码并将其与主机体系结构的可能的syscall输入指令进行比较,从信号处理程序中确定信号是否中断了syscall或普通用户代码。运行。这是实现正确的POSIX线程取消的一部分,该操作不会受到我的旧问题中描述的竞争条件和资源泄漏的影响: 如果这种方法不可靠或其他错误,我也想听听原因。 问题答

  • 问题内容: 我正在尝试使用哨兵来获取我的主服务器的连接地址,问题是哨兵仅在故障转移时发送该地址,但是如果我的主服务器关闭并且从属服务器被提升为主服务器并且我的应用程序刚刚启动,则不会知道并且不会收到有关原始主服务器已关闭的消息,是否有任何方法可以与哨兵通信,并询问他认为主服务器正在使用C#servicestack redis客户端的人? 问题答案: 不得不这样做,我使用下一个代码段模仿了redis