在特定的NUMA节点上创建命名共享内存?

13
与此帖子类似,我想在特定的NUMA节点(不一定是本地的)上创建一个命名的共享内存段(通过CentOS 7上的shm_open()+mmap()创建)。该帖子建议使用numa_move_pages()来实现。
我还有几个问题:
1. 如果另一个进程(在与不同NUMA本地核心上运行)稍后启动并对相同的命名共享内存段进行mmap(),操作系统会决定将命名共享内存段移动到本地的NUMA吗?如果是,如何防止它? 2. 是否存在其他情况,在我通过numa_move_pages()指定后,命名共享内存段将被移动到另一个NUMA? 3. 给定/shm/dev中的命名共享内存段,如何检查它属于哪个NUMA节点?
我研究了numactl,它的--membind选项接近我想要的,但我不确定如果两个不同的进程使用--membind绑定到2个不同的节点时会发生什么。谁赢了?如果回答了第3个问题,我想我可以测试一下。
谢谢!
1个回答

2
我只能回答第1点和第3点。
第1点:
据我从我的老师和链接所了解到的:在NUMA机器上,页面可以被移动到最接近调用CPU的位置。换句话说:如果你的页面被分配在bank 0上,但直接连接到bank 1的CPU更经常使用它,那么你的页面将被移动到bank 1上。
第3点:
给定一个命名的共享内存,我不知道如何获取调用numa节点,但是给定一个在这个共享内存中的指针,你可以通过调用get_mempolicy()来获取其内存策略。

如果标志指定MPOL_F_ADDR,则返回有关addr中给定的内存地址的策略信息。如果使用mbind(2)或numa(3)中描述的一个辅助函数为包含addr的内存范围建立策略,则此策略可能与进程的默认策略不同。

get_mempolicy()的手册页这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接