12

与这篇文章类似,我想在特定的 NUMA 节点(不一定是本地的)上创建一个命名的共享内存段(在 CentOS 7 上通过shm_open()+创建)。mmap()该帖子建议使用numa_move_pages().

我还有几个问题:

  1. 如果另一个进程(在不同 NUMA 本地的核心上运行)稍后启动并mmap()s 到同一个命名的共享内存段,操作系统会决定将命名的共享内存段移动到该进程本地的 NUMA 吗?如果是,我该如何预防?

  2. 在我指定 through 之后,是否还有其他情况将命名的共享内存段移动到另一个 NUMA numa_move_pages()

  3. 给定一个命名的共享内存段/shm/dev,我如何检查它属于哪个 NUMA 节点?

我查看了numactl,它的--membind选项与我想要的很接近,但我不确定如果两个不同的进程用于--membind2 个不同的节点会产生什么影响。谁赢?我想如果#3得到回答,我可以测试一下。

谢谢!

4

1 回答 1

1

我只回答第 1 点和第 3 点。

第 1 点:

据我记得我的老师和这个链接所说的:NUMA 机器上的页面可以移动到最接近调用最多的 CPU 的位置。换句话说:如果您的页面分配在 bank 0 上,但直接连接到 bank 1 的 CPU 使用它的频率更高,那么您的页面将移动到 bank 1。

第 3 点:

给定一个命名的共享内存,我不知道你是如何获得调用 numa 节点的,但是给定一个位于这个共享内存中的指针,你可以通过调用来获取它的内存策略:get_mempolicy()

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

get_mempolicy() 这里的手册页

于 2018-09-27T10:02:31.103 回答