1

我有应该通过 IB 网络交换文件的补充流程。然后这些文件将被其他进程使用。

工作流程如下:

  1. 在 /dev/shm 中创建文件
  2. 适当调整文件大小
  3. 映射进程虚拟机中的文件
  4. 使用 ibv_reg_mr 注册映射区域
  5. 为数据传输启动 RDMA 操作

原来我的方案的瓶颈是 ib_reg_mr(我单独测量了注册 3Gb 内存需要 1.78 秒)。似乎它触发了内存区域到进程地址空间的映射。不幸的是,不需要这个操作,因为接收进程不使用这块内存。该内存应该稍后被其他进程映射和使用。

因此,我认为避免更改接收过程的页表是明智之举,但我根本无法找到它是否可能。

您能否建议我,如果有一种方法可以在内存区域上启动数据传输而不将其映射到进程的地址空间?

4

2 回答 2

2

据我所知,如果不将内存区域映射到进程页表,就无法注册内存区域。在注册期间,页面被固定,以便在设备访问页面时映射不会更改,这需要将它们映射到进程。使用按需分页,您可以延迟将页面映射到进程中,直到 HCA 实际使用它们,但最终它们将被映射。

于 2016-06-06T10:14:26.160 回答
1

请改用 FRWR(快速内存注册工作请求)。它是一个通过 ibv_post_send 动词进行内存注册的 API - 更快的方式:

http://lists.openfabrics.org/pipermail/general/2008-May/050235.html

http://lxr.free-electrons.com/source/include/rdma/ib_verbs.h?v=3.2#L734

于 2016-06-05T12:38:49.403 回答