【问题标题】:What happens when RDMA operates over mmaped region?当 RDMA 在映射区域上运行时会发生什么?
【发布时间】:2015-11-28 13:26:30
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: c++ operating-system mpi rdma


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的精彩回答:D 我希望英特尔的 MPI 库在 Linux 和 Windows 中都使用这个概念。 (似乎有必要固定感兴趣的页面,以便 RDMA 可以安全地读取页面。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多