当 RDMA 在映射区域上运行时会发生什么?

What happens when RDMA operates over mmaped region?

RDMA 是绕过应用程序和 OS 内核之间无用数据副本的有效方法。 Mmap 是处理大文件的有效方法,就好像它只是一个字节数组一样。

我正在使用支持进程间 RDMA 网络操作的 Infiniband 上的 MPI。每个 MPI 进程都有一个非常大的文件要与其他进程共享。

每个 MPI 进程是否可以在每个大文件上创建 mmap 区域并与其他进程共享?我想让每个进程读取任何进程的任何文件,就好像它通过 RDMA(MPI 的单向通信)读取它们的内存一样。

据我所知,当应用程序调用 RDMA 操作时,它会将 'virtual memory address' 直接传递给 NIC。 NIC 将处理从虚拟内存地址到其物理内存地址的转换。如果 RDMA 驱动程序在向 NIC 发出请求之前固定兴趣页面,我认为它会起作用。有没有人对此有任何经验? :D

谢谢

是的,您可以使用 RDMA 注册使用 mmap() 映射的内存区域。请参阅 ibv_reg_mr (http://www.rdmamojo.com/2012/09/07/ibv_reg_mr/) 的文档,其中说:

Every memory address in the virtual space of the calling process can be registered, including, but not limited to:

  • Local memory (either variable or array)
  • Global memory (either variable or array)
  • Dynamically allocated memory (using malloc() or mmap())