RDMA 是绕过应用程序和操作系统内核之间无用数据拷贝的有效方法。 Mmap 是一种处理大文件的有效方法,就好像它只是一个字节数组。
我正在通过 Infiniband 使用 MPI,它支持进程之间的 RDMA 网络操作。每个 MPI 进程都有一个非常大的文件要与其他人共享。
每个 MPI 进程可以在每个大文件上创建 mmap 区域并与其他人共享吗?我想允许每个进程读取任何进程的任何文件,就好像它通过 RDMA(MPI 的单面通信)读取它们的内存一样。
据我所知,当应用程序调用 RDMA 操作时,它会直接将“虚拟内存地址”传递给 NIC。 NIC 将处理从虚拟内存地址到其物理内存地址的转换。如果 RDMA 驱动程序在向 NIC 发出请求之前固定感兴趣的页面,我认为它会起作用。有没有人有这方面的经验? :D
谢谢
最佳答案
是的,您可以向 RDMA 注册使用 mmap()
映射的内存区域。请参阅 ibv_reg_mr
( http://www.rdmamojo.com/2012/09/07/ibv_reg_mr/ ) 的文档,其中说:
关于c++ - 当 RDMA 在 mmaped 区域上运行时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33971851/