类似于此post,我想在特定的NUMA节点(不一定是本地)上创建一个命名的共享内存段(通过CentOS 7上的shm_open() + mmap()创建)。该帖子建议通过使用numa_move_pages()来实现。

我还有几个问题:

  • 如果稍后启动另一个进程(在另一个NUMA本地的核心上运行),并将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/

    10-16 02:14