类似于此post,我想在特定的NUMA节点(不一定是本地)上创建一个命名的共享内存段(通过CentOS 7上的shm_open()
+ mmap()
创建)。该帖子建议通过使用numa_move_pages()
来实现。
我还有几个问题:
mmap()
s移至相同的命名共享内存段,则操作系统会决定将命名共享内存段移动到该进程本地的NUMA吗?如果是,我该如何预防? numa_move_pages()
指定后,是否还有其他情况将已命名的共享内存段移动到另一个NUMA? /shm/dev
中的命名共享内存段,如何检查它属于哪个NUMA节点? 我调查了
numactl
,它的--membind
选项接近我想要的选项,但是我不确定如果两个不同的进程对两个不同的节点使用--membind
会产生什么影响。谁赢?我想如果可以回答#3,我可以测试一下。谢谢!
最佳答案
我只想回答第1点和第3点。
要点1:
据我的老师们以及这link所说的,我记得:NUMA计算机上的页面可以移动到最靠近调用最多的CPU的位置。换句话说:如果您的页面分配在bank 0上,但是直接连接到bank 1的CPU使用它的频率更高,那么您的页面将移到bank 1上。
第3点:
给定一个命名的共享内存,我不知道如何获得调用的numa节点,但是给定此共享内存中的指针,您可以通过调用get_mempolicy()
来获取其内存策略
从get_mempolicy()
的手册页here
关于在特定的NUMA节点上创建命名共享内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51692869/