当RDMA在mmaped区域运行时会发生什么?

时间:2015-11-28 13:26:30

标签: c++ operating-system mpi rdma

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

我正在通过Infiniband与MPI合作,它支持进程之间的RDMA网络操作。每个MPI进程都有一个非常大的文件可供其他人共享。

每个MPI流程都可以在每个大文件上创建mmap区域并与其他人共享吗?我想允许每个进程读取任何进程的任何文件,就好像它通过RDMA读取内存(MPI的单向通信)。

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

感谢

1 个答案:

答案 0 :(得分:4)

是的,您可以使用mmap()向RDMA注册一个内存区域。请参阅ibv_reg_mrhttp://www.rdmamojo.com/2012/09/07/ibv_reg_mr/)的文档,其中包含:

  

可以注册调用进程的虚拟空间中的每个内存地址,包括但不限于:

     
      
  • 本地内存(变量或数组)
  •   
  • 全局内存(变量或数组)
  •   
  • 动态分配内存(使用malloc()或mmap())
  •